发布时间 : 星期六 文章遗传算法实验报告更新完毕开始阅读
桂 林 理 工 大 学
实 验 报 告
班级 计算机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
四、运行结果:
五、心得体会:
本次试验着重针对代码的改写,通过改写代码以及思考对遗传算法有了一定的了解,跟同学讨论学会了二值域转换为变量域的方法。总的来说,这次试验让我懂得了要多讨论、多动脑、多思考。