![](https://csdnimg.cn/release/download_crawler_static/86926265/bg5.jpg)
function pop=initpop(popsize,chromlength) global Cmin;
pop=round(rand(popsize,chromlength)); % rand 随机产生每个 Cmin=0;
单元为 {0,1} 行数为 popsize,列数为 chromlength 的矩阵,
[px,py]=size(objvalue); % roud 对矩阵的每个单元进行圆整。这样产生的初始
种群。 for i=1:px
if objvalue(i)+Cmin>0 % 2.2 计算目标函数值 temp=Cmin+objvalue(i); %
2.2.1 将二进制数转化为十进制数(1) else
%遗传算法子程序 temp=0.0;
%Name: decodebinary.m end
%产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为
fitvalue(i)=temp;
end 之一。
fitvalue=fitvalue'; %遗传算法子程序
%Name: crossover.m % 2.4 选择复制 %交叉
function [newpop]=crossover(pop,pc) % 选择或复制操作是决定哪些个体可
以进入下一代。程序中采
[px,py]=size(pop); 用赌轮盘选择法选择,这种方法较易实现。
newpop=ones(size(pop)); % 根据方程 pi=fi/?fi=fi/fsum ,选择步骤:
for i=1:2:px-1 % 1) 在第 t 代,由(1)式计算 fsum 和 pi
if(rand<pc) % 2) 产生 {0,1} 的随机数 rand( .),求 s=rand( .)*fsum
cpoint=round(rand*py); % 3) 求 ?fi?s 中最小的 k ,则第 k 个个体被选
中
newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; % 4) 进行 N 次
2)、3)操作,得到 N 个个体,成为第 t=t+1