先举个例子:

例子:求下面的函数的最小值\[f(x_{1},x_{2})=20\mathrm{e}^{-0.2\sqrt{0.5(x_{1}^{2}+x_{2}^{2})}}-\mathrm{e}^{0.5(\cos{2\pi x_{1}}+\cos{2\pi x_{2}})}+22.71282\]

在$-5\leq x_{i}\leq 5,i=1,2$的情况下。

先建立源函数代码:

function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv))-exp(sum(cos(2*pi*x))/numv)+22.71282;

再建立适应度函数:

%适应度函数的matlab代码function [sol,eval]=fitness(sol,options)numv=size(sol,2)-1; %(输入矩阵sol的列数-1,?因为最后一列是适应度值)x=sol(1:numv);eval=f(x);eval=-eval;

遗传算法代码:

%遗传算法的matlab代码bounds=ones(2,1)*[-5 5];[p,endPop,bestSols,trace]=ga(bounds,'fitness')

运行结果:

遗传算法中sol(1)的解释
要理解sol的含义首先要了解initPop的结构,它的每行代表种群中的一个个体,假如有n个变量,那么每行的前n列就代表每个变量的值,如$x_{1},x_{2},\dots,x_{n}$,最后一列代表的是这些变量的适应值,也就是eval。由于intializega函数执行时,要调用fitness函数,并且传递给fitness函数一个个体的信息,该个体信息是1行n+1列的向量,所以sol得到的值实际是1行n+1列的向量,但是计算适应值只有用到前n个信息就行了,即用到$(x_1,x_2\dots x_n)$的值,因此fitness调用sol(1:n).
一般情况下x只是单变量,即n=1,所以就会出现调用sol(1)了。

工具箱应用步骤

(1)初始化(必须有)

初始化的程序存在initialize.m文件中,初始化函数用法如下:
Function[pop]= initialize(num,bounds,evalFN,evalops,options)
主要输入参数有:Num:群体数目;Bounds:变量上限和下限组成的矩阵;evalFN:评价函数的文件名,通常是.m文件; Options:一个向量[epsilon float\binary prec],这里epsilon表示两代之间的差距;第二个参数取0表示采用二进制编码,取1表示采用实数本身;prec表示变量的精度;默认值为[le-6 1 ](可选择的)。输出参数pop中包含有初始群体的变量值和适应值。

chushihuapop=initializega(50,ones(vnum,1)*[上限,下限],适应函数,)bounds=ones(vnum,1)*[下限,上限];

(2)选择操作
选择或复制操作是决定哪些个体可以进入下一代。
工具包中提供了赌轮盘选择法(roulette),锦标赛选择法(tournSelect)和几何规划排序选择(normGeomSelect)。
如采用几何规划排序选择可用:function[newPop] =normGeomSelect(oldPop,options),其中options为选择概率;oldpop为旧群体。
(3)交叉操作
交叉过程是选取2个个体作为父代parent1,parent2,产生出2个新的子代个体child1和child2。

GAOT中提供了:arithXover,heuristicXover,simpleXover三种交叉方式。

如算术交叉(arithXover)的实现可通过调用function [c1,c2] =arithXover(p1,p2,bounds,ops)得到。该函数会产生一个随
机数a;然后通过父代p1和p2:p1*a+ p2*(1-a),p1*(1-a) + p2*a得到子代个体c1和c2。
(4)变异操作
GAOT提供了几个变异操作的M文件:binaryMutation.m, boundaryMutation.m, multiNonUnifMutation.m, nonUnifMutation.m, unifMutation.m, 在各个不同的M文件中包含了不同的变异操作,如nonUnifMutation.m文件中包含了非统一变异函数:function [parent]= nonUnifMutate(parent,bounds,ops);其输入参数有parent:父代对应的变量值和适应值,bounds:变量上限和下限组成的矩阵,ops:nonUnifMutate的参数[当前代…]。

(5)评价函数(必须有)
*eval.m是遗传算法与具体应用问题的惟一接口,是进行自然选择的惟一依据。改变种群内部结构的遗传操作均要通过评价函数加以控制。许多类型的评价函数都可以用于遗传算法,但他应至少要满足一个条件:函数值部分有序地分布。在*eval.m应包含有这样一行:

function [val,sol]=gaFxeval_r(sol,options),
%其中sol为群体中各个个体的值,val为个体的适应值。
%如求函数F(x)=x*sin(10*π*x)+1,在x∈[-1,2]范围内的极大值。F(x)为x的评价函数。那么编写评价函数M文件的代码应有以下3行:
function [val,sol]=gaFxeval_r(sol,options)     %sol:群体中各个个体的值,val:个体的适应值
x=sol(:,1);                                                   %获取各变量的值
val= x*sin(10*pi*x)+1;                                  %计算出各变量的评价值

  

(6)终止函数
在GAOT中提供了这2个终止文件:maxGenTerm.m(到某一最大的代数停止)和optMaxGenTerm.m(偏差作为终止条件)。如采用最大代数终止,可以在maxGenTerm.m文件中添加:

function [done] = maxGenTerm(ops,bPop,endPop)
% ops一个参数向量
% bPop-最优解组成的一个数组
% endPop-当前代的个体和对应的适应值
currentGen = ops(1);
maxGen= ops(2);
done= currentGen >= maxGen;

  

(7)主程序函数

 [x,endPop,bPop,trace]= ga(bounds,Min );

主程序函数的作用是调用相应的遗传操作函数,完成遗传优化,主程序函数是ga.m,其用法如下:

function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)

=ga(变量上下界的矩阵,适应度函数,传递给适应度函数的参数,初始种群,options参数,终止函数的名称,传递给终止函数的参数,选择函数的名称,传递给选择函数的参数,交叉函数名称表,传递给交叉函数的参数表,变异函数表,传递给交叉函数的参数表)
【输出参数】
    x--求得的最优解
    endPop--最终得到的种群      注:这是一个矩阵,行向量数为个体数,列向量为变量个数加1,1即为适应度值  
    bPop--最优种群的一个搜索轨迹
【输入参数】
    bounds--代表变量上下界的矩阵
    evalFN--适应度函数
    evalOps--传递给适应度函数的参数
    startPop-初始种群      注:这是一个矩阵,行向量数为个体数,列向量为变量个数加1,1即为适应度值  
    opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0]
    termFN--终止函数的名称,如['maxGenTerm']
    termOps--传递给终止函数的参数,如[100]
    selectFN--选择函数的名称,如['normGeomSelect']
    selectOps--传递给选择函数的参数,如[0.08]
    xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']
    xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]
    mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']
    mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]

学习完以上知识,可以看一个简单例子。

下面以一个例子说明:

\[f(x)=x+10\sin(5x)+7\cos(4x)\]

$x\in [0,9]$

求$f(x)$的最大值。

fitness.m 文件

 function [sol, eval] = fitness(sol, options)x = sol(1);eval = x + 10 * sin(5 * x) + 7 * cos(4 * x);

main.m  文件

initPop = initializega(10, [0 9], 'fitness');[x, endPop, bPop, trace] = ga([0 9],...
'fitness',[],...
initPop, [1e-6 1 1],...
'maxGenTerm', 25,...
'normGeomSelect', [0.08],...
['arithXover'], [2],...
'nonUnifMutation', [2 25 3]);figure(1)
plot(endPop(:, 1), endPop(:, 2),'y*')
figure(2)
plot(trace(:, 1), trace(:, 2), 'r-')
xlabel('Generation');
ylabel('Fittness');

运行结果:

  

转载于:https://www.cnblogs.com/txy19981002/p/7190943.html

GAOT工具箱(遗传算法)的应用相关推荐

  1. matlab 工具箱下载地址

    1.平面操作工具箱 http://cathy.ijs.si/~leon/planman.html 2.SimMechanics 工具箱 (这个好像不是免费的)  http://www.mathwork ...

  2. matlab常用工具箱汇总(附toolbox下载地址)

    1.平面操作工具箱 http://cathy.ijs.si/~leon/planman.html 2.SimMechanics 工具箱 (这个好像不是免费的)  http://www.mathwork ...

  3. matlab 经济计量工具箱,matlab空间计量经济学工具箱使用中的问题

    matlab很多工具箱都需要自己添加,下面的工具箱可以参考下 1.平面操作工具箱 http://cathy.ijs.si/~leon/planman.html 2.SimMechanics 工具箱 ( ...

  4. MatLab建模学习笔记3——MatLab工具箱

    1.平面操作工具箱 http://cathy.ijs.si/~leon/planman.html 2.SimMechanics 工具箱 (这个好像不是免费的) http://www.mathworks ...

  5. Matlab工具箱下载地址汇总

    博客新址: http://blog.xuezhisd.top 邮箱:xuezhisd@126.com 1.平面操作工具箱 http://cathy.ijs.si/~leon/planman.html ...

  6. matlab机器视觉工具箱下载,MATLAB工具箱下载大全

    地址: http://www.sciei.com/Soft/soft/math/matlab/Index.html MATLAB航天工程工具箱 2005-6-19 350 K 共享资源 ★★★★ ·将 ...

  7. 【matlab】关于遗传算法工具箱GAOT 改成可设置的交叉概率和变异概率

    研究了GAOT工具箱的使用,发现每次迭代过程中的交叉概率和变异概率都是随机变化的 按照以下步骤更改代码可以自己设置交叉概率和变异概率 1.变异概率 2.交叉概率 由于是在各自的代码函数里面添加了局部变 ...

  8. 遗传算法各Matlab工具箱简介

    关于matlab遗传算法工具箱主要有三种: 1.gaot工具箱:这是网上流传的免费的工具箱,网上对它介绍的资料也挺多,它不是Matlab软件自带的,但可以自己配置使用.飞思科技产品研发中心编著< ...

  9. MATLAB遗传算法工具箱Genetic Algorithm Toolbox的下载和安装

    2019独角兽企业重金招聘Python工程师标准>>> 1. 下载Genetic Algorithm Toolbox 打开网页http://codem.group.shef.ac.u ...

  10. matlab遗传算法m文件,matlab上安装遗传算法工具箱

    安装步骤: 1.将GAOT工具箱文件拷贝至Matlab文件夹下,具体路径为: C:\program files\MATLAB\R2009a\toolbox.(也可以放在其他路径,不一定放在toolbo ...

最新文章

  1. YOLOv4官方改进版来了!指标炸裂55.8% AP!Scaled-YOLOv4:扩展跨阶段局部网络
  2. php找不到指定的模块,php中的dll“无法找到指定的模块”
  3. STM32F4 HAL库开发 -- 独立看门狗(IWDG)
  4. 【计算机基础】存储器层次 Memory hierarchy
  5. 补充小知识:文件句柄与文件标识符
  6. 【日期类问题】例2.2 Day of week
  7. Java基础SQL优化---面试题【一】
  8. IME Starters Try-outs 2018 题解
  9. 【sketchup 2021】草图大师图像输出与渲染之Enscape渲染(优秀的实时渲染软件)的安装与软件说明,并在sketchup软件中调出Enscape软件和使用。
  10. 计算机社团自评报告怎么写,社团自我评价
  11. 最全工业以太网通讯协议
  12. android判断两个图片相同,android中比较两张图片的相似度
  13. android谷歌手机刷机教程
  14. 衡水中学计算机老师,衡水中学的老师到底有多拼,看看这“八项规定”就知道了!...
  15. NASA CEA 安装指南
  16. 基于docker jenkins nginx gitee实现前端自动化部署
  17. 基于JAVA租车网站计算机毕业设计源码+系统+lw文档+部署
  18. WinRAR v5.90 官方简体中文正式版
  19. python排序三个数大小_python三个数从小到大排序_后端开发
  20. [秀] MarsBook 手机书吧

热门文章

  1. 深入浅出数据分析(美 完整中文版)米尔顿
  2. 数据库系统概论-数据库安全性
  3. 不要经常让别人抄袭你的报告,否则他们会学会Word排版的艺术
  4. Unity3D中关于Mesh.MarkDynamic
  5. 3Dmax读取丢失的贴图的方法
  6. coolfire黑客入门教程系列之(八)最后部分!
  7. [转]coolfire黑客入门教程系列之(六)
  8. DXperience-6.2.4 破解
  9. 宣讲会通知|香港科技大学工学院理学硕士线上直播综合场【MSc】
  10. Unity3D 5.3 新版AssetBundle使用方案及策略