swept66 发表于 2008-1-25 17:06

求教PSO问题

<p>clear all %清除内存<br/>tic    %秒表开始计时<br/>A=;<br/>B=;<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',,[-1,1]);<br/>XO=u;<br/>e=idinput(S,'rs',,[-0.1,0.1]);<br/>y0=idsim(,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=;<br/>     b=;<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/>   =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=;<br/>B=;</p><p>并把M等相关数改下,再怎么循环好像也收敛不了啊!郁闷啊,帮下忙哈</p>

gratiate 发表于 2008-3-24 21:26

据我的经验,粒子群算法适合在大范围内求解无约束条件问题,收敛效果还可以,要是初始区间比较小,优化的效果并不理想。使用遗传算法,用浮点数计算,会增加精度,也许会解决这个问题。

duan3307464 发表于 2010-8-28 09:46

学习
页: [1]
查看完整版本: 求教PSO问题