全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3332 1
2009-11-12
data  cvartotal;
                  set data1;   /*data1包括yield,b,scale,pc,pm,stopnum的数据集;*/
      m=dim(yield,1);
      n=dim(yield,2);
              /*1、产生随机种群规模;*/
                do i=1 to n+1
                ARRAY weights(i,scale)=RANNOR(seed);
                ARRAY weight(i,scale)=RANNOR(seed);
    end;
    cvar1=50;
    a=1;
    /*2、随机产生的权重比例归一化 ;   */
    sum=SUM(weights);
                do j=1to scale
                do i=1to n
                weights(i,j)=weights(i,j)/sum(1,j);
                end
               end
             /* 3、计算适应度函数 ;*/
 do j=1 to scale
   do k=1 to m
   do i=1 to n
      mid(1,i)=weights(i,j);
   end
   mid1=-(mid*yield);
  flag(1,k)=mid1(1,k)-weights(n+1,j);
   if flag(1,k)<0 then  flag(1,k)=0;
   end
   end
   mid2=sum(flag);
   oldcvar(1,j)=weights(1+n,j)+mid2/(m*(1-b));
end
      
/*4、循环开始*/
do while(a<stopnum);
/*5、选择算法:最优精英策略*/
maxV=oldcvar(,><);
column=oldcvar(,>:<);
maxV1=oldcvar(,<>);
column1=oldcvar(,<:>);
if(maxV>=cvar)
   do i=1 to n+1
    weights(i:column1)=weight(i:1);
// 如果本次迭代中得到的最优个体比历史最优个体更优, 把当前最优个体取代历史最优个体, 否则用历史最优个体取代本次迭代中的最差的个体。
end
end
cvar=maxV;
do i=1 to n+1
weight(i,1)=weights(i,column);
end
do i=1 to n+1
var=weights(n+1,i);
end
6、交叉 ;而 其中为 一个随机数。
a=RANNOR(seed);
exchange1=abs(RANNOR(1,2)*scale);
exchange2=abs(RANNOR(1,2)*(n+1));
if(r<pc)  weights(exchange2(1,1),exchange1(1,1))=weights(exchange2(1,1),exchange1(1,1))*a+(1-a)*weights(exchange2(1,2),exchange1(1,2));   weights(exchange2(1,2),exchange1(1,2))=weights(exchange2(1,1),exchange1(1,1))*(1-a)+a*weights(exchange2(1,2),exchange1(1,2));
end
7、突变: .当前最优个体的微变异算子。采用选取当前种群中的“最优个体”和“次优个体”都进行微变异操作,即对个体中只选取一位基因进行上述变异操作,然后直接成为下一代个体;
r1=RANNOR(1,scale);
do i=1 to scale
if(r1(1,i)<pm)
     pmRow=abs(RANNOR(seed)*(n+1));
weights(pmRow,i)=weights(pmRow,><))+r1(1,i)*weights(pmRow,<>);
end
end
sum=sum(weights);
do j=1to scale
   do i=1 to n
    weights(i,j)=weights(i,j)/sum(1,j);
   end
end
do j=1 to scale
   do k=1 to m
    do i=1 to n
      mid(1,i)=weights(i,j);
   end
   mid1=-(mid*yield);
   flag(1,k)=mid1(1,k)-weights(n+1,j);
   if(flag(1,k)<0)
       flag(1,k)=0;
   end
   end
   mid2=sum(flag);
   oldcvar(1,j)=weights(1+n,j)+mid2(1,m)/(m*(1-b));
end
      a=a+1;
      end;
run;

请教大虾帮忙修改啊···谢谢啊··遗传算法求最优化····
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-2-12 17:19:27
本坛唯一的遗传算法代码,学习了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群