自己需要编写目标函数,

function[sol,eval]=函数名[sol,options]

或者

function[val]=函数名[sol]  (来自coranaEval范例)

numv=size(sol,2)  (返回数组sol的列数)

startPop = initializega(20,bounds,'fitq',[],[1e-6 1])

例:问题】在-5<=Xi<=5,i=1,2区间内,求解
        f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
    %源函数的matlab代码
       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')

注:前两个文件存储为m文件并放在工作目录下,运行结果为
    p =
    0.0000 -0.0000 0.0055

遗传算法中sol(1)的解释
要理解sol的含义首先要了解initPop的结构,它的每行代表种群中的一个个体,假如有n个变量,那么每行的前n列就代表每个变量的值,如x1,x2....,xn,最后一列代表的是这些变量的适应值,也就是eval。由于intializega函数执行时,要调用fitness函数,并且传递给fitness函数一个个体的信息,该个体信息是1行n+1列的向量,所以sol得到的值实际是1行n+1列的向量,但是计算适应值只有用到前n个信息就行了,即用到(x1,x2....,xn)的值,因此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)*[下限,上限];

[le-6 0 0]

(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 属于[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');
运行结果:

gaot工具箱介绍及应用相关推荐

  1. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-附录-LMI工具箱介绍

    第3章 回到目录 第5章 附录-LMI工具箱介绍 A.1 线性矩阵不等式及相关术语 A.1 线性矩阵不等式及相关术语

  2. MATLAB工具箱介绍

    MATLAB工具箱介绍 Toolbox工具箱 序号 工具箱 备注 数学.统计与优化 1 Symbolic Math Toolbox 符号数学工具箱 2 Partial Differential Euq ...

  3. matlab系统辨识工具箱原理,matlab常用工具箱介绍

    怎么使用matlab系统辨识工具箱 如果是系统自带的,你可以直接用,如果是外部的或者是自编的你需要先把文件夹拷贝到tools文件夹下,再设置路径. Matlab常用工具箱介绍(英汉对照)Matlab ...

  4. SAR学习笔记后续-phased工具箱介绍

    摘要 <SAR学习笔记-代码部分>主要介绍了目标检测.一维距离像.二维距离像以及SAR成像的RDA算法等编程实现过程.这篇论文承接上篇内容,主要介绍MATLAB中phased工具箱. 文章 ...

  5. Matlab常用工具箱介绍

    Matlab常用工具箱介绍 Matlab Main Toolbox--matlab主工具箱 Control System Toolbox--控制系统工具箱 Communication Toolbox- ...

  6. matlab2017中工具箱,【2017年整理】matlab工具箱介绍.ppt

    [2017年整理]matlab工具箱介绍 第六讲 Matlab工具箱;一.工具箱简介;领域型工具箱 -- 专用型 领域型工具箱是学科专用工具箱,其专业性很强,比如控制系统工具箱( Control Sy ...

  7. Simulink产品家族工具箱介绍!

    Simulink产品家族工具箱介绍! 之前有对Matlab系列的Matlab与Simulink两个系列的产品做分类,可以参考,用于安装时的快速选择! 链接地址 Simulink产品工具箱如下: Aer ...

  8. matlab遗传算法gatbx工具箱介绍及安装说明

    一. 遗传算法简介: 官网:http://www.geatpy.com/tutorials 遗传算法是以自然选择和遗传理论为基础,将生物进化过程中适者生存规则与群体内部染色体的随机信息交换机制相结合的 ...

  9. python概率编程_TensorFlow新功能:TensorFlow Probability概率编程工具箱介绍

    在2018年TensorFlow开发者峰会上,我们宣布了TensorFlow Probability:一种概率编程工具箱,用于机器学习研究人员和其他从业人员快速可靠地利用最先进硬件构建复杂模型.如果出 ...

  10. 关于一些常见/好用的matlab工具箱介绍

    所谓Matlab工具箱就是一些M文件的集合, 用户可以修改工具箱中的函数,更为重要的是用户可以通过编制M文件来任意地添加工具箱中原来没有的工具函数.此功能充分体现了matlab语言的开放性.许多的专业 ...

最新文章

  1. 一种比较兼容的Excel报表导出方法
  2. Windows最经典应用大变脸:学生爽翻!
  3. php 如何实现无状态化,服务无状态化设计分析
  4. 【JMeter】Threads(users)3种类型
  5. 代码走查(Code Review)25条疑问
  6. 理正深基坑弹性计算方法_理正深基坑软件应用全参数说明书
  7. 三维空间点到直线距离计算
  8. android模拟器上https抓包
  9. 计算机工作的本质是什么?
  10. 微软.NET平台OA办公解决方案
  11. vision安装过程中出错_NVIDIA安装程序失败 3D vision 驱动程序 失败 是为什么,如图所示...
  12. Java实现 LeetCode 383 赎金信
  13. 扫雷小游戏(超详细)
  14. 国内镜像加速器registry的制作
  15. 【控制理论】滑模控制最强解析
  16. 通报批评!严重学术不端!涉及10所高校,共计14人!基金委公布今年第一批科研不端案例...
  17. E0289错误怎么解决
  18. 计算机毕业设计ssm物流站环境监测系统
  19. 【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境
  20. xhprof 安装使用

热门文章

  1. 操作系统概念第四章部分作业题答案
  2. 管家婆A8 TOP V9.5.1版本安装需知!
  3. CodeGym:以游戏化的方式学习Java真的是事半功倍
  4. 地图标识符号大全_资源小结:旅游类地图汇总(8.17版)
  5. html论坛注册代码,Discuz!论坛代码大全和HTML代码大全 | 穆小刚营销博客
  6. 大学生数学建模赛题解析及优秀论文-2021电工杯A题高铁牵引供电系统运行数据分析及等值建模(附Python代码)
  7. Blender源代码编译(VS2019、win64_vc15)
  8. 计算机定时关机命令,定时关机命令,小编教你怎么使用命令行定时关机
  9. 易语言禁用计算机指令大全,易语言电脑屏幕锁定工具源码
  10. qt银行排队系统服务器代码,QT银行叫号排队系统