实验一 基于某遗传算法地函数优化.docx
- 文档编号:8587519
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:12
- 大小:71.15KB
实验一 基于某遗传算法地函数优化.docx
《实验一 基于某遗传算法地函数优化.docx》由会员分享,可在线阅读,更多相关《实验一 基于某遗传算法地函数优化.docx(12页珍藏版)》请在冰豆网上搜索。
实验一基于某遗传算法地函数优化
人工智能实验报告
实验一基于遗传算法的函数优化
1、实验目的
1)掌握Matlab子函数的编写与调用。
2)理解基本遗传算法的原理,并利用程序实现利用遗传算法优化非线性函数的解。
2、实验内容与实验要求
1)掌握基本遗传算法方法原理。
2)掌握matlab子函数的编写方法及调用方法。
3)根据基本遗传算法方法原理,编写Matlab程序,优化非线性函数的解。
4)设f(x)=
,求maxf(x),x[-2,2],解的精度保留二位小数。
3、实验要求
1)自己独立编写Matlab函数。
2)书写实验报告。
3)分析实验结果,用图或表描述出迭代次数与适应度函数值的关系曲线。
4、实验设备
1)计算机
2)Matlab软件
5、实验结果及分析
(1)编码和产生初始群体
首先需要确定编码的策略,也就是说如何把[-2,2]区间内的数用计算机语言表示出来。
采用二进制形式来解决编码问题,即将某个变量值代表的个体表示为一个{0,1}二进制串。
串的长度取决于求解的精度,例如假设求解精度为保留两位小数,由于区间[-2,2]的长度为4,则必须将该区间分为400等分。
因为28<400<29,所以编码所用的二进制串至少需要9位。
编码:
二进制串(b8b7b6…b1b0)与[-2,2]内实数的一一映射:
b8b7b6…b1b0
二进制串a=<101000111>其对应的十进制数为:
转化到[-2,2]内的实数为:
产生初始群体:
pop1={
<100011110>,%a1
<001000010>,%a2
<110000000>,%a3
<110000101>}%a4
转化成[-2,2]之间的十进制数即为:
pop1={0.24,-1.48,1.01,1.05}
(2)定义适应函数和适应值
由于目标函数f(x)在[-2,2]内的值有正有负,所以必须通过建立适应函数与目标函数的映射关系,保证映射后的适应值非负,而且目标函数的优化方向应对应于适应值增大的方向,也为以后计算各个体的入选概率打下基础。
定义适应函数:
为了便于计算,这里的Fmin采用了一个特定的输入值,如果取Fmin=-1,则f(x)=1对应的适应值为g(x)=2。
上述随机产生的初始群体,取Fmin=-1,则它们的目标函数值和适应值分别为:
f(pop1)={-0.02,4.73,-4.06,-4.30}
g(pop1)={-1.02,3.73,-5.06,-5.30}
(3)确定选择标准
1用适应值比例来作为入选概率。
2设给定的规模为400的群体pop={a1,a2,...,a400},个体ai的适应值为g(ai),则其入选概率为
)
上述随机产生的初始群体,它们的入选概率分别为:
p(pop1)=g(pop1)/sum(g(pop1))
={0,1,0,0}
(4)产生种群
3将入选概率大的个体选入种群,淘汰概率小的个体,并用概率最大的个体补入种群,得到与原群体大小同样的种群。
4在上述随机产生的初始群体中,淘汰掉a3,再加入a2,得到新的种群(选择):
newpop1={
<100011110>,%a1
<001000010>,%a2
<001000010>,%a2
<110010101>}%a4
交叉:
5交叉也就是将一组染色体上对应基因段的交换得到新的染色体,然后得到新的染色体组,组成新的群体。
6将前面得到的newpop1的四个个体两两配对,重复的不配对,进行交叉(可以在任一位进行交叉):
变异:
变异就是通过一个小概率改变染色体位串上的某个基因。
7现把jchpop1中第3个个体中的第5位改变,就产生了变异,得到了新的群体pop2:
pop2={
<001000010>,
<100011110>,
<010000101>,
<101000010>}
然后对新的种群重复上述的选择、交叉、变异,直到满足终止条件为止。
(5)实验结果:
6、附录(Matlab函数)
%遗传算法主函数
%q:
输出最佳个体自变量值
%迭代次数为400
function[q]=GA()
globalbest_in;
globalg_value;
%初始化
initilize();
%初始化最佳个体的适应函数值
fori=1:
400
g_value=0.;
end
%迭代开始
fork=1:
1:
100
fitness();%适应函数操作
calculate();%对出现概率小的个体进行淘汰,并保留最佳个体best_in的信息
%计算每一次迭代中最佳个体的适应函数值aa,并赋给g_value(i)
aa=0.;
forj=1:
9
aa=aa+best_in(j).*2^(j-1);
end
g_value(k)=aa;
selection();%选择操作
crossover();%交叉操作
mutation();%变异操作
end
plotGA();%打印算法迭代过程
%获得最佳个体变量值
q=0.;
forj=1:
9
q=q+best_in(j).*2^(j-1);
end
q=-2+q*4./(2^9-1);
q=-q^2-4*q+1;
%结果展示
fprintf('最大值为:
%3.2f\n',q);
cleari;
clearj;
clearq;
%调用函数1
%初始化种群pop
%种群大小400
%染色体长度9
%rand求随机数
%round取整
functioninitilize()
globalpop;
fori=1:
400
forj=1:
9
pop(i,j)=round(rand);
end
end
cleari;
clearj;
%函数调用2
%计算出适应函数值g(x)
%原函数f(x)=-x^2-4x+1
%取Fmin=-1
%g(x)=-x^2-4x
%value是pop种群中每个个体的适应值
%并将value中小于零的数都赋值为零
functionfitness()
globalpop;
globalvalue;
fori=1:
400
value(i)=0.;
forj=1:
9
ifpop(i,j)==1
value(i)=value(i)+pop(i,j)*2^(j-1);
end
end
value(i)=-2.+value(i)*4./(2^9-1);
value(i)=-value(i)*value(i)-4.*value(i);
ifvalue(i)<=0
value(i)=0;
end
end
cleari;
clearj;
%函数调用3
%求value的平均值
%popl是各数的出现的概率
%table中的最后一个值是所有的value值之和
%保存最优的个体
functioncalculate()
globalpop;
globaltable;
globalpopl;
globalvalue;
globalavg;
globalbest_in;
%table的初始化
fori=1:
400
table(i)=0.;
end
%求最大的value值的个体的序列号max,并把最优个体放在best_in中
max=1;
fori=1:
399
ifvalue(i+1)>value(i)
max=i+1;
end
end
forj=1:
9
best_in(j)=pop(max,j);
end
%求所有value值的总和加到table中求出平均值avg1,再求出均值个体的出现概率avg
fori=1:
400
ifi==1
table(i)=table(i)+value(i);
else
table(i)=table(i-1)+value(i);
end
end
avg1=table(400)./400;
avg=avg1./table(400);
%求value中每个个体出现的概率并且保留在popl中
fori=1:
400
popl(i)=value(i)./table(400);
end
fori=1:
400
ifpopl(i) forj=1: 9 pop(i,j)=best_in(j); end end end cleari; clearq; clearj; cleark; cleartemp; clearmax; clearavg1; %函数调用4 %将popl(i)=0的个体除去,并补上其相邻的不为0的pop %将新产生的群pop_new最终复制到pop functionselection() globalpop; globalpopl; globalbest_in; pop_new(400,9)=0.; fori=1: 400 ifpopl(i)==0 forj=1: 9 pop_new(i,j)=best_in(j); end else forj=1: 9 pop_new(i,j)=pop(i,j); end end end fori=1: 400 forj=1: 9 pop(i,j)=pop_new(i,j); end end cleari; clearj; clearm; clearn; %函数调用5 %单点交叉操作 %pop_size: 种群大小 %chromo_size: 染色体长度 %cross_rate: 交叉概率 functioncrossover() globalpop %设置交叉概率为0.6 cross_rate=0.6; fori=1: 2: 399 if(rand cross_pos=round(rand*9); ifor(cross_pos==0,cross_pos==1) continue; end forj=cross_pos: 9 temp=pop(i,j); pop(i,j)=pop(i+1,j); pop(i+1,j)=temp; end end end cleari; clearj; clearcross_pos; cleartemp; %函数调用6 %单点变异操作 %pop_size: 种群大小 %chromo_size: 染色体长度 %cross_rate: 变异概率 functionmutation() globalpop; %设置变异概率为0.01 mutate_rate=0.01; fori=1: 400 ifrand mutate_pos=round(rand*9); ifmutate_pos==0 continue; end pop(i,mutate_pos)=1-pop(i,mutate_pos); end end fori=1: 400 forj=1: 9 pop(i,j)=pop(i,j); end end cleari; clearj; clearmutate_rate; %打印算法迭代过程 %迭代次数400 functionplotGA() globalg_value; x=1: 100; plot(x,g_value); ylabel('g(x)'); xlabel('x'); title('最佳个体迭代情况'); clearx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 基于某遗传算法地函数优化 实验 基于 遗传 算法 函数 优化