QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7671|回复: 2
打印 上一主题 下一主题

求教PSO问题

[复制链接]
字体大小: 正常 放大
swept66        

1

主题

0

听众

17

积分

升级  12.63%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2008-1-25 17:06 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<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]
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
gratiate        

2

主题

3

听众

12

积分

升级  7.37%

该用户从未签到

新人进步奖

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

使用道具 举报

22

主题

7

听众

1573

积分

升级  57.3%

该用户从未签到

自我介绍
我喜欢数学

新人进步奖 发帖功臣 最具活力勋章

群组数学建模

群组数学散仙

群组MATLAB

群组数学天下

群组文献查询

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 04:31 , Processed in 0.451054 second(s), 68 queries .

回顶部