arithxover.m

来自「实数编码的遗传算法」· M 代码 · 共 50 行

M
50
字号
function [c1,c2] = arithXover(p1,p2,bounds,Ops)
% Arith crossover takes two parents P1,P2 and performs an interpolation
% along the line formed by the two parents.
%
% function [c1,c2] = arithXover(p1,p2,bounds,Ops)
% p1      - the first parent ( [solution string function value] )
% p2      - the second parent ( [solution string function value] )
% bounds  - the bounds matrix for the solution space
% Ops     - Options matrix for arith crossover [gen #ArithXovers]

% Pick a random mix amount
a = rand;
numVar=size(p1,2)-1;
b=round(rand*(numVar-1)+1);
p1;
p2;

for i=1:numVar
   if i<=b
      c1(1:i)=p1(1:i);
      c2(1:i)=p2(1:i);
   else
    % c1(1:numVar)=p1(1:numVar)*a+p2(1:numVar)*(1-a);
    % c2(1:numVar)=p1(1:numVar)*(1-a)+p2(1:numVar)*a;
     c1(1:numVar+1)=p1(1:numVar+1)*a+p2(1:numVar+1)*(1-a);
     c2(1:numVar+1)=p1(1:numVar+1)*(1-a)+p2(1:numVar+1)*a;

   end
end

%pause

      
%a = rand(numVar,1);

% Create the children
%c1 = p1*a     + p2*(1-a);
%c2 = p1*(1-a) + p2*a; 

%c1(1:numVar)=p1(1:numVar)*a+p2(1:numVar)*(1-a);
%c2(1:numVar)=p1(1:numVar)*(1-a)+p2(1:numVar)*a;


%c1 = p1*a     + p2*(1-a);
%c2 = p1*(1-a) + p2*a; 

%pause

%c1(1:numVar) = p1(1:numVar)*a(1:numVar)+ p2(1:numVar)*(1-a(1:numVar));
%c2(1:numVar) = p1(1:numVar)*(1-a(1:numVar)) + p2(1:numVar)*a(1:numVar); 

⌨️ 快捷键说明

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