数学建模社区-数学中国

标题: 求教PSO问题 [打印本页]

作者: swept66    时间: 2008-1-25 17:06
标题: 求教PSO问题
<p>clear all %清除内存<br/>tic    %秒表开始计时<br/>A=[1 0.9 0.15 0.02];<br/>B=[0 0.7 1.5];<br/>C=1;<br/>th0=poly2th(A,B,1,C,1);%随机产生粒子群的位置和速度,粒子数Xi为30<br/>N=30;<br/>S=50;<br/>Xi=2.*rand(N,9);%均匀分布的随机数矩阵<br/>Xpbest=zeros(N,9);%零矩阵<br/>Vd=ones(N,9);%全1矩阵<br/>Vdmax=ones(N,9);<br/>C1=2;C2=2;<br/>u=idinput(S,'rs',[0 1],[-1,1]);<br/>XO=u;<br/>e=idinput(S,'rs',[0 1],[-0.1,0.1]);<br/>y0=idsim([XO,e],th0);<br/>pbest=zeros(N,1);<br/>nbest=0;<br/>xunhuan=1500; <br/>eemax=50;eemin=0;<br/>w=0.9;<br/>for num=1:xunhuan<br/>   for i=1:N<br/>     a=[1,Xi(i,1:3)];<br/>     b=[0,Xi(i,4:5)];<br/>     th1=poly2th(a,b,1,c,1);<br/>     xo=u;<br/>     y1=idsim(xo,th1);<br/>     fitness(i)=1/(1+sum((y0-y1)'*(y0-y1)));<br/>     if fitness(i)&gt;pbest(i)<br/>        pbest(i)=fitness(i);<br/>        Xpbest(i,=Xi(i,;<br/>     end<br/>   end<br/>   ee=sum((y0-y1)'*(y0-y1));<br/>   if ee&gt;eemax<br/>      ee=eemax;<br/>   end<br/>   ee1=(ee-eemin)/(eemax-eemin);<br/>   switch 1<br/>     case and(and(w&gt;=0.4,w&lt;0.6),ee1&lt;0.35)% w,ee1=s,s<br/>          w=0.4;<br/>     case and(and(w&gt;=0.4,w&lt;0.6),ee1&lt;0.7)% w,ee1=s,m<br/>          w=w+0.08; <br/>     case and(and(w&gt;=0.4,w&lt;0.6),ee1&gt;=0.7)% w,ee1=s,l<br/>          w=w+0.15; <br/>     case and(and(w&gt;=0.6,w&lt;0.75),ee1&lt;0.35)% w,ee1=m,s<br/>           w=w-0.05;<br/>     case and(and(w&gt;=0.6,w&lt;0.75),ee1&lt;0.7)% w,ee1=m,m<br/>          w=w; <br/>     case and(and(w&gt;=0.6,w&lt;0.75),ee1&gt;=0.7)% w,ee1=m,l<br/>          w=w+0.10;<br/>     case and(w&gt;=0.75,ee1&lt;0.35)% w,ee1=l,s<br/>           w=w-0.10;<br/>     case and(w&gt;=0.75,ee1&lt;0.7)% w,ee1=l,m<br/>          w=w-0.08; <br/>     case and(w&gt;=0.75,ee1&gt;=0.7)% w,ee1=l,l<br/>          w=+0.05; <br/>      end<br/>      if w&gt;0.9<br/>         w=0.9;<br/>      end<br/>      if w&lt;0.4<br/>         w=0.4;<br/>      end<br/>   %比较nmf和nbest<br/>   [nmf,n]=max(fitness);<br/>   if nmf&gt;nbest<br/>      nbest=nmf;<br/>      Xnbest=Xi(n,;<br/>   end<br/>   %改变每一个粒子的速度和位置<br/>   for i=1:N<br/>      rand1=rand(1,1);<br/>      rand2=rand(1,1);<br/>      Vd(i,=w*Vd(i,+C1*rand1*(Xpbest(i,-Xi(i,)+C2*rand2*(Xnbest-Xi(i,);</p><p>      if Vd(i)&gt;Vdmax(i)<br/>         Vd(i)=Vdmax(i);<br/>      elseif Vd(i)&lt;-Vdmax(i)<br/>         Vd(i)=-Vdmax(i);<br/>      end<br/>      Xi(i,=Xi(i,+Vd(i,;<br/>   end<br/>end<br/>a1=Xnbest(1)<br/>a2=Xnbest(2)<br/>a3=Xnbest(3)<br/>b1=Xnbest(4)<br/>b2=Xnbest(5)<br/>time=toc<br/>weight =w<br/>error=ee<br/>error1=ee1</p><p>上面这段程序能实现的,但是如果</p><p>A=[1 1 1 -1.38 -1.38 -1.38 0.61 0.61 0.61];<br/>B=[0 0.03 0.09 0.12 0.17 0.14 0.11 0.02 0.003];</p><p>并把M等相关数改下,再怎么循环好像也收敛不了啊!郁闷啊,帮下忙哈</p>[em06][em06]
作者: gratiate    时间: 2008-3-24 21:26
据我的经验,粒子群算法适合在大范围内求解无约束条件问题,收敛效果还可以,要是初始区间比较小,优化的效果并不理想。使用遗传算法,用浮点数计算,会增加精度,也许会解决这个问题。
作者: duan3307464    时间: 2010-8-28 09:46
学习




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5