mirror of
https://github.com/ejeanboris/MDAF.git
synced 2025-04-29 12:02:31 +00:00
349 lines
16 KiB
Plaintext
349 lines
16 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'\\npso.py\\nA simple implementation of the Particle Swarm Optimisation Algorithm.\\nUses Numpy for matrix operations. \\nPradeep Gowda 2009-03-16\\n\\n'"
|
|
]
|
|
},
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"#!/usr/bin/env python\n",
|
|
"\n",
|
|
"'''\n",
|
|
"pso.py\n",
|
|
"A simple implementation of the Particle Swarm Optimisation Algorithm.\n",
|
|
"Uses Numpy for matrix operations. \n",
|
|
"Pradeep Gowda 2009-03-16\n",
|
|
"\n",
|
|
"'''"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from numpy import *\n",
|
|
"from random import random\n",
|
|
"from math import sin, sqrt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"iter_max = 10000\n",
|
|
"pop_size = 100\n",
|
|
"dimensions = 2\n",
|
|
"c1 = 2\n",
|
|
"c2 = 2\n",
|
|
"err_crit = 0.00001"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class Particle:\n",
|
|
" pass\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def f6(param):\n",
|
|
" para = param*10\n",
|
|
" para = param[0:2]\n",
|
|
" num = (sin(sqrt((para[0] * para[0]) + (para[1] * para[1])))) * \\\n",
|
|
" (sin(sqrt((para[0] * para[0]) + (para[1] * para[1])))) - 0.5\n",
|
|
" denom = (1.0 + 0.001 * ((para[0] * para[0]) + (para[1] * para[1]))) * \\\n",
|
|
" (1.0 + 0.001 * ((para[0] * para[0]) + (para[1] * para[1])))\n",
|
|
" f6 = 0.5 - (num/denom)\n",
|
|
" errorf6 = 1 - f6\n",
|
|
" return f6, errorf6;\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#initialize the particles\n",
|
|
"particles = []\n",
|
|
"for i in range(pop_size):\n",
|
|
" p = Particle()\n",
|
|
" p.params = array([random() for i in range(dimensions)])\n",
|
|
" p.fitness = 0.0\n",
|
|
" p.v = 0.0\n",
|
|
" particles.append(p)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# let the first particle be the global best\n",
|
|
"gbest = particles[0]\n",
|
|
"err = 999999999\n",
|
|
"while i < iter_max :\n",
|
|
" for p in particles:\n",
|
|
" fitness,err = f6(p.params)\n",
|
|
" if fitness > p.fitness:\n",
|
|
" p.fitness = fitness\n",
|
|
" p.best = p.params\n",
|
|
"\n",
|
|
" if fitness > gbest.fitness:\n",
|
|
" gbest = p\n",
|
|
" v = p.v + c1 * random() * (p.best - p.params) \\\n",
|
|
" + c2 * random() * (gbest.params - p.params)\n",
|
|
" p.params = p.params + v\n",
|
|
" \n",
|
|
" i += 1\n",
|
|
" if err < err_crit:\n",
|
|
" break\n",
|
|
" #progress bar. '.' = 10%\n",
|
|
" if i % (iter_max/10) == 0:\n",
|
|
" print('.')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Particle Swarm Optimisation\n",
|
|
"\n",
|
|
"PARAMETERS\n",
|
|
" ---------\n",
|
|
"Population size : 100\n",
|
|
"Dimensions : 2\n",
|
|
"Error Criterion : 1e-05\n",
|
|
"c1 : 2\n",
|
|
"c2 : 2\n",
|
|
"function : f6\n",
|
|
"RESULTS\n",
|
|
" -------\n",
|
|
"gbest fitness : 0.9999998959199905\n",
|
|
"gbest params : [ 0.00025095 -0.00020248]\n",
|
|
"iterations : 107\n",
|
|
"params: [-0.00186491 -0.00125129], fitness: 0.9999940501855731, best: [-0.00202009 -0.00136496]\n",
|
|
"params: [-0.02024712 -0.03991588], fitness: 0.9921880164520516, best: [0.04062241 0.07857791]\n",
|
|
"params: [ 0.00164549 -0.00145206], fitness: 0.9999880309131435, best: [ 0.00230598 -0.00257675]\n",
|
|
"params: [0.03177491 0.02362014], fitness: 0.9977421176253256, best: [-0.0382471 -0.02818674]\n",
|
|
"params: [-0.00580889 -0.02935609], fitness: 0.9972713772514697, best: [-0.0104284 -0.0511824]\n",
|
|
"params: [ 0.00018095 -0.0006362 ], fitness: 0.9999995620667945, best: [ 0.00018095 -0.0006362 ]\n",
|
|
"params: [0.00271906 0.00529463], fitness: 0.9998854432411289, best: [-0.00382274 -0.00999167]\n",
|
|
"params: [ 0.00111366 -0.00196693], fitness: 0.9999894915409011, best: [-0.00203316 0.00252275]\n",
|
|
"params: [-0.28785638 -1.4943572 ], fitness: 0.995928521299837, best: [0.01303161 0.06247514]\n",
|
|
"params: [ 0.00134926 -0.00370812], fitness: 0.9999909457030347, best: [-0.00112223 0.00279032]\n",
|
|
"params: [0.00120681 0.00172981], fitness: 0.9996014671245751, best: [0.00832072 0.01813707]\n",
|
|
"params: [-0.00100274 0.00067964], fitness: 0.9999525374570025, best: [-0.00481741 0.00492021]\n",
|
|
"params: [ 0.00024055 -0.00180948], fitness: 0.999989766197708, best: [-1.38013532e-05 3.19740883e-03]\n",
|
|
"params: [ 0.00024855 -0.00034993], fitness: 0.9999985351992429, best: [0.00058164 0.00106068]\n",
|
|
"params: [0.00082524 0.00318678], fitness: 0.9999339448379567, best: [-0.00106898 -0.00805282]\n",
|
|
"params: [-0.00340732 -0.00290011], fitness: 0.997707587383496, best: [0.04082372 0.02500612]\n",
|
|
"params: [ 0.00017674 -0.00064478], fitness: 0.9999973510847755, best: [-0.00029196 -0.00160032]\n",
|
|
"params: [ 0.00145209 -0.00166574], fitness: 0.9999911558348802, best: [ 0.00205136 -0.00215111]\n",
|
|
"params: [ 5.68013521e-04 -5.08192807e-05], fitness: 0.9999990247916111, best: [0.00088738 0.00043219]\n",
|
|
"params: [ 0.00199249 -0.00155308], fitness: 0.9999908484877316, best: [ 0.00244328 -0.00178124]\n",
|
|
"params: [ 0.00073308 -0.00013062], fitness: 0.9999810013741331, best: [0.00358267 0.00247876]\n",
|
|
"params: [ 0.00355415 -0.01364345], fitness: 0.9995581662239887, best: [ 0.00528928 -0.02033424]\n",
|
|
"params: [0.00245413 0.00216291], fitness: 0.9999395476561357, best: [-0.00446682 -0.0063593 ]\n",
|
|
"params: [0.00299353 0.01964915], fitness: 0.9983231774449315, best: [0.00588655 0.04051465]\n",
|
|
"params: [0.00048506 0.00041008], fitness: 0.9999995058482637, best: [0.00050719 0.00048623]\n",
|
|
"params: [4.30324235e-04 7.30386070e-05], fitness: 0.9999998092959131, best: [4.30324235e-04 7.30386070e-05]\n",
|
|
"params: [-0.0347226 -0.02206223], fitness: 0.9979272071263365, best: [-0.03843088 -0.02439728]\n",
|
|
"params: [0.00678215 0.02269266], fitness: 0.9992656691814784, best: [0.0077025 0.02597016]\n",
|
|
"params: [0.00055796 0.00010919], fitness: 0.999998189199209, best: [-0.0012805 -0.00041149]\n",
|
|
"params: [ 0.00078063 -0.00035752], fitness: 0.9999994129521279, best: [-0.00012497 0.00075554]\n",
|
|
"params: [-0.00878018 -0.00502527], fitness: 0.9998266344996976, best: [0.01158363 0.00624675]\n",
|
|
"params: [0.12092256 0.1186333 ], fitness: 0.9475958579352575, best: [0.16473202 0.16174032]\n",
|
|
"params: [0.00126559 0.00260719], fitness: 0.999986199896642, best: [0.00152246 0.00338652]\n",
|
|
"params: [-0.0035059 -0.00902382], fitness: 0.9963509358994915, best: [-0.02375389 -0.05554846]\n",
|
|
"params: [ 0.0006644 -0.00983251], fitness: 0.9995923173662288, best: [ 0.0009085 -0.02016198]\n",
|
|
"params: [-0.0111273 -0.00444136], fitness: 0.999697820397464, best: [-0.01615227 -0.0064041 ]\n",
|
|
"params: [0.00040747 0.00014739], fitness: 0.9999978164000456, best: [ 0.00082853 -0.00122268]\n",
|
|
"params: [0.00049128 0.00040612], fitness: 0.9999995081180739, best: [0.00050578 0.00048536]\n",
|
|
"params: [0.0044441 0.00673657], fitness: 0.9999116725633042, best: [-0.00456044 -0.00821244]\n",
|
|
"params: [ 0.00452497 -0.07083884], fitness: 0.9769744514531291, best: [ 0.00921015 -0.1519776 ]\n",
|
|
"params: [0.00140504 0.00186235], fitness: 0.9999919017883473, best: [0.00165188 0.00231548]\n",
|
|
"params: [3.54286375e-04 6.28855649e-05], fitness: 0.9999996074591595, best: [-6.22563901e-04 -6.75494840e-05]\n",
|
|
"params: [4.30160302e-04 7.32836217e-05], fitness: 0.9999997797912801, best: [4.68770875e-04 1.55760770e-05]\n",
|
|
"params: [-0.00039276 0.00013026], fitness: 0.9999996626875585, best: [-0.00056284 0.00014208]\n",
|
|
"params: [-0.00195994 0.00040182], fitness: 0.9999957484677082, best: [-0.00201969 0.00041004]\n",
|
|
"params: [-0.0011974 0.00110278], fitness: 0.9999768596639951, best: [ 0.00421174 -0.00231918]\n",
|
|
"params: [0.00080766 0.00091821], fitness: 0.9999981351129812, best: [0.000868 0.00105337]\n",
|
|
"params: [ 0.00021922 -0.00014192], fitness: 0.9999983052393893, best: [0.00107645 0.00073097]\n",
|
|
"params: [4.10881630e-04 2.71160266e-05], fitness: 0.9999991425547139, best: [0.00066981 0.0006387 ]\n",
|
|
"params: [0.00194585 0.00157477], fitness: 0.9999750955495689, best: [-0.00336195 -0.00368471]\n",
|
|
"params: [0.02988831 0.01004365], fitness: 0.9983009141005307, best: [-0.03901362 -0.01327751]\n",
|
|
"params: [0.02266792 0.03032028], fitness: 0.9984454206470884, best: [-0.02310404 -0.03193804]\n",
|
|
"params: [ 0.00067503 -0.00111644], fitness: 0.9999853854120391, best: [-0.00033765 0.00380605]\n",
|
|
"params: [0.00031782 0.00111173], fitness: 0.9999476255647344, best: [-0.00034433 0.00722527]\n",
|
|
"params: [1.73583501 2.71552523], fitness: 0.8238047572733425, best: [-0.25574615 -0.34942504]\n",
|
|
"params: [ 5.50786280e-04 -9.20610561e-05], fitness: 0.9999997500985931, best: [0.00013201 0.0004819 ]\n",
|
|
"params: [-0.0092615 0.00433553], fitness: 0.9998254823089934, best: [-0.01198831 0.00553479]\n",
|
|
"params: [0.00127508 0.00420752], fitness: 0.9999574127721693, best: [-0.00090444 -0.00645967]\n",
|
|
"params: [ 0.00030207 -0.00026591], fitness: 0.9999991930248349, best: [0.0006407 0.00062902]\n",
|
|
"params: [0.00097746 0.00032138], fitness: 0.9999530404499168, best: [0.00628211 0.00272919]\n",
|
|
"params: [-6.60815639e-05 -3.94863964e-04], fitness: 0.9999998395554013, best: [-6.60815639e-05 -3.94863964e-04]\n",
|
|
"params: [ 0.0033357 -0.00259892], fitness: 0.9999268511239059, best: [ 0.00696795 -0.0049523 ]\n",
|
|
"params: [ 0.00025095 -0.00020248], fitness: 0.9999998959199905, best: [ 0.00025095 -0.00020248]\n",
|
|
"params: [-0.00084273 0.00167727], fitness: 0.9999711011336345, best: [-0.00260203 0.00470104]\n",
|
|
"params: [ 0.00134952 -0.00957033], fitness: 0.9998900172053184, best: [-0.00099647 0.01043475]\n",
|
|
"params: [-0.00078144 -0.00066365], fitness: 0.9999989369885076, best: [-0.00078647 -0.00066589]\n",
|
|
"params: [-0.00072802 -0.00443465], fitness: 0.9999699497392772, best: [0.00151573 0.00526527]\n",
|
|
"params: [ 0.00018445 -0.00035478], fitness: 0.9999998958154606, best: [ 3.19338663e-04 -4.58615394e-05]\n",
|
|
"params: [0.00204781 0.00580748], fitness: 0.9999492622569479, best: [-0.00175168 -0.00690069]\n",
|
|
"params: [0.01203557 0.01614139], fitness: 0.9991449641741144, best: [0.01735595 0.02352014]\n",
|
|
"params: [ 6.43784665e-06 -1.96424806e-04], fitness: 0.9999995564454902, best: [ 0.00063104 -0.0002119 ]\n",
|
|
"params: [0.03231118 0.05249258], fitness: 0.9957288318570747, best: [0.03424909 0.05567777]\n",
|
|
"params: [-0.00312636 0.00279509], fitness: 0.9986665692688796, best: [-0.02729291 0.0242444 ]\n",
|
|
"params: [-7.87064956e-05 -8.77297202e-04], fitness: 0.999999375656603, best: [0.00060047 0.00051299]\n",
|
|
"params: [0.03048498 0.02151175], fitness: 0.9961882662252171, best: [0.05033382 0.0357673 ]\n",
|
|
"params: [ 0.00027764 -0.00016448], fitness: 0.9999997723904569, best: [0.00046556 0.00010315]\n",
|
|
"params: [ 0.00031986 -0.00014394], fitness: 0.999999694488495, best: [5.50038069e-04 5.16183328e-05]\n",
|
|
"params: [ 0.00021719 -0.00017515], fitness: 0.9999998876694272, best: [-0.00026003 0.00021119]\n",
|
|
"params: [0.00042997 0.00018098], fitness: 0.9999995295940882, best: [0.00054164 0.00042019]\n",
|
|
"params: [0.03058739 0.08968073], fitness: 0.9858267514266823, best: [-0.05657146 -0.10500683]\n",
|
|
"params: [0.00051183 0.00569165], fitness: 0.9999847217697404, best: [0.00060257 0.00386005]\n",
|
|
"params: [ 5.74456075e-05 -2.14396005e-04], fitness: 0.9998175622507999, best: [0.01348672 0.00061243]\n",
|
|
"params: [0.00186167 0.00218311], fitness: 0.9999797161320283, best: [-0.00224626 -0.00390103]\n",
|
|
"params: [ 0.00103918 -0.00114635], fitness: 0.9999522338311004, best: [-0.00437944 0.00534226]\n",
|
|
"params: [1.66897837 0.98533387], fitness: 0.9528996129700356, best: [-2.87058828 -1.69777125]\n",
|
|
"params: [ 0.00022169 -0.00020905], fitness: 0.9999993066270301, best: [ 8.29086178e-04 -7.27774663e-05]\n",
|
|
"params: [0.00031617 0.00011897], fitness: 0.9999979816879985, best: [ 3.94733810e-06 -1.41995827e-03]\n",
|
|
"params: [-0.01695506 0.05417627], fitness: 0.9995244025668919, best: [ 0.00419573 -0.02139144]\n",
|
|
"params: [-0.00081278 0.00472481], fitness: 0.9996436046229067, best: [ 0.00417984 -0.01840138]\n",
|
|
"params: [ 0.00023514 -0.00021734], fitness: 0.9999939436293246, best: [0.0019957 0.00143789]\n",
|
|
"params: [ 0.00017354 -0.0010857 ], fitness: 0.9999993595611627, best: [ 0.00073676 -0.00031141]\n",
|
|
"params: [0.0205555 0.01924657], fitness: 0.9990619241474461, best: [-0.02188822 -0.02140885]\n",
|
|
"params: [ 0.00063561 -0.0029103 ], fitness: 0.9999993990164586, best: [ 0.00066814 -0.00039239]\n",
|
|
"params: [-0.02874995 -0.0130972 ], fitness: 0.9926590734245718, best: [-0.07822951 -0.03509736]\n",
|
|
"params: [ 1.11162910e-03 -4.46943752e-05], fitness: 0.9997728668820509, best: [0.01485916 0.00247564]\n",
|
|
"params: [-0.00055077 -0.0058934 ], fitness: 0.9998629794284519, best: [0.00190573 0.01154375]\n",
|
|
"params: [0.00396443 0.0142522 ], fitness: 0.9997489163752509, best: [0.00422452 0.01526458]\n",
|
|
"params: [0.00040531 0.00023427], fitness: 0.9999994074332612, best: [0.00052221 0.00056504]\n",
|
|
"params: [ 0.00015343 -0.00047534], fitness: 0.9999996332860702, best: [0.00046276 0.00039012]\n",
|
|
"params: [-0.0003435 -0.00159017], fitness: 0.9999905888674923, best: [0.0014865 0.0026818]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print ('\\nParticle Swarm Optimisation\\n')\n",
|
|
"print ('PARAMETERS\\n','-'*9)\n",
|
|
"print ('Population size : ', pop_size)\n",
|
|
"print ('Dimensions : ', dimensions)\n",
|
|
"print ('Error Criterion : ', err_crit)\n",
|
|
"print ('c1 : ', c1)\n",
|
|
"print ('c2 : ', c2)\n",
|
|
"print ('function : f6')\n",
|
|
"\n",
|
|
"print ('RESULTS\\n', '-'*7)\n",
|
|
"print ('gbest fitness : ', gbest.fitness)\n",
|
|
"print ('gbest params : ', gbest.params)\n",
|
|
"print ('iterations : ', i+1)\n",
|
|
"## Uncomment to print particles\n",
|
|
"for p in particles:\n",
|
|
" print ('params: %s, fitness: %s, best: %s' % (p.params, p.fitness, p.best) )\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0.0"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"particles[7].v"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([5.00111366, 4.99803307])"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"particles[7].params+5"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.2"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|