skyflowing 发表于 2006-6-20 21:40

遗传算法工具箱的编码问题(请教)

<P>目标函数代码如下:<BR>function =f553(sol,options)<BR>m(1)=sol(1);<BR>m(2)=sol(2);<BR>m(3)=sol(3);</P>
<P>q=;<BR>g1=51-(m(1)+3).^2+m(2).^2+m(3).^2;<BR>g2=20*sum(m+exp(-m))-120;<BR>g3=20*sum(m.*exp(-m/4))-65;</P>
<P>if((g1&gt;=0)&amp;(g2&gt;=0)&amp;(g3&gt;=0))<BR> multi=1;<BR> for i=1:3<BR>summ=0;<BR>for j=2:4<BR>   summ=summ+q(i,j).^(m(i)+1);<BR>end<BR>multi=multi*(1-(1-(1-q(i,1)).^(m(i)+1))-summ);<BR> end<BR> eval=multi;<BR>else<BR> eval=-500;<BR>end<BR>求解部分代码如下:<BR>bounds=;<BR>options=;<BR>initPop=initializega(80,bounds,'f553',[],options);<BR>=ga(bounds,'f553',[],initPop,,'maxGenTerm',100,'normGeomSelect',,['arithXover'],,'nonUnifMutation',)<BR>%=ga(bounds,'f553')<BR>为什么options里面的1设为2 运行会出错而并不会得到二进制的初始种群呢.请指教~,非常感谢!</P>

skyflowing 发表于 2006-6-20 21:44

<P>还有一个疑问 如果我要得到一个最优向量,向量中每一位的值为0或者1,应该在程序中怎么表示?<BR>我是把initializega子程序中的options(2)=1部分改为<BR>xZomeLength = numVars+1;   %Length of string is numVar + fit<BR>pop         = zeros(num,xZomeLength);%Allocate the new population<BR>pop(:,1:numVars)=(ones(num,1)*rng).*(rand(num,numVars))+...<BR>    (ones(num,1)*bounds(:,1)');<BR>for i=1:1:numVars<BR>      for j=1:1:num<BR>          if pop(j,i)&lt;=0.5<BR>            pop(j,i)=0;<BR>          else<BR>            pop(j,i)=1;<BR>          end<BR>      end<BR>end<BR>但是不知道在ga程序中其他部分如交叉,变异等部分是不是不能保证每一位的值为0或者1.<BR>应该怎么改啊</P>
页: [1]
查看完整版本: 遗传算法工具箱的编码问题(请教)