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

📄 plus.m

📁 一些用matlab编写的经典遗传算法算例 挺有用的
💻 M
字号:
function res = plus(g1,g2)
% PLUS - overloaded operator 
%   
if g1~=g2
  error('genes do not match');
end
if isa(g1,'cdv')
  mask=make_mask(g1.bits);
  for k=1:g1.bits
    if mask(k)==0;
      new_dna(k)=g1.dna(k);
    else
      new_dna(k)=g2.dna(k);
    end
  end
% $$$   d1=g1.dna
% $$$   d2=g2.dna
% $$$   new_dna=new_dna
  res=g1;
  res.dna=new_dna;
  res.value=convert(res);
elseif isa(g1,'ddv')
  mask=make_mask(g1.bits);
  for k=1:g1.bits
    if mask(k)==0;
      new_dna(k)=g1.dna(k);
    else
      new_dna(k)=g2.dna(k);
    end
  end
  if in_range(new_dna,get(g1,'p_val'))
    res=g1;
    res.dna=new_dna;
    res.value=convert(res);
  else
    disp('rec')
    res=g1+g2;
  end
% $$$   d1=g1.dna
% $$$   d2=g2.dna
% $$$   new_dna=new_dna
end


function mask = make_mask(b)
% MAKE_MASK - 
mask=rand(1,b);
for k=1:b
  if mask(k)<0.5
    mask(k)=0;
  else
    mask(k)=1;
  end
end


function bool = in_range(dna,val)
% IN_RANGE - 
%   
x=0;
for k=1:length(dna)
  x=x+2^(k-1)*dna(k);
end
x=x+1;
bool=x<=length(val);

⌨️ 快捷键说明

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