研发埠

标题: 利用模拟退火做的一个代码,求看看那边有问题,怎么解? [打印本页]

作者: 姜龙    时间: 2013-5-24 16:28
标题: 利用模拟退火做的一个代码,求看看那边有问题,怎么解?
clearalla=[1 7 12 15 2 5 8 11 1 7 12 15 4 9 14 2 5 8 11 1 7 12 15 2 5 8 11 4 9 14;      9 12 18 13 19 9 7 8 9 12 18 13 13 12 15 19 9 7 8 9 12 18 13 19 9 8 7 13 12 15;      20 20 20 20 15 15 15 15 14 14 14 14 25 25 25 16 16 16 16 18 18 18 18 12 12 12 12 15 15 15;];  Tmax=150;  N=100;  n=30;  set=[];  x1=zeros(2,30);  x2=zeros(2,30);  [x1,x2,fx]=twoR(x1,x2,a);  z1=x1;  z2=x2;  fz=fx;  while Tmax>10^(-2)      for L=1:N          if fx<=fz             z1=x1;             z2=x2;             fz=fx;          end          i=fix(n*rand+1);          switch i              case{1,2,3,4}                  j=fix(4*rand+1);              case{5,6,7,8}                  j=fix(8*(0.5+0.5*rand)+1);              case{9,10,11,12}                  j=fix(12*(2/3+(l/3)*rand)+1);              case{13,14,15}                  j=fix(15*(4/5+(l/5)*rand)+1);              case{16,17,18,19}                  j=fix(19*(15/19+(4/19)*rand)+1);              case{20,21,22,23}                  j=fix(23*(19/23+(4/23)*rand)+1);              case{24,25,26,27}                  j=fix(27*(23/27+(4/27)*rand)+1);              otherwise                  j=fix(30*(9/10+(1/10)*rand)+1);          end          if i~=j              b=a;               yt=[];              yt(:,i)=b(:,i);              b(:,i)=b(:,j);              b(:,j)=yt(:,i);              [x1,x2,fb]=twoR(x1,x2,b);               if fb<=fx || exp(-(fb-fx)/Tmax)>rand                  a=b;                  fx=fb;               end          end          set=[set,fx];          L;      end      Tmax=0.90*Tmax;  end  plot(set)  z1;  z2;  fz;yt(:,i)=b(:,i);set=[set,fx];这两个有问题怎么解决啊




欢迎光临 研发埠 (http://bbs.yanfabu.com/) Powered by Discuz! X3.2