遗传算法的MATLAB程序实例讲解学习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cmin=0;
[px,py]=size(objvalue);
for i=1:px
if objvalue(i)+Cmin>0 temp=Cmin+objvalue(i);
else
temp=0.0;
end
fitvalue(i)=temp;
end
fitvalue=fitvalue';
四选择复制 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。 根据方程pi=fi/刀fi=fi/fsum选择步骤:
遗 传 算 法 的MATLAB
程序实例
遗传算法的程序实例
如求下列பைடு நூலகம்数的最大值
f(x)=10*sin(5x)+7*cos(4x) x€[0,10]
一、初始化(编码)
initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二
值数的长度),
长度大小取决于变量的二进制编码的长度(在本例中取10位)。
代码:
%Name: initpop.m
%初始化
function pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength));
%rand随机产生每个单元为{0,1}行数为popsize,列数为chromlength的矩阵,
%roud对矩阵的每个单元进行圆整。这样产生的初始种群。
代码:
%Name: calobjvalue.m
%实现目标函数的计算
function [objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,10);%将pop每行转化成十进制数
代码:
%Name:calfitvalue.m
%计算个体的适应值
function fitvalue=calfitvalue(objvalue) global Cmin;
pop1(:,i)=2.A(py-1).*pop(:,i);
py=py-1;
end
求pop行和例数
pop2=sum(pop1,2);%
求pop1的每行之和
2、将二进制编码转化为十进制数
(2)
decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制 串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。
代码:
%Name: decodechrom.m
%将二进制编码转换成十进制
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
3、计算目标函数值
calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。
个个体的单个个体被选择的概率
newin=1;%同理
while newin<=px
1)在第t代,由(1)式计算fsum和pi
2)产生{0,1}的随机数rand(.),求s=rand( .)*fsum
3)求刀fi坤最小的k,则第k个个体被选中
4)进行N次2)、3)操作,得到N个个体,成为第t=t+1代种群 代码:
%Name: selection.m%选择复制
function [newpop]=selection(pop,fitvalue)
二、计算目标函数值
1、将二进制数转化为十进制数(1)
代码:
%Name: decodebinary.m
%产生[2An 2A(n-1) ... 1]
function pop2=decodebinary(pop)
的行向量,
然后求和,将二进制转化为十进制
[px,py]=size(pop);%
for i=1:py
相关文档
最新文档