遗传算法Matlab编程求函数的最大适应性及相应位置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法
Matlab编程求函数的最大适应性及相应位置摘要:阐述了遗传算法的基本原理,探讨了matlab环境中实现遗传算法的编程方法,并以
y y
x x
y
x f
s i n
s i n
)
, ( 1
*
=、
]
20
)5
(
)5
(
exp[
999
.0
)
10)5
(
)5
(
exp(
9.0
)
,
(
2
2
2
2 2
-
+
-
-
*
+
+
+
+
*
=
y
x
y
x
y
x
f
x,y∝[-10,10],要求种群数N=50,交换位数n/2,位置随机;变异位数统一为4。
交换的个数Nc=20、28、36、44;变异的个数Nm=1、5、10、15.两个函数的精度分别为0.001,0.0001
两个简单的实例做了具体的分析。
关键词:遗传算法(GA)、matlab
一、遗传算法概述
遗传算法(Genetic Algorithm ,GA) 是借鉴生物界自然选择复制和群体进化机制形成的一种全局寻优算法。
与传统的优化算法相比,遗传算法具有如下优点[1 ] :1) 不是从单个点,而是从多个点构成的群体开始搜索;2) 在搜索最优解过程中,只需要由目标函数值转换得来的适应值信息,而不需要导数等其它辅助信息;3) 搜索过程不易陷入局部最优点。
目前,该算法已渗透到许多领域,并成为解决各领域复杂问题的有力工具[2 ]。
在遗传算法中,将问题空间中的决策变量通过一定编码方法表示成遗传空间的一个个体,它是一个基因型串结构数据;同时,将目标函数值转换成适应值,它用来评价个体的优劣,并作为遗传操作的依据。
遗传算法的应用,遗传算法在人工智能的众多领域便得到了广泛应用。
例如,机器学习、聚类、控制(如煤气管道控制)、规划(如生产任务规划)、设计(如通信网络设计、布局设计)、调度(如作业车间调度、机器调度、运输问题)、配置(机器配置、分配问题)、组合优化(如TSP、背包问题)、函数的最大值以及图像处理和信号处理等等。
另一方面,人们又将遗传算法与其他智能算法和技术相结合,使其问题求解能力得到进一步扩展和提高。
例如,将遗传算法与模糊技术、神经网络相结合,已取得了不少成果。
二、遗传算法基本流程
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
% 3.2.3 计算目标函数值
% calobjvalue.m函数的功能是实现目标函数的计算
%遗传算法子程序
%Name: calobjvalue.m
%实现目标函数的计算
function [objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,14); %将pop每行转化成十进制数
temp2=decodechrom(pop,15,14);
x=temp1*20/16383; %将二值域中的数转化为变量域的数
y=temp2*20/16383;
objvalue=(sin(x-10)./(x-10)).*(sin(y-10)./(y-10)); %计算目标函数值
% 3.3 计算个体的适应值
%遗传算法子程序
%Name:calfitvalue.m
%计算个体的适应值
function fitvalue=calfitvalue(objvalue)
global Cmin;
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';
% 3.4 选择复制
% 选择或复制操作是决定哪些个体可以进入下一代。
程序中采用赌轮盘选择法选择,这种方法较易实现。
% 根据方程pi=fi/∑fi=fi/fsum ,选择步骤:
% 1)在第t 代,由(1)式计算fsum 和pi
% 2)产生{0,1} 的随机数rand( .),求s=rand( .)*fsum
% 3)求∑fi≥s 中最小的k ,则第k 个个体被选中
% 4)进行N 次2)、3)操作,得到N 个个体,成为第t=t+1 代种群
%遗传算法子程序
%Name: selection.m
%选择复制
function [newpop1]=selection(pop,fitvalue)
totalfit=sum(fitvalue); %求适应值之和
fitvalue=fitvalue/totalfit; %单个个体被选择的概率
fitvalue=cumsum(fitvalue); %如fitvalue=[1 2 3 4],则cumsum(fitvalue)=[1 3 6 10] [px,py]=size(pop);
ms=sort(rand(px,1)); %从小到大排列
fitin=1;
newin=1;
while newin<=px
if(ms(newin))<fitvalue(fitin)
newpop1(newin,:)=pop(fitin,:);
newin=newin+1;
else
fitin=fitin+1;
end
end
% 3.5 交叉
% 交叉(crossover),群体中的每个个体之间都以一定的概率pc 交叉,即两个个体从各自字符串的某一位置
% (一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。
例如,假设2个父代个体x1,x2为:
% x1=0100110
% x2=1010001
% 从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为:% y1=0100001
% y2=1010110
% 这样2个子代个体就分别具有了2个父代个体的某些特征。
利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。
% 事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。
%遗传算法子程序
%Name: crossover.m
%交叉
function [newpop2]=crossover(newpop1,pc)
[px,py]=size(newpop1);
newpop2=ones(size(newpop1));
for i=1:2:px-1
if(rand<pc)
qq=randperm(py);
for o=1:(py/2)
newpop2(i,:)=[newpop1(i,1:qq(o)-1),newpop1(i+1,qq(o)),newpop1(i,qq(o)+1:py)];
newpop2(i+1,:)=[newpop1(i+1,1:qq(o)-1),newpop1(i,qq(o)),newpop1(i+1,qq(o)+1:py)] ;
end
else
newpop2(i,:)=newpop1(i,:);
newpop2(i+1,:)=newpop1(i+1,:);
end
end
% 3.6 变异
% 变异(mutation),基因的突变普遍存在于生物的进化过程中。
变异是指父代中的每个个体的每一位都以概率pm 翻转,即由“1”变为“0”,
% 或由“0”变为“1”。
遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。
%遗传算法子程序
%Name: mutation.m
%变异
function [newpop3]=mutation(newpop2,pm)
[px,py]=size(newpop2);
newpop3=ones(size(newpop2));
for i=1:px
if(rand<pm)
newpop3(i,:)=newpop2(i,:);
for aa=1:4
mpoint=round(rand*py);
if mpoint<=0
mpoint=1;
end
if (newpop2(i,mpoint))==0
newpop3(i,mpoint)=1;
else
newpop3(i,mpoint)=0;
end
end
else
newpop3(i,:)=newpop2(i,:);
end
end
% 3.7 求出群体中最大得适应值及其个体
%遗传算法子程序
%Name: best.m
%求出群体中适应值最大的值
function [bestindividual,bestfit]=best(pop,fitvalue)
[px,py]=size(pop);
bestindividual=pop(1,:);
bestfit=fitvalue(1);
for i=2:px
if fitvalue(i)>bestfit
bestindividual=pop(i,:);
bestfit=fitvalue(i);
end
end
% 3.8 主程序
%遗传算法主程序
clear
clf
popsize=50; %群体大小
chromlength=28; %字符串长度(个体长度)
pcc=[20/50,28/50,36/50,44/50,20/50];
pmm=[1/50,5/50,10/50,15/50,1/50];
pop=initpop(popsize,chromlength); %随机产生初始群体
for i=1:100 %100为迭代次数
pc=pcc(round(rand *4)+1); %交叉概率
pm=pmm(round(rand *4)+1); %变异概率
[objvalue]=calobjvalue(pop); %计算目标函数
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop1]=selection(pop,fitvalue); %复制
[newpop2]=crossover(newpop1,pc); %交叉
[newpop3]=mutation(newpop2,pc); %变异
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值z(i)=max(bestfit);
n(i)=i;
pop5=bestindividual;
x(i)=decodechrom(pop5,1,chromlength/2)*20/16383;
y(i)=decodechrom(pop5,chromlength/2+1,chromlength/2)*20/16383;
pop=newpop3;
end
3.9函数图像分析
(1)其中每一代的最佳值组成一个有100个元素的列向量如下图所示:
图3-1 每一代的最大适应值
(2)以遗传代数为横坐标,最佳个体适应值为横坐标所得图像如下
图3-2 遗传代数与所对应最大适应值的关系曲线
(3)以遗传代数为横坐标,X(=x-10)的值为纵坐标所得图像如下
图3-3 遗传代数与所对应最佳个体X的关系曲线(4)以遗传代数为横坐标,Y(=y-10)的值为纵坐标所得图像如下
图3-4 遗传代数与所对应最佳个体Y的关系曲线
四、对]20
)5()5(exp[999.0)10)5()5(exp(9.0),(2
2222-+--*++++*=y x y x y x f ,遗传算法matlab 编程
4.1 % 计算目标函数值
% calobjvalue.m 函数的功能是实现目标函数的计算
%遗传算法子程序
%Name: calobjvalue.m
%实现目标函数的计算
function [objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,18); %将pop 每行转化成十进制数
temp2=decodechrom(pop,19,18);
x=temp1*20/262143; %将二值域中的数转化为变量域的数
y=temp2*20/262143;
objvalue=0.9*exp((x-5).^2/10+(y-5).^2/10)+0.9999*exp(-(x-15).^2/20-(y-15).^2/20); %计算目标函数值
4.2 % 主程序
%遗传算法主程序
clear
clf
popsize=50; %群体大小
chromlength=36; %字符串长度(个体长度)
pcc=[20/50,28/50,36/50,44/50,20/50];
pmm=[1/50,5/50,10/50,15/50,1/50];
pop=initpop(popsize,chromlength); %随机产生初始群体
for i=1:100 %100为迭代次数
pc=pcc(round(rand *4)+1); %交叉概率
pm=pmm(round(rand *4)+1); %变异概率
[objvalue]=calobjvalue(pop); %计算目标函数
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop1]=selection(pop,fitvalue); %复制
[newpop2]=crossover(newpop1,pc); %交叉
[newpop3]=mutation(newpop2,pc); %变异
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值z(i)=max(bestfit);
n(i)=i;
pop5=bestindividual;
x(i)=decodechrom(pop5,1,chromlength/2)*20/262143;
y(i)=decodechrom(pop5,chromlength/2+1,chromlength/2)*20/262143;
pop=newpop3;
end
4.3函数图像分析
(1)其中每一代的最佳值组成一个有100个元素的列向量如下图所示:
图4-1 每一代的最大适应值
(2)以遗传代数为横坐标,最佳个体适应值为横坐标所得图像如下
图4-2 遗传代数与所对应最大适应值的关系曲线
(3)以遗传代数为横坐标,X(=x-10)的值为纵坐标所得图像如下
图4-3 遗传代数与所对应最佳个体X的关系曲线
(4)以遗传代数为横坐标,Y(=y-10)的值为纵坐标所得图像如下
图4-4 遗传代数与所对应最佳个体Y的关系曲线
五、结论分析
5.1 对
y y
x x
y
x f
sin
sin
)
, ( 1
*
=
,
x趋近于0,且y趋近于0时,函数有最大适应性,最大适应性趋近于1。