楼主: xiaotanyi
3124 1

[原创博文] 请教大虾给修改以下遗传算法程序...我不会,编的不好···· [推广有奖]

  • 0关注
  • 0粉丝

高中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
31 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
340 点
帖子
19
精华
0
在线时间
43 小时
注册时间
2008-6-24
最后登录
2014-5-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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;

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

扫码加我 拉你入群

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

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

关键词:遗传算法 weights Weight Eight weigh 程序 规模

沙发
freetiger 发表于 2015-2-12 17:19:27 |只看作者 |坛友微信交流群
本坛唯一的遗传算法代码,学习了

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 15:55