MATLAB课程遗传算法实验报告及源代码
%子程序:目标函数,函数名称存储为fun.m function y = fun(x)
y=x(1)^2+x(2)^2+x(3)^2;
=================================================================
异常情况记录:
在运用matlab编写程序进行运算时,遇到了一些问题,如下: (1)经常出现警告提示:
Warning: Ignoring extra legend entries. > In legend at 294 In main at 72 In run at 57
(2)由于本实验包括7个程序,每个程序当中都有许多的变量名。由于程序中有些变量的名字特别长,因此在引用时总会因为输出其中某一个字母而在运行时出错。这当然可以通过修改得以更正,不过也提醒我以后在对变量名进行命名时不要使用过长的变量名。 (3)本实验在编写过程中遇到的最大一个问题是,在编写完程序,进行运算时,matlab很久都没有反应,然后在下方的窗口中一直显示“busy”。刚开始我以为是由于遗传代数过多、染色体长度太长导致运行时间过久。于是我等了一会,可是过了很久结果还是没有运行出来。我强制关掉程序,仔细的检查了代码,并没有发现错误,可再次运行时还是出现同样的问题,运算不出结果。最后我设置了一些断点,也就是去掉一些分号,让中间结果输出到命令窗口。运行后发现命令窗口中一直在不停的输出中间结果。按“Ctrl+c”暂停之后,我知道程序中可能出现了死循环。于是在有循环的语句中去找错误,结果发现主程序中的counter=counter+1这一条语句没有写进去,致使循环无法结束。问题最终得以解决。由于粗心我花了好大功夫去寻找错误,这是一个教训,也是一次收获,下次再遇到这种情况我不会再犯类似的错误了。
=================================================================
四、实验结果与总结(10分)
=================================================================
试验结果:
一:在初始设置为如下情况时:
maxgen=30; %进化代数 sizepop=100; %种群规模 pcross=[0.6]; %交叉概率 pmutation=[0.01]; %变异概率
lenchrom=[1 1 1]; %变量字串长度 运行程序5次结果为:
(1)bestfitness = 7.9536e-004
bestpop = 0.0043 -0.0282 -0.0074
MATLAB课程遗传算法实验报告及源代码
(2)
bestfitness = 0.0059
bestpop = -0.0266 0.0414 0.0656
(3)
bestfitness =2.0056e-005
bestpop = -0.0002 -0.0004 0.0046
MATLAB课程遗传算法实验报告及源代码
(4)
bestfitness = 8.0669e-004
bestpop = 0.0116 0.0251 -0.0072
(5)
bestfitness = 0.0019
bestpop = 0.0512 -0.0075 0.0210
MATLAB课程遗传算法实验报告及源代码
根据以上5次运行,不难发现每次运行结果都不同,这是由于遗传算法本质上是一种启发式随机搜索算法。后对参数进行调整,使进一步优化结果。
================================================================= 二:修改参数设置,优化算法:
maxgen=5000; %进化代数 sizepop=120; %种群规模 pcross=[0.001]; %交叉概率 pmutation=[0.1]; %变异概率 lenchrom=[1 1 1]; %变量字串长度
bound=[-5.12 5.12;-5.12 5.12;-5.12 5.12]; %变量范围 (1)
bestfitness =0.0161
bestpop =-0.0013 -0.0011 -0.1270
MATLAB课程遗传算法实验报告及源代码
(2)
bestfitness =0.0697
bestpop= 0.0000 0.0000 0.2641
(3)
bestfitness =0.0316
bestpop = -0.0004 -0.0000 0.1779