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

📄 cload.m

📁 一些用matlab编写的经典遗传算法算例。可以用于解决许多优化问题
💻 M
字号:
function c_out = cload(fid,varargin)
% LOAD_CHROM - Loads a chromosome vector. 
%   c = load_chrom(fid), loads a chromosome vector (generation)
%   from a file. The fid is the file indicator, note the file
%   should be rightly positioned.
%   See also SAVE_CHROM

fgetl(fid);
fgetl(fid);
tmp=fgetl(fid);
nmbr_chr=str2num(tmp(24:end));
fgetl(fid);

for k=1:nmbr_chr
  fgetl(fid);
  fgetl(fid);
  fgetl(fid);
  
  tmp=fgetl(fid);
  name_chr=tmp(7:end);
  tmp=fgetl(fid);
  fitness=str2num(tmp(9:end));
  fgetl(fid);
  fgetl(fid);
  
  c_out(k)=chrom(name_chr,cdv,ddv);

  c_out(k)=set(c_out(k),'fitness',fitness);
  
  name_cdv=fgetl(fid);
  tmp=fgetl(fid);
  val_cdv=sscanf(tmp,'%g');
  tmp=fgetl(fid);
  lim=sscanf(tmp,'%g');
  tmp=fgetl(fid);
  bits_dna=sscanf(tmp,'%g');
  cdvs=read_cdvs(name_cdv,val_cdv,lim,bits_dna);
  c_out(k)=set(c_out(k),'cdvs',cdvs);
  
%=============DDVS===========================================
  fgetl(fid);fgetl(fid);fgetl(fid);

  name_ddv=fgetl(fid);
  tmp=fgetl(fid);
  val_ddv=sscanf(tmp,'%g');
  p_val=fgetl(fid);
  tmp=fgetl(fid);
  dna=sscanf(tmp,'%g');
  ddvs=read_ddvs(name_ddv,val_ddv,p_val,dna);
  c_out(k)=set(c_out(k),'ddvs',ddvs);
end
fgetl(fid);


function cdvs = read_cdvs(name_cdvs,val_cdv,lim,bits_dna)
% READ_CDVS - 
%   
if and(length(name_cdvs)==1,isspace(name_cdvs))
  cdvs=cdv;
else
  
  [n r]=strtok(name_cdvs);
  cdvs(1)=cdv(n,0,0,0);
  ind=2;
  while length(r)>1
    [n r]=strtok(r);
    cdvs(ind)=cdv(n,0,0,0);
    ind=ind+1;
  end
  for k=1:length(cdvs)
    cdvs(k)=set(cdvs(k),'value',val_cdv(k));
  end

  l_lim=lim(1:2:end);
  u_lim=lim(2:2:end);
  for k=1:length(cdvs)
    cdvs(k)=set(cdvs(k),'l_limit',l_lim(k));
    cdvs(k)=set(cdvs(k),'u_limit',u_lim(k));
  end

  bits=bits_dna(1:2:end);
  dna=bits_dna(2:2:end);
  for k=1:length(cdvs)
    cdvs(k)=set(cdvs(k),'bits',bits(k));
    cdvs(k)=set(cdvs(k),'dna',tobin(dna(k),bits(k)));
  end

end
%------------------------------------------------------------

function ddvs = read_ddvs(name_ddvs,val_ddv,p_val,dna)
% READ_DDVS - 
%   
if and(length(name_ddvs)==1,isspace(name_ddvs))
  ddvs=ddv;
else
  
  [n r]=strtok(name_ddvs);
  ddvs(1)=ddv(n,0);
  ind=2;
  while length(r)>1
    [n r]=strtok(r);
    ddvs(ind)=ddv(n,0);
    ind=ind+1;
  end

  for k=1:length(ddvs)
    ddvs(k)=set(ddvs(k),'value',val_ddv(k));
  end
  
  tabs=findstr(p_val,sprintf('\t'));
  tabs=[1 tabs];
  for k=1:length(tabs)-1
    p_string=p_val(tabs(k):tabs(k+1));
    pval=sscanf(p_string,'%g')';
    ddvs(k)=set(ddvs(k),'p_val',pval);
  end
  

  bits=dna(1:2:end);
  dna=dna(2:2:end);
  for k=1:length(ddvs)
    ddvs(k)=set(ddvs(k),'bits',bits(k));
    ddvs(k)=set(ddvs(k),'dna',tobin(dna(k),bits(k)));
  end

end

function b = tobin(dec,bits)
% TOBIN - 
%   
tmp=dec2bin(dec);
zero=bits-length(tmp);
if zero
  for k=1:zero
    b(k)=0;
  end
  for l=1:length(tmp);
    b(k+l)=str2num(tmp(l));
  end
else
  for l=1:length(tmp);
    b(l)=str2num(tmp(l));
  end
end











⌨️ 快捷键说明

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