实验一基于遗传算法的函数优化.docx

上传人:b****4 文档编号:5191743 上传时间:2022-12-13 格式:DOCX 页数:12 大小:69.55KB
下载 相关 举报
实验一基于遗传算法的函数优化.docx_第1页
第1页 / 共12页
实验一基于遗传算法的函数优化.docx_第2页
第2页 / 共12页
实验一基于遗传算法的函数优化.docx_第3页
第3页 / 共12页
实验一基于遗传算法的函数优化.docx_第4页
第4页 / 共12页
实验一基于遗传算法的函数优化.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验一基于遗传算法的函数优化.docx

《实验一基于遗传算法的函数优化.docx》由会员分享,可在线阅读,更多相关《实验一基于遗传算法的函数优化.docx(12页珍藏版)》请在冰豆网上搜索。

实验一基于遗传算法的函数优化.docx

实验一基于遗传算法的函数优化

实验一-基于遗传算法的函数优化

 

人工智能实验报告

 

实验一基于遗传算法的函数优化

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1