QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1521|回复: 0
打印 上一主题 下一主题

遗传算法

[复制链接]
字体大小: 正常 放大
dzzm 实名认证       

2

主题

10

听众

71

积分

升级  69.47%

  • TA的每日心情
    擦汗
    2015-6-10 18:11
  • 签到天数: 23 天

    [LV.4]偶尔看看III

  • TA的关系
  • 社区QQ达人

    跳转到指定楼层
    1#
    发表于 2015-4-26 11:04 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    function youhuafun
    D=code;
    N=50;         % Tunable
    maxgen=50;     % Tunable
    crossrate=0.5; %Tunable
    muterate=0.08; %Tunable
    generation=1;   
    num = length(D);
    fatherrand=randint(num,N,3);
    score = zeros(maxgen,N);
    whilegeneration<=maxgen
       ind=randperm(N-2)+2; % 随机配对交叉
       A=fatherrand(:,ind(1N-2)/2));
       B=fatherrand(:,ind((N-2)/2+1:end));
    %     多点交叉
       rnd=rand(num,(N-2)/2);
       ind=rnd  tmp=A(ind);
      A(ind)=B(ind);
       B(ind)=tmp;
    % % 两点交叉
    %     for kk=1N-2)/2
    %         rndtmp=randint(1,1,num)+1;
    %         tmp=A(1:rndtmp,kk);
    %         A(1:rndtmp,kk)=B(1:rndtmp,kk);
    %         B(1:rndtmp,kk)=tmp;
    %     end
       fatherrand=[fatherrand(:,1:2),A,B];
       % 变异
       rnd=rand(num,N);
       ind=rnd  [m,n]=size(ind);
       tmp=randint(m,n,2)+1;
       tmp(:,1:2)=0;
       fatherrand=tmp+fatherrand;
       fatherrand=mod(fatherrand,3);
    %     fatherrand(ind)=tmp;
       %评价、选择
       scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数
       score(generation,=scoreN;
       [scoreSort,scoreind]=sort(scoreN);
       sumscore=cumsum(scoreSort);
       sumscore=sumscore./sumscore(end);
       childind(1:2)=scoreind(end-1:end);
       for k=3:N
           tmprnd=rand;
           tmpind=tmprnd       difind=[0,diff(tmpind)];
           if ~any(difind)
               difind(1)=1;
           end
           childind(k)=scoreind(logical(difind));
       end
       fatherrand=fatherrand(:,childind);     
       generation=generation+1;
    end
    % score
    maxV=max(score,[],2);
    minV=11*300-maxV;
    plot(minV,'*');title('各代的目标函数值');
    F4=D(:,4);
    FF4=F4-fatherrand(:,1);
    FF4=max(FF4,1);
    D(:,5)=FF4;
    save DData D
    function D=code
    load youhua.mat
    % properties F2 and F3
    F1=A(:,1);
    F2=A(:,2);
    F3=A(:,3);
    if(max(F2)>1450)||(min(F2)<=900)
       error('DATA property F2 exceed it''s range(900,1450]')
    end
    % get group property F1 ofdata, according to F2 value
    F4=zeros(size(F1));
    for ite=11:-1:1
       index=find(F2<=900+ite*50);
       F4(index)=ite;
    end
    D=[F1,F2,F3,F4];
    function ScoreN=scorefun(fatherrand,D)
    F3=D(:,3);
    F4=D(:,4);
    N=size(fatherrand,2);
    FF4=F4*ones(1,N);
    FF4rnd=FF4-fatherrand;
    FF4rnd=max(FF4rnd,1);
    ScoreN=ones(1,N)*300*11;
    % 这里有待优化
    for k=1:N
       FF4k=FF4rnd(:,k);
       for ite=1:11                                                                                    
           F0index=find(FF4k==ite);
           if ~isempty(F0index)
               tmpMat=F3(F0index);
               tmpSco=sum(tmpMat);
               ScoreBin(ite)=mod(tmpSco,300);
           end
       end
       Scorek(k)=sum(ScoreBin);
    end
    ScoreN=ScoreN-Scorek
    此代码为何无法运行?0 s7 @: E% Q4 Q8 R
    ! Z4 _& Z; Z+ a( \: w5 l* l
    ( ~& O3 Z3 `! g2 \: [

    2 A, {0 Q$ p& V+ P# n
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-3 23:28 , Processed in 0.360215 second(s), 50 queries .

    回顶部