MATLAB利用遗传算法求取最优解

MATLAB内置GA函数,用以求解全局最优化问题,适用于求解目标函数最优解问题。

一、GA函数原型:

在这里插入图片描述

二、函数介绍

常用的两种分别是:
1.X = ga(fitnessfcn,nvars)
2.X = ga(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中,fitnessfcn为适应度函数(也就目标函数),其参数为向量,nvars是参数向量的维度,函数返回值X为适应度函数最小值时的参数向量。
其它参数,像A,b,Aeq,beq,lb,ub,nonlcon,IntCon用于约束X的取值,这里不多讲述,有需要可详细学习《MATLAB遗传算法工具箱及应用》,文末附本书电子版链接,供学习参考。

三、应用实例

如,适应度函数为,
f = (339-0.01x1-0.003x2)x1 + (399-0.004x1-0.01x2)x2 -(400000+195x1+225x2)
求该函数的最大值。
代码:
在这里插入图片描述
此时执行,X =ga(@myfit, 2)
结果显示: Optimization terminated: maximum number of generations exceeded.
说明迭代达到最大次数仍未求得最优解。因此下面通过options增大迭代次数。
在这里插入图片描述
结果显示: Optimization terminated: average change in the fitness value less than options.TolFun.
在命令行窗口输出X,FVAL
在这里插入图片描述
这个结果与对目标函数 x1、x2 分别求偏导得到的结果(x1=4735, x2=7043, y=553641)是一致的,表明结果正确。

四、optimoptions函数

首先,函数原型:options = optimoptions(SolverName,Name,Value)
附调用遗传算法函数代码,

options = optimoptions(‘ga’);
options = optimoptions(options,‘PopulationSize’, PopulationSize_Data);
options = optimoptions(options,‘CrossoverFraction’, CrossoverFraction_Data);
options = optimoptions(options,‘MigrationFraction’, MigrationFraction_Data);
options = optimoptions(options,‘MaxGenerations’, MaxGenerations_Data);
options = optimoptions(options,‘SelectionFcn’, @selectionroulette);
options = optimoptions(options,‘CrossoverFcn’, @crossovertwopoint);
options = optimoptions(options,‘MutationFcn’, { @mutationgaussian,scale,shrink });

1.PopulationSize:种群规模,初始化种群的数目

2.CrossoverFraction:交叉概率,种群产生下一代的比例,默认是0.8

3.MigrationFraction:编译概率,种群发生变异的比例

4.MaxGenerations:最多进化的代数

5.SelectionFcn:进化的方式,可供选择的函数有五种,最常用的是’selectionroulette’,即轮盘赌方式,感兴趣的可以查阅相关资料来学习

6.CrossoverFcn:交叉的方式,决定了子代的由来,可供选择函数有六种,

‘crossoverscattered’、‘crossoversinglepoint’、‘crossovertwopoint’、
‘crossoverintermediate’、‘crossoverheuristic’、‘crossoverarithmetic’

7.MutationFcn:变异的方式,用以扩大GA算法的搜索空间,默认为mutationgaussian,此变异函数服从均值为0的高斯分布,其标准差由参数scale、shrink、以及InitialPopulationRange option共同决定。

附电子文档《MATLAB遗传算法工具箱及应用》
链接:https://pan.baidu.com/s/1tAHX9Rl3RCrTPPRVNFhlcg?pwd=pof8
提取码:pof8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值