实验目的和意义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的和意义
用遗传算法解决下面函数的极小值问题:
遗传算法的具体实施策略不限,最好用MATLAB,上交内容包括源程序和运行结果
二、实验原理
目标函数是一个含有30维变量的复杂型超越函数,决定使用MA TLAB下的遗传函数工具箱来寻找函数最小值。
三、详细设计步骤
1、函数编辑
在m文件下编辑目标函数:
function y =fun(x);
y = zeros(size(x,1),1); %产生一个列向量,(种群数)*1,作为预留解空间
[xSize, Dim] = size(x); %xSize:种群数; Dim:变量x的维数
indices = repmat(1:Dim, xSize, 1); %生成函数中i的空间矩阵,(种群数)*(变量维数)
y = sum(((x.^2) / 4000)')' - prod(cos(x ./
sqrt(indices))')' + 1; %函数表达式,此处均采用矩
阵点乘的形式
2、遗传算法参数设置
通过gatool(遗传算法工具箱)设置参数,运行程序,选择合适参数。
Number of variables(变量维数):30
Population size:100
Initial range:[-600;600]
Selection function (选择函数): tournament(锦标赛); tournament size:2
Mutation function (变异函数): Uniform(); Rate:0.05
Crossover function: Intermediate; Ratio: 0.05
Generrations: 5000; Stall generations: Inf; Stall time limite: Inf
Fitness function is vectorized: on
其余均为工具箱默认参数。
3、运行程序
将设置好参数的算法程序运行30次运行,最佳运行结果为:3.4937e-010
x1~x30取值:
1.0e-004 *
-0.0097 0.0017 0.0587 -0.0250 0.0765 0.0391 -0.0824 0.0653
-0.0539 -0.3470 -0.1078 0.4388 0.0223 0.0363 0.0003 0.0228
-0.0481 -0.4491 -0.5006 -0.2514 0.0608 -0.1022 0.3454 0.1146
0.0768 -0.0203 0.0910 -0.0571 0.0065 -0.1384
4、保存遗传算法程序
将在工具箱中编辑好的算法导出为m函数并保存:
function [X,FVAL,REASON,OUTPUT,POPULATION,SCORES] = untitled
%% This is an auto generated M file to do optimization with the Genetic Algorithm and % Direct Search Toolbox. Use GAOPTIMSET for default GA options structure.
%%Fitness function
fitnessFunction = @fun;
%%Number of Variables
nvars = 30;
%Start with default options
options = gaoptimset;
%%Modify some parameters
options = gaoptimset(options,'PopInitRange' ,[-600 ; 600 ]);
options = gaoptimset(options,'PopulationSize' ,100);
options = gaoptimset(options,'Generations' ,5000);
options = gaoptimset(options,'StallGenLimit' ,Inf);
options = gaoptimset(options,'StallTimeLimit' ,Inf);
options = gaoptimset(options,'PlotInterval' ,30);
options = gaoptimset(options,'SelectionFcn' ,{ @selectiontournament 2 });
options = gaoptimset(options,'CrossoverFcn' ,{ @crossoverintermediate 0.05 });
options = gaoptimset(options,'MutationFcn' ,{ @mutationuniform 0.05 });
options = gaoptimset(options,'Display' ,'off');
options = gaoptimset(options,'PlotFcns' ,{ @gaplotbestf });
options = gaoptimset(options,'Vectorized' ,'on');
%%Run GA
[X,FVAL,REASON,OUTPUT,POPULATION,SCORES] = ga(fitnessFunction,nvars,options);
以上结果亦可在m文件中直接运行获得。
5、修改参数,改进算法
继续修改算法的相关参数,运行,寻找更优的算法
1.将Generations改为10000代,运行6次,得到的解为3.2041e-013,x取值为:
1.0e-005 *
-0.0008 -0.0319 0.0026 0.0009 0.0017 -0.0003 0.0047 0.0004
0.0020 -0.0023 -0.0006 -0.0018 -0.0061 0.0049 -0.0039 0.0010
-0.1542 0.0039 -0.0046 -0.0029 -0.0037 0.0017 -0.0046 -0.0033
0.0090 -0.3386 0.0132 -0.0013 -0.0015 0.0047
如果算法不陷入局部最优,条件允许,通过增加Generations,结果会更加逼近最优解。
2.将Mutation rate 改为0.1,Generations仍为10000代
运行5次,得到y=0的最优解,x的取值为:
1.0e-007 *
0.0727 0.1472 -0.1360 0.1341 0.1999 0.1048 -0.0537 -0.0414
0.0798 -0.1442 -0.3390 0.3439 -0.1162 0.3160 -0.0368 0.0111
-0.4248 -0.4128 0.3928 -0.4598 -0.2377 -0.3688 0.4046 -0.4820
-0.1920 0.2408 -0.3225 -0.2477 -0.1940 -0.3161
3.Mutation rate:0.2,Crossover Ratio:0.2
运行10次,最优结果为1.4222e-012,x取值:
1.0e-005 *
-0.0060 -0.0140 -0.0145 -0.0366 0.0176 -0.0019 -0.0633 -0.0945
0.0336 -0.1454 -0.0182 0.0028 -0.1411 0.0716 -0.2317 0.1134
0.0990 -0.0250 0.0808 -0.0626 0.1475 0.3507 0.2061 0.0549
0.2066 -0.3231 0.0079 -0.0948 -0.0661 0.2036
四、总结
遗传算法(GA)是人工智能的重要新分支,是基于达尔文进化论,在计算机上模拟生命进化机制而发展起来的一门学科。它根据适者生存等自然法则来进行搜索和计算。对许多用传统数学难以解决或明显实效的复杂问题,特别是优化问题,GA提供了一个行之有效地新途径,也为人工智能的研究带来了新的生机。
简单遗传算法的三个基本运算是选择、交换、变异。
五、参考文献
李仁厚,智能控制理论和方法,西安电子科技大学出版社