遗传算法实验报告

发布时间 : 星期四 文章遗传算法实验报告更新完毕开始阅读

桂 林 理 工 大 学

实 验 报 告

班级 计算机11-1班 学号 姓名 同组实验者 无

实验名称 日期 2014年 5 月 30日 一、实验目的:

用遗传算法求f(x)=x*sin(10*pi*x)+1.0的最大值,其中x区间为 [-1 2] 。

二、实验内容:

初始化(编码);实现目标函数的计算:将pop每行转化成十进制数,将二值域中的数转化为变量域的数,计算目标函数值;随机产生初始群体;计算目标函数值;计算群体中每个个体的适应度;保存每次迭代最大适应值对应的x,y,用于绘图演示;计算最大值及其位置;计算最大值对应的x值。

三、程序清单:

%遗传算法主程序 clear clc

popsize=20; %群体大小

chromlength=10; %字符串长度(个体长度) pc=0.6; %交叉概率 pm=0.001; %变异概率

pop=initpop(popsize,chromlength); %随机产生初始群体 for i=1:200 为迭代次数

[objvalue]=calobjvalue(pop); %计算目标函数值

fitvalue=objvalue; %计算群体中每个个体的适应度 % fitvalue=calfitvalue(objvalue); %依概率选择遗传操作之一 r1=ceil(3*rand); switch r1

case 1

newpop=selection(pop,fitvalue); %复制 case 2

newpop=crossover(pop,pc); %交叉 case 3

newpop=mutation(pop,pc); %变异 end

[bestindividual,bestfit]=best(pop,fitvalue); % 群体中最大的适应值及其个体

y(i)=bestfit; %保存每次迭代最大适应值对应的x,y,用于绘图演示 x(i)=-1+decodebinary(bestindividual)*3/1023; pop=newpop; end

fplot('x.*sin(10*pi*x)+1.0',[-1 2]) hold on

plot(x,y,'r*') hold off

[ymax index]=max(y); %计算最大值及其位置 xmax=x(index)%计算最大值对应的x值 ymax

四、运行结果:

五、心得体会:

本次试验着重针对代码的改写,通过改写代码以及思考对遗传算法有了一定的了解,跟同学讨论学会了二值域转换为变量域的方法。总的来说,这次试验让我懂得了要多讨论、多动脑、多思考。

联系合同范文客服:xxxxx#qq.com(#替换为@)