control-system/Assignment 6 - Tuning PID/assign_6_pso_with_timestamp.ipynb

494 lines
58 KiB
Plaintext
Raw Permalink Normal View History

2022-09-29 13:05:31 +07:00
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"source": [
"<h1>Tugas kelompok sisken</h1>\n",
"<p>\n",
"Anggota:\n",
"Nanda Riangga Damanik (19/442385/PA/19134)<br>\n",
"Gabriel Possenti (19/442374/PA/19123)<br>\n",
"Aziz<br>\n",
"Ivander Achmad W. (19/442377/PA/19126)<br>\n",
"\n",
"</p>"
],
"metadata": {
"id": "NVGE7Ov689Yv"
}
},
{
"cell_type": "code",
"source": [
"!pip install slycot\n",
"!pip install control"
],
"metadata": {
"id": "rh1dEWqiX2eC",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "84e97c6d-94d0-421e-8095-e729c9a34db8"
},
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Collecting slycot\n",
" Downloading slycot-0.5.0.0.tar.gz (3.0 MB)\n",
"\u001b[K |████████████████████████████████| 3.0 MB 31.2 MB/s \n",
"\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
" Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n",
"Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from slycot) (1.21.6)\n",
"Building wheels for collected packages: slycot\n",
" Building wheel for slycot (PEP 517) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for slycot: filename=slycot-0.5.0-cp37-cp37m-linux_x86_64.whl size=2021298 sha256=ef6b71965ab3a32f21fe1daea1abbd06cfbfa806c45e9a65c6796ef179774339\n",
" Stored in directory: /root/.cache/pip/wheels/7f/2e/54/e2cb7cf358f956ed0efa9923ab4f5aa353a941422c55b25531\n",
"Successfully built slycot\n",
"Installing collected packages: slycot\n",
"Successfully installed slycot-0.5.0\n",
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Collecting control\n",
" Downloading control-0.9.2.tar.gz (398 kB)\n",
"\u001b[K |████████████████████████████████| 398 kB 31.3 MB/s \n",
"\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from control) (1.21.6)\n",
"Requirement already satisfied: scipy in /usr/local/lib/python3.7/dist-packages (from control) (1.7.3)\n",
"Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from control) (3.2.2)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->control) (1.4.4)\n",
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->control) (0.11.0)\n",
"Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->control) (2.8.2)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->control) (3.0.9)\n",
"Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from kiwisolver>=1.0.1->matplotlib->control) (4.1.1)\n",
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->control) (1.15.0)\n",
"Building wheels for collected packages: control\n",
" Building wheel for control (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for control: filename=control-0.9.2-py2.py3-none-any.whl size=403205 sha256=b7dbf248d6db2ffa075018978d031e1b619234352ae5cc429fa52fd4ae0e9685\n",
" Stored in directory: /root/.cache/pip/wheels/48/ef/c2/929bb5c59a1328df00a0561d0e68cd7c8537f33f5ce0ce741b\n",
"Successfully built control\n",
"Installing collected packages: control\n",
"Successfully installed control-0.9.2\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "tlHXy4vZR402",
"outputId": "27da5aad-c71a-4dfb-91c4-04e9c4fd091b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"2790.4639871211475\n",
"<class 'numpy.ndarray'>\n"
]
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import control.matlab as control\n",
"import time\n",
"\n",
"def step_info(t,yout):\n",
" print(\"% overshoot : \",(yout.max()/yout[-1]-1)*100,'%')\n",
" print(\"Rise time : \",t[next(i for i in range(0,len(yout)-1) if yout[i]>yout[-1]*.90)]-t[0])\n",
" print(\"%Settling time : \",t[next(len(yout)-i for i in range(2,len(yout)-1) if abs(yout[-i]/yout[-1])>1.02)]-t[0])\n",
"\n",
"s = control.tf('s')\n",
"J = 0.01\n",
"b = 0.1\n",
"K = 0.01\n",
"R = 1\n",
"L = 0.5\n",
"\n",
"num_motor = [K]\n",
"den_motor = [J*L, J*R+b*L, R*b+K*K]\n",
"\n",
"motor = control.tf(num_motor, den_motor)\n",
"\n",
"# Constant\n",
"c1=2\n",
"c2=2 \n",
"w_max = 1 \n",
"w_min = 0.1 \n",
"particles=50 \n",
"iterations=100\n",
"var=3 \n",
"e_max = 1 \n",
"e_min=0.1\n",
"\n",
"# Declaration\n",
"v = np.zeros([particles, var])\n",
"x = np.zeros([particles, var])\n",
"xp = np.zeros([particles, var])\n",
"xg = np.zeros([var])\n",
"ITAEp = np.zeros([particles])\n",
"ITAE = np.zeros([particles])\n",
"best_value = np.zeros([999999])\n",
"\n",
"\n",
"# Search limit\n",
"lim_min = 0\n",
"lim_max = 2500\n",
"\n",
"# limization steps\n",
"steps = 0\n",
"\n",
"# Initialization\n",
"for m in range(particles):\n",
" for n in range(var):\n",
" v[m,n]=0\n",
" x[m,n]=lim_min+np.random.rand()*(lim_max-lim_min)\n",
" xp[m,n]=x[m,n]\n",
"\n",
" # Model Parameters\n",
" Kp = x[m,0]\n",
" Ki = x[m,1]\n",
" Kd = x[m,2]\n",
" # Simulation Model\n",
" pid = control.tf([Kd,Kp,Ki],[0,1,0])\n",
" motor_cl = control.feedback(motor * pid, 1)\n",
" [y,t] = control.step(motor_cl)\n",
" # TIAE (Objective Function)\n",
" total = 0.0\n",
" T = len(y)\n",
" for t in range(T):\n",
" total = total + t*abs(y[t]-1)\n",
" ITAE[m] = total\n",
"\n",
"print(ITAE[0])\n",
"print(type(ITAE))"
]
},
{
"cell_type": "code",
"source": [
"prev_best = min(ITAE)\n",
"loc = np.searchsorted(ITAE, min(ITAE))\n",
"xg[0] = x[loc,0]\n",
"xg[1] = x[loc,1]\n",
"xg[2] = x[loc,2]"
],
"metadata": {
"id": "xY1bhLrhz5tu"
},
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"source": [
"start = time.time()\n",
"\n",
"for i in range(iterations):\n",
" e = e_max - ((e_max - e_min)*i)/iterations\n",
" w = w_min + ((iterations - i)*(w_max - w_min))/iterations\n",
" for m in range(particles):\n",
" for n in range(var):\n",
" v[m,n] = w*v[m,n] + c1*np.random.rand()*(xp[m,n]-x[m,n]) + c2*np.random.rand()*(xg[n]-x[m,n])\n",
" x[m,n] = x[m,n] + e*v[m,n];\n",
" # Constrain\n",
" if x[m,n] < lim_min:\n",
" x[m,n] = lim_min\n",
" if x[m,n] > lim_max:\n",
" x[m,n] = lim_max\n",
" \n",
" Kp = x[m,0]\n",
" Kp = x[m,1]\n",
" Kp = x[m,2]\n",
" pid = control.tf([Kd, Kp, Ki],[0,1,0])\n",
" motor_cl = control.feedback(motor * pid, 1)\n",
" [y,t] = control.step(motor_cl)\n",
"\n",
" total = 0\n",
" T = len(y)\n",
" for t in range(T):\n",
" total = total + (t*abs(y[t]-1))\n",
" \n",
" ITAEp[m] = total\n",
"\n",
" if ITAEp[m] < ITAE[m]:\n",
" ITAE[m] = ITAEp[m]\n",
" xp[m,0] = x[m,0]\n",
" xp[m,1] = x[m,1]\n",
" xp[m,2] = x[m,2]\n",
" \n",
"\n",
" now_best = min(ITAE)\n",
" loc = np.searchsorted(ITAE, min(ITAE))\n",
"\n",
" if now_best < prev_best:\n",
" prev_best = now_best\n",
" xg[0] = x[loc,0]\n",
" xg[1] = x[loc,1]\n",
" xg[2] = x[loc,2]\n",
" \n",
" steps = steps + 1\n",
" best_value[steps] = prev_best\n",
"\n",
"end = time.time()\n",
"\n",
"print(\"Time elapsed: \", end - start, \"s\")"
],
"metadata": {
"id": "0fC4tNGBxRx9",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "772570c9-dd1f-4b1d-c299-6bf5ec7b3265"
},
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Time elapsed: 228.38785576820374 s\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Final testing\n",
"ITAE_min = prev_best\n",
"Kp = xg[0]\n",
"Ki = xg[1]\n",
"Kd = xg[2]\n",
"\n",
"pid = control.tf([Kd, Kp, Ki],[0,1,0])\n"
],
"metadata": {
"id": "4EysKchgx--6"
},
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"source": [
"motor_cl = control.feedback(motor * pid, 1)\n",
"motor_l = control.feedback(motor, 1)\n",
"\n"
],
"metadata": {
"id": "WZ1DM3Y7i2m0"
},
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"source": [
"(t,y) = control.step(motor_l)\n",
"\n",
"plt.plot(t,y)\n",
"plt.xlabel('motor_l')\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"id": "DTiYuZi00l7C",
"outputId": "bbb8b18a-65b3-4cfe-a354-75556ee0a332"
},
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"(t,y) = control.step(motor_cl)\n",
"\n",
"plt.plot(t,y)\n",
"plt.xlabel('motor_cl')\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"id": "dxMJTkSX2DsB",
"outputId": "c8a7eee2-b2ba-43a2-b64e-a00f0312e964"
},
"execution_count": 8,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"(t,y) = control.step(motor_l/(s**2))\n",
"\n",
"plt.plot(t,y)\n",
"plt.xlabel('motor_l')\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"id": "nEa8Y4Xy2PZu",
"outputId": "2dbc182a-8300-4285-9b33-fcdc2e228b6a"
},
"execution_count": 9,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"(t,y) = control.step(motor_cl/(s**2))\n",
"\n",
"plt.plot(t,y)\n",
"plt.xlabel('motor_cl')\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"id": "qMQ5T9Vo2V4O",
"outputId": "03dc4e63-5a72-4f6e-c4b3-d84884101188"
},
"execution_count": 10,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"def step_info(t,yout):\n",
" try:\n",
" print(\"% overshoot : \",(yout.max()/yout[-1]-1)*100,'%')\n",
" except:\n",
" print(\"% overshoot : -\")\n",
" try:\n",
" print(\"Rise time : \",t[next(i for i in range(0,len(yout)-1) if yout[i]>yout[-1]*.90)]-t[0])\n",
" except:\n",
" print(\"Rise time : -\")\n",
" try:\n",
" print(\"%Settling time : \",t[next(len(yout)-i for i in range(2,len(yout)-1) if abs(yout[-i]/yout[-1])>1.02)]-t[0])\n",
" except:\n",
" print(\"%Settling time : -\")\n",
"\n",
"y,t = control.step(motor_l)\n",
"step_info(t,y)\n",
"\n",
"print(\"\")\n",
"\n",
"y,t = control.step(motor_cl)\n",
"step_info(t,y)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Uv3JS6zCRaf6",
"outputId": "4c56bc20-f94e-43ce-9f1f-697da03d2231"
},
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"% overshoot : 0.0 %\n",
"Rise time : 1.1315389526151183\n",
"%Settling time : -\n",
"\n",
"% overshoot : 0.15210430606766856 %\n",
"Rise time : 0.005695236394454569\n",
"%Settling time : -\n"
]
}
]
}
]
}