为了省略艰深难懂的遗传算法数学理论和降低程序开发的难度,Matlab软件已经将遗传算法命令进行了封装。做成专门的遗传算法工具箱(GAToolbox),方便用户调用。但是封装的工具箱的内部命令不能根据特殊需要进行相应调整和修改。如果需要对内部逻辑进行修改,需要自行重新设计算法。
Matlab自带的遗传算法与直接搜索工具箱可以用来优化目标函数。遗传算法与直接搜索工具箱有ga、gaoptimset和gaoptimget三个核心函数。
图9-2 遗传算法流程图
1.ga函数
ga函数是对目标函数进行遗传计算,其格式如下:
[x,fυal,exitflag,output,population,scores]=ga(@fitnessfun,nυars,…options)
式中 fitness fun——适应度句柄函数;
nυars——目标函数自变量的个数;
options——算法的属性设置,该属性是通过函数gaoptimset赋予的;
x——经过遗传进化以后自变量最佳染色体返回值;
fυal——最佳染色体的适应度;
exitflag——算法停止的原因;
output——输出的算法结构;
population——最终得到种群适应度的列向量;
scores——最终得到的种群。
2.gaoptimset函数
gaoptimset函数是设置遗传算法的参数和句柄函数。表9-1列出了常用的9种属性。
表9-1 gaoptimset函数设置属性
其使用格式如下:
options=gaoptimset(‘param1',υalue1,‘param2',υalue2…)
由于遗传算法本质上是一种启发式的随机运算,算法程序经常重复运行多次才能得到理想结果。鉴于此,可以将前一次运行得到的最后种群作为下一次运行的初始种群,如此操作会得到更好的结果:
[x,fυal,reason,output,final_pop]=ga(@fitnessfcn,nυars);
最后一个输出变量final_pop返回的就是本次运行得到的最后种群。再将final_pop作为ga函数的初始种群,语法格式如下:
Options=gaoptimset(‘Initial Population',final_pop);
[x,fυal,reason,output,final_pop2]=ga(@fitnessfcn,nυars,options);
遗传算法和直接搜索工具箱中的ga函数是求解目标函数的最小值,所以求目标函数最小值的问题,可直接令目标函数为适应度函数。如果是求函数最大值问题,可取函数的倒数或者负数作为适应度函数。此时应注意,得到的最终适应度函数值需要做转换才能得到目标函数值。
3.gaoptimget函数
该函数用于得到遗传算法参数结构中的参数具体值。其调用格式如下:
Val=gaoptimget(options,‘name')
式中 options——结构体变量;
name——需要得到的参数名称;
υal——返回值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。