matlab 遗传优化算法_全局优化 | 遗传算法与结构优化模拟分析

  aa9624df364b8c6cf43cb479e2f74050.png

Building可视库

一起做些更酷的事吧!

关注

小库这两天学习有关遗传算法的一些问题,其作为一种全局寻优的智能优化算法,具有很强大的适应性,可以应用于多个领域解决一些最优化的问题,诸如寻路问题,囚犯困境,动作控制,生产调度问题,人工生命模拟等。

袋鼠跳问题

015af11f72ba4075b17a38f974bd3856.png

从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

遗传算法的实现过程:

首先寻找一种对问题潜在解,进行“数字化”编码的方案(建立表现型和基因型的映射关系),然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上)种群里面的个体就是这些数字化的编码。

接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高),用选择函数按照某种规定择优选择(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平),让个体基因交叉变异,然后产生子代(希望存活下来的袋鼠是多产的,并在那里生儿育女),遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解(你不必去指导袋鼠向那边跳,跳多远),而只要简单的“否定”一些表现不好的个体就行了(把那些总是爱走下坡路的袋鼠射杀),这是遗传算法的精粹。

203d9345cd30733baffc3df84622e6fc.gif ffaced6c3544c03fa7c195bdcccba5e5.png

在MATLAB中,有遗传算法的优化工具箱,我们先尝试用Rastrigin函数测试MATLAB中的遗传算法(GA)工具箱。

60849e07888d8f87c3901404862d9cc1.png c6e9f42aa32b3e8e12ec38d4706e2f45.png 5508a26afd9623b6ec8bc675a910120c.png cd55f36cf205f94286afe3026a0dc582.png 13d5702acb52da5949157f32dd045093.png

绘制函数图像的代码

选用Ras函数测试的原因:Rastrigin 函数有许多局部最小值,然而,该函数只有一个全局最小值,出现在 xy 平面上的点[0,0]处,在任何不同于[0,0]的局部最小点处,Rastrigin 函数的值均大于 0。局部最小处距原点越远,该点处 Rastrigin 函数的值越大。Rastrigin 函数之所以最常用来测试遗传算法,是因为它有许多局部最小点,使得用标准的、基于梯度的查找全局最小的方法十分困难。

首先我们需要建立函数脚本文件(来源于工具箱)

7af2c7b7b52895991bc5236118c27b38.png

本过程用的版本为是MATLAB.2014a,在应用程序打开Optimization,在solver选择ga-Genetic Algorithm,或者直接使用gatool命令打开。

021daa6ac278a59a57e4620616ca07ef.png

GA工具箱界面

ddcb67c6df2ca4ae9b93e588987260c3.png

Fitness function—— 输入适应度函数;

Num of variables——输入变量个数;

结果如下:

cd0613fd05f2fdfc057428154475bcf9.png 2f50d0577248532476739367cdf12202.png

经过200次迭代,x1=-0.001,y=-0.024,最优值为0.1151,可见使用GA工具包进行Ras函数测试的结果是可靠的。

在这里,我们举个结构优化设计的例子。

ffaced6c3544c03fa7c195bdcccba5e5.png

如图所示的某 机械的悬臂结构,矩形悬臂梁A固定在支撑 体B上。在梁A的最大弯曲量为[ δ max]=10mm条 件下能承受作用力 F=10kN,已知梁A的悬臂 长度为 L=2000mm,材料的弹性模量为E=2.0× 105MPa,许用应力σmax≦[σ]=175MPa。

在满足弯 曲应用和弯曲变形约束条件以及梁宽度b及高度 h 均不小于50mm且都不大于200mm的条件 下,求出材料体积V最小的优化问题的数学模型并结合Matlab遗传算法工具箱寻找最优的b和 h值。

60849e07888d8f87c3901404862d9cc1.png 572980b3373fc958c99b9f26e88d6fb7.png

建立优化数学模型,令b=x1,h=x2,并代入相关已知数据,得出悬臂梁的体积最优化数学模型如下:

2a700cf9b0a307b4dce35efc13355d63.png

由数学模型可以看出,该优化问题为单目标 非线性最优化问题,其中:目标函数f(x)和约束方 程g1(x)、g2(x)均属于非线性规划。对于非线性的 最优化设计,采用遗传算法进行优化具有明显的优势。 

编写函数M文件 :

96394fe40199b888203c5dd8328b4802.png

另新建一个非线性约束函数的M文件,输入以下代码,保存到工作目录中,文件名为BeamO⁃ pt_constraint。

5a40fd9b27783b0312cecc139c845fb4.png

如下图所示输入相关的参数,运行遗传算法:

8a4cf4cf90c4502dcc28dce032fbc7f2.png

结果如下:分别为迭代6次,25次,30次

2c28b8fe915ce46070b8bdb1954aacff.png e724ae5d622e23be2e0a41bd11f6aa16.png 2b2a509b8966e21ed3d189800f52921b.png ec1f0f6638f84770403014eb186662a6.png

可以看出大约从第16代开始后面每一代的平均适应 值变化很小,所形成的曲线接近水平线,因而可以断定x1=50mm,x2=147mm,目标函数值f(x)= 1.47×10的7次方mm3已经十分接近最优解,可作为问题的最优解。 

好了,以上便是本期推送的全部内容,这里是Building可视库,我们下期见吧~

参考文章:

优化与决策

CSDN:遗传算法详解(GA)

基于Matlab的遗传算法在结构优化设计中的应用.吴立华

官方文档:使用 MATLAB 遗传算法工具 

203d9345cd30733baffc3df84622e6fc.gif

扩展阅读:

背包问题(上)|贪心算法与 MATLAB程序实现

最优化问题|惩罚函数法与机器人路径规划

最优化问题|梯度下降法与 MATLAB程序实现

模糊数学|秃不秃头谁说了算

图文+模拟 | 阿明

编辑 | Jason

4616e6f1f2b4775602fb449cbdebc7f6.png
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值