{"id":494,"date":"2011-06-20T20:48:00","date_gmt":"2011-06-20T12:48:00","guid":{"rendered":"http:\/\/note.systw.net\/note\/?p=494"},"modified":"2023-11-02T20:50:22","modified_gmt":"2023-11-02T12:50:22","slug":"pso","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/494","title":{"rendered":"PSO"},"content":{"rendered":"\n<p><strong>PSO(Particle Swarm Optimization,\u7c92\u5b50\u65cf\u7fa4\u6700\u4f73\u5316)<\/strong><br>developed in 1995 by Kennedy and Eberhart<br>inspired by social behavior of bird \ufb02ocking<br>\u539f\u7406:\u4e00\u7fa4particle\u5206\u6563\u5728\u4e00\u500bsoluction space\u79fb\u52d5,\u6bcf\u500bparticle\u6703\u8a18\u9304\u81ea\u5df1\u7684position\u548cvelocity<\/p>\n\n\n\n<p><strong>\u6982\u5ff5<\/strong><br>1\u5728pso\u4e2d,\u6bcf\u500bparticle\u4ee3\u8868\u4e00\u500bsolution<br>2\u5224\u65b7solution\u7684\u597d\u58de,\u662f\u6839\u64da\u6bcf\u500bparticle\u7684fitness,\u8a72\u503c\u4f9d\u4e0d\u540cposition\u6703\u91cd\u65b0\u8a08\u7b97<br>3fitness\u7684\u7522\u751f\u65b9\u5f0f,\u4f9d\u64da\u89e3\u4e0d\u540c\u7684\u554f\u984c,\u65b9\u6cd5\u4e5f\u6703\u4e0d\u540c<br>ex:NOP(Numerical Optimization),MNO(Multiobjective Numerical Optimization),BIN(Binary Problem),clustering<br>4\u6bcf\u500bparticle\u6703\u5728solution space\u4e2d\u6839\u64davelocity\u4e0d\u65b7\u79fb\u52d5position,\u4e00\u76f4\u5230\u505c\u6b62\u689d\u4ef6\u6210\u7acb<br>5velocity\u75313\u500b\u503c\u7d44\u6210:1\u4e0a\u6b21\u7684velocity,2\u8a72particle\u672c\u8eab\u7684\u601d\u8003,3\u6240\u6709particle\u76f8\u4e92\u4f5c\u7528\u4e0b\u7684\u601d\u8003<\/p>\n\n\n\n<p><strong>pso\u8cc7\u6e90<\/strong><br>http:\/\/www.adaptivebox.net\/research\/bookmark\/psocodes_link.html<br>http:\/\/www.particleswarm.info\/<br>http:\/\/clerc.maurice.free.fr\/pso\/<\/p>\n\n\n\n<p><strong>\u8cc7\u6599\u7d50\u69cb<\/strong><br>\u5728D\u7dad\u7a7a\u9593\u4e0b,<br>\u7b2ci\u500b\u7c92\u5b50\u4ee3\u8868Xi,\u4e5f\u7b49\u65bc(Xi1,Xi2,&#8230;XiD)<br>pbest:\u7b2ci\u500b\u7c92\u5b50\u7d93\u6b77\u904e\u6700\u597d\u9069\u61c9\u503c\u7684\u4f4d\u7f6e Pi,\u4e5f\u7b49\u65bc(Pi1,Pi2,&#8230;PiD)<br>gbest,\u6240\u6709\u7b2cg\u7fa4\u7684\u7c92\u5b50\u7d93\u6b77\u904e\u6700\u597d\u9069\u61c9\u503c\u7684\u4f4d\u7f6e,Pg = (Pg1, Pg2, &#8230;, PgD),<br>\u7b2ci\u500b\u7c92\u5b50\u7684\u901f\u5ea6(\u79fb\u52d5\u7684\u8ddd\u96e2)\u4ee3\u8868Vi<\/p>\n\n\n\n<p><strong>\u5728\u7b2cd\u500b\u7dad\u5ea6\u7684\u79fb\u52d5\u516c\u5f0f\u70ba<\/strong><br>Vid_new=w*Vid+c1*rand()*(Pid-Xid)+c2*rand()*(Pgd-Xid)<br>ps:\u70ba\u4e86\u9650\u5236velocity\u5728solution space,ex:\u82e5Vid_new &gt; MAX_Vid,\u5247Vid=MAX_Vid<br>Xid_new = Xid + Vid_new<br>ps:\u70ba\u4e86\u9650\u5236position\u5728solution space,\u53ef\u6aa2\u67e5xid\u662f\u5426\u5728\u8a72\u7dad\u5ea6\u6700\u5927\u503c\u8207\u6700\u5c0f\u503c\u4e4b\u9593<\/p>\n\n\n\n<p><strong>\u516c\u5f0f\u8aaa\u660e<\/strong><br>w*Vid \u7c92\u5b50\u4e4b\u524d\u901f\u5ea6\u7684\u6163\u6027,\u503c\u5c0f\u5bb9\u6613local exploration\u6709\u52a9\u65bc\u6536\u6582,\u503c\u5927\u5247\u76f8\u53cd<br>c1*rand()*(Pid-Xid)\u70ba\u7c92\u5b50\u672c\u8eab\u7684\u601d\u8003<br>c2*rand()*(Pgd-Xid)\u70ba\u7c92\u5b50\u76f8\u4e92\u5f71\u97ff\u4e0b\u7684\u601d\u8003<br><strong>\u53c3\u6578\u8aaa\u660e<\/strong><br>Vid \u7c92\u5b50\u4e0a\u6b21\u7684\u901f\u5ea6,\u4e5f\u5c31\u662f\u7c92\u5b50\u4e0a\u6b21\u79fb\u52d5\u7684\u8ddd\u96e2<br>Vmax \u7c92\u5b50\u6700\u5927\u901f\u5ea6,\u592a\u9ad8\u6703\u8d85\u904e\u597d\u89e3,\u592a\u4f4e\u5247\u63a2\u7d22\u4e0d\u8db3,\u5e38\u898b\u7684\u8a2d\u5b9a\u503c\u662f\u8a72\u7dad\u5ea6\u6700\u5927\u53ca\u6700\u5c0f\u7684\u8ddd\u96e2<br>w\uff1aInertia Weight (\u6163\u6027\u6b0a\u91cd)<br>c1,c2\uff1aacceleration constants<br>rand()\uff1a0\u52301\u4e4b\u9593\u7684\u96a8\u6a5f\u6578<\/p>\n\n\n\n<p><strong>\u6b65\u9a5f\u5927\u81f4\u5982\u4e0b<\/strong><br>1random initial,\u96a8\u6a5f\u521d\u59cb\u5316Vid,Xid<br>2evaluate:\u8a08\u7b97\u6bcf\u500b\u7c92\u5b50\u7684fitneess(\u9069\u61c9\u503c)<br>3record pbest and gbest<br>\u5c0d\u6bcf\u500b\u7c92\u5b50,\u82e5\u8a72\u7c92\u5b50\u73fe\u5728\u4f4d\u7f6e\u7684\u9069\u61c9\u503c\u512a\u65bcpbest\u4f4d\u7f6e\u7684\u9069\u61c9\u503c,\u5247pbest\u4f4d\u7f6e=\u73fe\u5728\u4f4d\u7f6e<br>\u5c0d\u6bcf\u500b\u7c92\u5b50,\u82e5\u8a72\u7c92\u5b50\u73fe\u5728\u4f4d\u7f6e\u7684\u9069\u61c9\u503c\u512a\u65bcgbest\u4f4d\u7f6e\u7684\u9069\u61c9\u503c,\u5247gbest\u4f4d\u7f6e=\u73fe\u5728\u4f4d\u7f6e<br>4update Vid and Xid,\u6839\u64da\u79fb\u52d5\u516c\u5f0f\u8abf\u6574\u7c92\u5b50\u4f4d\u7f6e<br>5\u82e5\u9054\u5230\u7d50\u675f\u689d\u4ef6(),\u5426\u5247\u8fd4\u56de\u6b65\u9a5f2<br>ps:\u7d50\u675f\u689d\u4ef6\u8a2d\u5b9a\u901a\u5e38\u70ba:\u8a2d\u5b9a\u56fa\u5b9a\u4e16\u4ee3\u6578,\u6216\u89e3\u4e00\u76f4\u6c92\u6709\u6539\u5584<\/p>\n\n\n\n<p><strong>\u6f14\u7b97\u6cd5\u5927\u81f4\u5982\u4e0b<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/\ninitialize \/\/step1\n\/\/\nfor t=1 to t_max do\u3000 \/\/step5\n\u3000For each particle i do\nassign zp to cluster\n\u3000\u3000calculate fitness \/\/step2\n\u3000update pid(local best) and pgd(global best) \/\/step3\n\/\/\n\u3000For each particle i do\n\u3000\u3000For each data vector zp\n\u3000\u3000\u3000vid = w*vid+c1*rand()*(pid-xid)+c2*Rand()*(pgd-xid) \/\/step4\n\u3000\u3000\u3000if(vid>vmax)vid=vmax\n\u3000\u3000\u3000xid = xid+vid<\/code><\/pre>\n\n\n\n<p>&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<\/p>\n\n\n\n<p><br><strong>\u904b\u7528\u5728\u5206\u7fa4\u7684\u505a\u6cd5<\/strong><br><strong>1<br>\u7dad\u5ea6\u90e8\u4efd<\/strong><br>\u5728\u76ee\u6a19\u8cc7\u6599\u6709D\u7dad\u7a7a\u9593\u4e0b,\u82e5\u8981\u5206N\u7fa4<br>\u7c92\u5b50\u8981\u7dad\u8b77\u6bcf\u7fa4\u7684\u7fa4\u4e2d\u5fc3,\u6240\u4ee5\u7c92\u5b50Xi\u7b49\u65bc(Xi1,Xi2,&#8230;,XiN)<br>\u5c07\u6bcf\u4e00\u7fa4\u62c6\u958b\u5f8c\u5982\u4e0b<br>(Xi11,Xi12,&#8230;,Xi1D<br>,Xi21,Xi22,&#8230;,Xi2D<br>,&#8230;<br>,XiN1,XiN2,&#8230;,XiND)<br>\u56e0\u6b64\u6703\u5c0dN*D\u500b\u7dad\u5ea6\u505a\u8a08\u7b97<br><strong>2<br>fitness\u90e8\u4efd<\/strong><br>\u516c\u5f0f\u6709\u4ee5\u4e0b\u5169\u7a2e:<br>\u7b2c\u4e00\u7a2e:sum(j,sum_distance(Zp,Mj)\/count(Cij) ) \/ N<br>\u7b2c\u4e8c\u7a2e:sum(j,sum_distance(Zp,Mj))<br>j,\u8868\u793a\u7b2cj\u7fa4<br>count(Cij),\u7b2ci\u500b\u7c92\u5b50\u7684\u7b2cj\u500b\u7fa4\u7684\u8cc7\u6599\u7b46\u6578<br>Zp,\u7b2cp\u500b\u8cc7\u6599\u5411\u91cf<br>Mj,\u7b2cj\u500b\u7fa4\u4e2d\u5fc3<br>sum_distance(Zp,Mj),\u5c07\u7d44\u6210Mj\u7684\u6240\u6709Zp,\u62ff\u4f86\u8a08\u7b97\u8207Mj\u7684\u8ddd\u96e2\u4e26\u52a0\u7e3d<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br><strong>pso clustering for php example<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*********************************************\npso example\n\n$data=psodata_fromfile(data_iris.txt);\n$para&#91;'gene']=200;\n$para&#91;'in']=10;\n$para&#91;'jn']=3;\n$para&#91;'w']=0.72;\n$para&#91;'c1']=1.49;\n$para&#91;'c2']=1.49;\n$pso=pso($data&#91;'z'],$para);\nprint_r($pso&#91;'x']);\nwhile($c=each($pso&#91;'c'])){\n\u00a0 while($j=each($c&#91;1])){\n\u00a0 \u00a0 echo 'cluster'.$c&#91;0].'=';\n\u00a0 \u00a0 while($p=each($data&#91;'full']&#91;$j&#91;1]])){\n\u00a0 \u00a0 \u00a0 echo $p&#91;1].' : ';\n\u00a0 \u00a0 }\n\u00a0 \u00a0 echo \"n\";\n\u00a0 }\n}\necho '&#91;'.$pso&#91;'fitness'].']&#91;time:'.$pso&#91;'time_total'].']';\n\n***********************************************\/\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nfunction pso($z,$para){\n$time_start=caclutime();\n\n\/*the structure as follow\n$para&#91;'gene']=200;\n$para&#91;'in']=10;\n$para&#91;'jn']=3;\n$para&#91;'w']=0.72;\n$para&#91;'c1']=1.49;\n$para&#91;'c2']=1.49;\n\n$p&#91;i]&#91;1-D] \u7c92\u5b50i\u8a18\u9304\u7684pbest\n$pg&#91;1-D] \u8a18\u9304gbest\nd=all atribute\np=all data\n\n$z&#91;1-D]&#91;1-p] \u8cc7\u6599p\u7684\u5404\u7dad\u5ea6\u6578\u64da\n$z&#91;attribute_1]&#91;data_1]\n$z&#91;attribute_1]&#91;data_2]\n$z&#91;attribute_1]&#91;data_p]\n$z&#91;attribute_2]&#91;data_1]\n$z&#91;attribute_2]&#91;data_2]\n$z&#91;attribute_2]&#91;data_p]\n$z&#91;attribute_3]&#91;data_1]\n$z&#91;attribute_3]&#91;data_2]\n$z&#91;attribute_3]&#91;data_p]\n\n$x&#91;i]&#91;1-N]&#91;1-D] \u7c92\u5b50i\u8981\u7dad\u8b77\u7684N\u500b\u7fa4\u4e2d\u5fc3\n$x:record center of cluster\n$x&#91;patical_1]&#91;cluster_1]&#91;attribute_1]\n$x&#91;patical_1]&#91;cluster_1]&#91;attribute_d]\n$x&#91;patical_1]&#91;cluster_j]&#91;attribute_1]\n$x&#91;patical_1]&#91;cluster_j]&#91;attribute_d]\n\n$c&#91;i]&#91;j]&#91;1-count(Cij)] \u5728\u7c92\u5b50i\u4e0b,\u5c6c\u65bc\u7b2cj\u7fa4\u7684\u6240\u6709\u8cc7\u6599\n$c:record data of cluster\n$c&#91;patical_1]&#91;cluster_1]&#91;0]=sample1\n$c&#91;patical_1]&#91;cluster_1]&#91;1]=sample3\n$c&#91;patical_1]&#91;cluster_1]&#91;n]=sample6\n$c&#91;patical_1]&#91;cluster_2]&#91;0]=sample2\n$c&#91;patical_1]&#91;cluster_2]&#91;1]=sample4\n$c&#91;patical_1]&#91;cluster_2]&#91;n]=sample5\n$c&#91;patical_1]&#91;cluster_3]&#91;0]=sample7\n*\/\n\n$pn=count($z&#91;1]);\n$dn=count($z);\n\nfor($d=1;$d&lt;=$dn;$d++){\n\u00a0 arsort($z&#91;$d]);\n\u00a0 $zdmax=each($z&#91;$d]);\n\u00a0 asort($z&#91;$d]);\n\u00a0 $zdmin=each($z&#91;$d]);\n\u00a0 $xida&#91;'max']&#91;$d]=$zdmax&#91;1];\n\u00a0 $xida&#91;'min']&#91;$d]=$zdmin&#91;1];\n\u00a0 $vmax&#91;$d]=abs($zdmax&#91;1]-$zdmin&#91;1]);\n}\nfor($i=1;$i&lt;=$para&#91;'in'];$i++){\n\u00a0 $fitness_pbest&#91;$i]=9999999;\n}\n$fitness_gbest=9999999;\n\n\/\/init_clustercenter\nreset($z);\n$x=init_clustercenter($z,$para,$dn,$pn);\n\n\/\/\/\/\/\/\/\/\/\nwhile($t&lt;$para&#91;'gene']){\n\u00a0 $t++;\n\n\/\/evaluate fitness\n\u00a0 reset($x);\n\u00a0 while($i=each($x)){\n\u00a0 \u00a0 $state=asigncluster($i&#91;1],$z,$dn,$pn);\n\u00a0 \u00a0 $c&#91;$i&#91;0]]=$state&#91;'c_i'];\n\u00a0 \u00a0 $f&#91;$i&#91;0]]=$state&#91;'d_total'];\n\n\u00a0 \u00a0 $fitness=$f&#91;$i&#91;0]];\n\u00a0 \u00a0 $fitness_gbest_history2_tmp&#91;$i&#91;0]]=$fitness;\n\u00a0 \u00a0 $fitness_pbest_history2&#91;$i&#91;0]]&#91;$t]=$fitness;\n\u00a0 \u00a0 if($fitness_pbest&#91;$i&#91;0]] > $fitness){\n\u00a0 \u00a0 \u00a0 $pbest&#91;$i&#91;0]]=$x&#91;$i&#91;0]];\n\u00a0 \u00a0 \u00a0 $fitness_pbest&#91;$i&#91;0]]=$fitness;\n\u00a0 \u00a0 \u00a0 if($fitness_gbest > $fitness_pbest&#91;$i&#91;0]]){\n\u00a0 \u00a0 \u00a0 \u00a0 $fitness_gbest=$fitness;\n\u00a0 \u00a0 \u00a0 \u00a0 $particle_gbest=$i&#91;0];\n\u00a0 \u00a0 \u00a0 \u00a0 $gbest=$x&#91;$i&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 $bestc=$c&#91;$i&#91;0]];\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 \u00a0 $fitness_pbest_history&#91;$i&#91;0]]&#91;$t]=$fitness_pbest&#91;$i&#91;0]];\n\u00a0 }\n\u00a0 asort($fitness_gbest_history2_tmp);\n\u00a0 $tmp_localgbest=each($fitness_gbest_history2_tmp);\n\u00a0 $fitness_gbest_history2&#91;$t]=$tmp_localgbest&#91;1];\n\u00a0 $fitness_gbest_history&#91;$t]=$fitness_gbest;\n\u00a0 for($j=1;$j&lt;=$para&#91;'jn'];$j++){\n\u00a0 \u00a0 $bestc_count&#91;$j]&#91;$t]=count($bestc&#91;$j]);\n\u00a0 }\n\n\/\/update\n\u00a0 reset($x);\n\u00a0 while($i=each($x)){\n\u00a0 \u00a0 while($j=each($i&#91;1])){\n\u00a0 \u00a0 \u00a0 while($d=each($j&#91;1])){\n\u00a0 \u00a0 \u00a0 \u00a0 $pid=$pbest&#91;$i&#91;0]]&#91;$j&#91;0]]&#91;$d&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 $pgd=$gbest&#91;$j&#91;0]]&#91;$d&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 $xid=$d&#91;1];\n\u00a0 \u00a0 \u00a0 \u00a0 $c1rand=rand(1,1000)\/1000;\n\u00a0 \u00a0 \u00a0 \u00a0 $c2rand=rand(1,1000)\/1000;\n\u00a0 \u00a0 \u00a0 \u00a0 $vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]=$para&#91;'w']*$vid&#91;$i&#91;0]]&#91;$d&#91;0]]+$para&#91;'c1']*$c1rand*($pid-$xid)+$para&#91;'c2']*$c2rand*($pgd-$xid);\n\u00a0 \u00a0 \u00a0 \u00a0 if($vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]>$vmax&#91;$d&#91;0]])$vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]=$vmax&#91;$d&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 if($vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]&lt;(0-$vmax&#91;$d&#91;0]]))$vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]=(0-$vmax&#91;$d&#91;0]]);\n\u00a0 \u00a0 \u00a0 \u00a0 $vid_abs&#91;$i&#91;0]]&#91;$d&#91;0]]=abs($vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]);\n\u00a0 \u00a0 \u00a0 \u00a0 $new_xid=$vid_new&#91;$i&#91;0]]&#91;$d&#91;0]]+$xid;\n\u00a0 \u00a0 \u00a0 \u00a0 if($new_xid>$xida&#91;'max']&#91;$d&#91;0]])$new_xid=$xida&#91;'max']&#91;$d&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 if($new_xid&lt;$xida&#91;'min']&#91;$d&#91;0]])$new_xid=$xida&#91;'min']&#91;$d&#91;0]];\n\u00a0 \u00a0 \u00a0 \u00a0 $x&#91;$i&#91;0]]&#91;$j&#91;0]]&#91;$d&#91;0]]=$new_xid;\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 \u00a0 $vidsum_history&#91;$i&#91;0]]&#91;$t]=array_sum($vid_abs&#91;$i&#91;0]]);\n\u00a0 }\n\u00a0 $vid=$vid_new;\n\n}\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/end\n\n$pso&#91;'c']=$c&#91;$particle_gbest];\n$pso&#91;'fitness']=$fitness_gbest;\n$pso&#91;'fitness_history']=$fitness_gbest_history;\n$pso&#91;'fitness_history2']=$fitness_gbest_history2;\n$pso&#91;'fitness_pbest_history']=$fitness_pbest_history;\n$pso&#91;'fitness_pbest_history2']=$fitness_pbest_history2;\n$pso&#91;'x']=$gbest;\n$pso&#91;'time_total']=caclutime()-$time_start;\n$pso&#91;'vidsum_history']=$vidsum_history;\n$pso&#91;'bestc_count']=$bestc_count;\n\nreturn $pso;\n\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nfunction asigncluster($x_i,$z,$dn,$pn){\n$d_total=0;\nfor($p=1;$p&lt;=$pn;$p++){\n\u00a0 reset($x_i);\n\u00a0 while($j=each($x_i)){\n\u00a0 \u00a0 $distance_j=0;\n\u00a0 \u00a0 $distance_pj=0;\n\u00a0 \u00a0 \u00a0 for($d=1;$d&lt;=$dn;$d++){\n\u00a0 \u00a0 \u00a0 $data_p_dime=$z&#91;$d]&#91;$p];\n\u00a0 \u00a0 \u00a0 $clustercenter_j_dime=$j&#91;1]&#91;$d];\n\u00a0 \u00a0 \u00a0 $distance_pj+=pow($data_p_dime-$clustercenter_j_dime,2);\n\u00a0 \u00a0 }\n\u00a0 $distancepj&#91;$j&#91;0]]=sqrt($distance_pj);\n\u00a0 }\nasort($distancepj);\n$min=each($distancepj);\n$c_i&#91;$min&#91;0]]&#91;]=$p;\n$d_total+=$min&#91;1];\n$check&#91;$min&#91;0]]=1;\n}\nfor($j=1;$j&lt;=$para&#91;'jn'];$j++){\n\u00a0 if($check&#91;$j]!=1)$c_i&#91;$j]='';\n}\n$state&#91;'c_i']=$c_i;\n$state&#91;'d_total']=$d_total;\n\nreturn $state;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nfunction init_clustercenter($z,$para,$dn,$pn){\n\/*\n$x&#91;1]&#91;1]&#91;1]=5.006;\n$x&#91;1]&#91;1]&#91;2]=3.418;\n$x&#91;1]&#91;1]&#91;3]=1.464;\n$x&#91;1]&#91;1]&#91;4]=0.244;\n$x&#91;1]&#91;2]&#91;1]=5.883606557377;\n$x&#91;1]&#91;2]&#91;2]=2.7409836065574;\n$x&#91;1]&#91;2]&#91;3]=4.3885245901639;\n$x&#91;1]&#91;2]&#91;4]=1.4344262295082;\n$x&#91;1]&#91;3]&#91;1]=6.8538461538462;\n$x&#91;1]&#91;3]&#91;2]=3.0769230769231;\n$x&#91;1]&#91;3]&#91;3]=5.7153846153846;\n$x&#91;1]&#91;3]&#91;4]=2.0538461538462;\n*\/\n\n$len=ceil($pn\/$para&#91;'jn']);\nfor($i=2;$i&lt;=$para&#91;'in'];$i++){\n\u00a0 for($j=1;$j&lt;=$para&#91;'jn'];$j++){\n\u00a0 \u00a0 $len_e=$len*$j;\n\u00a0 \u00a0 $len_s=$len*($j-1)+1;\n\u00a0 \u00a0 if($len_e>=$pn)$len_e=$pn;\n\u00a0 \u00a0 $center=rand($len_s,$len_e);\n\u00a0 \u00a0 for($d=1;$d&lt;=$dn;$d++){\n\u00a0 \u00a0 \u00a0 $x&#91;$i]&#91;$j]&#91;$d]=$z&#91;$d]&#91;$center];\n\u00a0 \u00a0 }\n\u00a0 }\n}\n\nreturn $x;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nfunction caclutime(){\n$time = explode( \" \", microtime());\n$usec = (double)$time&#91;0];\n$sec = (double)$time&#91;1];\nreturn $sec + $usec;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nfunction psodata_fromfile($sourcedata){\n\/*\ndata fromat description\nname1,attribute1_value,attribute2_value,...attributeN_value\nname2,attribute1_value,attribute2_value,...attributeN_value\n...\nnameN,attribute1_value,attribute2_value,...attributeN_value\nex:\nIris-setosa,5.1,3.5,1.4,0.2\nIris-setosa,4.9,3,1.4,0.2\nIris-setosa,4.7,3.2,1.3,0.2\nIris-setosa,4.6,3.1,1.5,0.2\nIris-setosa,5,3.6,1.4,0.2\nps:attribute must is continue,not discrete\n*\/\n$data=file($sourcedata);\n\n$dime=each($data);\n$dime_a=explode(',',$dime&#91;1]);\n$dn=count($dime_a)-1;\n\nreset($data);\nwhile(list($key,$dot_id)=each($data)){\n\u00a0 $i++;\n\u00a0 $dot_id = trim($dot_id, \" n.\");\n\u00a0 $dot_id_a=explode(',',$dot_id);\n\u00a0 $fullz&#91;$i]&#91;0]=$dot_id_a&#91;0];\n\u00a0 for($d=1;$d&lt;=$dn;$d++){\n\u00a0 \u00a0 $z&#91;$d]&#91;$i]=$dot_id_a&#91;$d];\n\u00a0 \u00a0 $fullz&#91;$i]&#91;$d]=$dot_id_a&#91;$d];\n\u00a0 }\n}\n$data&#91;'z']=$z;\n$data&#91;'full']=$fullz;\nreturn $data;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>PSO(Particle Swarm Optimizatio &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[],"class_list":["post-494","post","type-post","status-publish","format-standard","hentry","category-dataanalysis"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=494"}],"version-history":[{"count":0,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/494\/revisions"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}