- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进化算法程序[精选]
进化算法作业
1 全局优化问题
(1)
,
此问题的全局最优值。
一.程序
(1)主函数: main.m
clear all;
clc;
popsize=60; %种群规模
chromlength=34; %二进制编码,编码精度为0.0001,所以串长l为17
pc=0.7; %杂交概率
pm=0.1; %变异概率
t=0; %进化代数初始为0
pop=initpop(popsize,chromlength); %随机产生初始种群
while t500 %迭代次数
t=t+1;
[objvalue]=calobjvalue(pop); %计算目标函数值
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应度最大的个体及其适应度值
x11=decodechrom(bestindividual,1,14); %将二进制数转换为十进制数
x22=decodechrom(bestindividual,15,14);
x1(t)=-5+10*x11/(pow2(14)-1); %将二值域中的数转换为变量域的数
x2(t)=-5+10*x22/(pow2(14)-1);
y(t)=4*x1(t)^2-2.1*x1(t)^4+1/3*x1(t)^6+x1(t)*x2(t)-4*x2(t)^2+4*x2(t)^4; %计算最佳个体的目标函数值
[newpop1]=selection(pop,fitvalue); %选择算子
[newpop2]=crossover(newpop1,pc); %交叉算子
[newpop3]=mutation(newpop2,pm); %变异算子
objvalue1=calobjvalue(newpop3(1,:));
if objvalue1y(t)
newpop3(1,:)=bestindividual; %保留最佳个体
end
pop=newpop3; %产生新种群
end
y; %每代的最佳目标函数值
x1; %每代的最佳目标函数值对应的自变量
x2;
[gy,k]=min(y) %gy为全局最优值,k为最优值对应的进化代数
gx1=x1(k) %全局最优值对应的自变量
gx2=x2(k)
plot(y) %最优值收敛曲线
title(收敛性曲线);
xlabel(进化代数);
ylabel(函数值);
axis([0,500,-1.5,1.5]);
(2)初始种群:initpop.m
function pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength)); %rand随机产生[0,1]区间的一个小数,rand四舍五入取整
end
(3)计算目标函数值::calobjvalue.m
function [objvalue] =calobjvalue( pop )
temp1=decodechrom(pop,1,14);
temp2=decodechrom(pop,15,14);
x1=-5+(10*temp1)/(pow2(14)-1); %将二值域中的数转化为变量域中的数
x2=-5+(10*temp2)/(pow2(14)-1);
objvalue=4*x1.^2-2.1*x1.^4+1/3*x1.^6+x1.*x2-4*x2.^2+4*x2.^4; %计算目标函数
end
a.二进制转换为十进制:decodechrom.m
function temp=decodechrom(pop,spoint,length )
pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint为起始点,length为一个变量的长度
temp=decodebinary(pop1);
end
b.求二进制串对应的十进制数:decodebinary.m
function temp =decodebinary( pop)
[px,py]=size(pop); %求pop行数和列数
for i=1:py
pop1(:,i)=2.^(py-i).*pop(:,i);
end
temp=sum
文档评论(0)