全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2464 1
2009-10-14
悬赏 40 个论坛币 未解决
各位高手这就是我需要求解的方程.rar
大小:(58.95 KB)

 马上下载

本附件包括:

  • 各位高手这就是我需要求解的方程.docx

高价悬赏:请高手用遗传算法求解下面这个方程...急求代码···重谢··
以下是对这个方程的遗传算法编写,错误太多···请大侠们帮忙修改啊··急啊··
       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;

请教大虾帮忙修改啊···谢谢啊··遗传算法求最优化····
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=613709&page=1&from^^uid=623403
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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