![aa9624df364b8c6cf43cb479e2f74050.png](https://i-blog.csdnimg.cn/blog_migrate/9f47b6fb97ad7c9347b609f98883de36.jpeg)
Building可视库
一起做些更酷的事吧!
关注
小库这两天学习有关遗传算法的一些问题,其作为一种全局寻优的智能优化算法,具有很强大的适应性,可以应用于多个领域解决一些最优化的问题,诸如寻路问题,囚犯困境,动作控制,生产调度问题,人工生命模拟等。
袋鼠跳问题
![015af11f72ba4075b17a38f974bd3856.png](https://i-blog.csdnimg.cn/blog_migrate/873d1dad4f244322e1f5b50ef1ac0d6c.jpeg)
从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。
我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。
遗传算法的实现过程:
首先寻找一种对问题潜在解,进行“数字化”编码的方案(建立表现型和基因型的映射关系),然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上)种群里面的个体就是这些数字化的编码。
接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高),用选择函数按照某种规定择优选择(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平),让个体基因交叉变异,然后产生子代(希望存活下来的袋鼠是多产的,并在那里生儿育女),遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解(你不必去指导袋鼠向那边跳,跳多远),而只要简单的“否定”一些表现不好的个体就行了(把那些总是爱走下坡路的袋鼠射杀),这是遗传算法的精粹。
![203d9345cd30733baffc3df84622e6fc.gif](https://i-blog.csdnimg.cn/blog_migrate/3ecfd3b6628f9717b3d5c4459307a709.gif)
![ffaced6c3544c03fa7c195bdcccba5e5.png](https://i-blog.csdnimg.cn/blog_migrate/7dfa095a4103341aff4552bfc1738cd2.png)
在MATLAB中,有遗传算法的优化工具箱,我们先尝试用Rastrigin函数测试MATLAB中的遗传算法(GA)工具箱。
![60849e07888d8f87c3901404862d9cc1.png](https://i-blog.csdnimg.cn/blog_migrate/44cf06b0a2e9e19d641e9fa3e53448e4.png)
![c6e9f42aa32b3e8e12ec38d4706e2f45.png](https://i-blog.csdnimg.cn/blog_migrate/b96ccdf482fe907e8bdc08010d3c1bb9.png)
![5508a26afd9623b6ec8bc675a910120c.png](https://i-blog.csdnimg.cn/blog_migrate/0bae4596291bbe061932a457edf41bce.jpeg)
![cd55f36cf205f94286afe3026a0dc582.png](https://i-blog.csdnimg.cn/blog_migrate/a52374d70730f63a254b7e0d5e4a4664.jpeg)
![13d5702acb52da5949157f32dd045093.png](https://i-blog.csdnimg.cn/blog_migrate/71232b2caf0f9aeb478f4ffdda573a8f.png)
绘制函数图像的代码
选用Ras函数测试的原因:Rastrigin 函数有许多局部最小值,然而,该函数只有一个全局最小值,出现在 xy 平面上的点[0,0]处,在任何不同于[0,0]的局部最小点处,Rastrigin 函数的值均大于 0。局部最小处距原点越远,该点处 Rastrigin 函数的值越大。Rastrigin 函数之所以最常用来测试遗传算法,是因为它有许多局部最小点,使得用标准的、基于梯度的查找全局最小的方法十分困难。
首先我们需要建立函数脚本文件(来源于工具箱)
![7af2c7b7b52895991bc5236118c27b38.png](https://i-blog.csdnimg.cn/blog_migrate/2538f05fdd9bfce80091ea6ce9b239ea.png)
本过程用的版本为是MATLAB.2014a,在应用程序打开Optimization,在solver选择ga-Genetic Algorithm,或者直接使用gatool命令打开。
![021daa6ac278a59a57e4620616ca07ef.png](https://i-blog.csdnimg.cn/blog_migrate/eac3c4f207a8e9952e10fc9a5f3a9314.png)
GA工具箱界面
![ddcb67c6df2ca4ae9b93e588987260c3.png](https://i-blog.csdnimg.cn/blog_migrate/c65d659c2b8fbd419d0c173e7b15ff92.jpeg)
Fitness function—— 输入适应度函数;
Num of variables——输入变量个数;
结果如下:
![cd0613fd05f2fdfc057428154475bcf9.png](https://i-blog.csdnimg.cn/blog_migrate/cf88fc6beca51cefaabca89d6204bdfe.jpeg)
![2f50d0577248532476739367cdf12202.png](https://i-blog.csdnimg.cn/blog_migrate/5347a97b99a9adc73cb18926484f05cd.jpeg)
经过200次迭代,x1=-0.001,y=-0.024,最优值为0.1151,可见使用GA工具包进行Ras函数测试的结果是可靠的。
在这里,我们举个结构优化设计的例子。
![ffaced6c3544c03fa7c195bdcccba5e5.png](https://i-blog.csdnimg.cn/blog_migrate/7dfa095a4103341aff4552bfc1738cd2.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](https://i-blog.csdnimg.cn/blog_migrate/44cf06b0a2e9e19d641e9fa3e53448e4.png)
![572980b3373fc958c99b9f26e88d6fb7.png](https://i-blog.csdnimg.cn/blog_migrate/d4651a5368954ac65a4f37ba57b420f6.jpeg)
建立优化数学模型,令b=x1,h=x2,并代入相关已知数据,得出悬臂梁的体积最优化数学模型如下:
![2a700cf9b0a307b4dce35efc13355d63.png](https://i-blog.csdnimg.cn/blog_migrate/a06828b79f9ab8fb2e0b0dd96a4233c8.jpeg)
由数学模型可以看出,该优化问题为单目标 非线性最优化问题,其中:目标函数f(x)和约束方 程g1(x)、g2(x)均属于非线性规划。对于非线性的 最优化设计,采用遗传算法进行优化具有明显的优势。
编写函数M文件 :
![96394fe40199b888203c5dd8328b4802.png](https://i-blog.csdnimg.cn/blog_migrate/df5fb27b255c1cd248019f93a2e1d118.jpeg)
另新建一个非线性约束函数的M文件,输入以下代码,保存到工作目录中,文件名为BeamO⁃ pt_constraint。
![5a40fd9b27783b0312cecc139c845fb4.png](https://i-blog.csdnimg.cn/blog_migrate/77ea3bd1127d0d08f4a7f59a43e25293.jpeg)
如下图所示输入相关的参数,运行遗传算法:
![8a4cf4cf90c4502dcc28dce032fbc7f2.png](https://i-blog.csdnimg.cn/blog_migrate/99e98a372019407627ecc88a3db9c2fb.jpeg)
结果如下:分别为迭代6次,25次,30次
![2c28b8fe915ce46070b8bdb1954aacff.png](https://i-blog.csdnimg.cn/blog_migrate/bc943a58e0d027dfc46fc255a7494a27.jpeg)
![e724ae5d622e23be2e0a41bd11f6aa16.png](https://i-blog.csdnimg.cn/blog_migrate/43e9fb94441cc0e0d311becb3ce7307e.jpeg)
![2b2a509b8966e21ed3d189800f52921b.png](https://i-blog.csdnimg.cn/blog_migrate/acc989d431190a44a31afd646389c327.jpeg)
![ec1f0f6638f84770403014eb186662a6.png](https://i-blog.csdnimg.cn/blog_migrate/aab05a3e41a2112735327eac701ce523.jpeg)
可以看出大约从第16代开始后面每一代的平均适应 值变化很小,所形成的曲线接近水平线,因而可以断定x1=50mm,x2=147mm,目标函数值f(x)= 1.47×10的7次方mm3已经十分接近最优解,可作为问题的最优解。
好了,以上便是本期推送的全部内容,这里是Building可视库,我们下期见吧~
参考文章:
优化与决策
CSDN:遗传算法详解(GA)
基于Matlab的遗传算法在结构优化设计中的应用.吴立华
官方文档:使用 MATLAB 遗传算法工具
![203d9345cd30733baffc3df84622e6fc.gif](https://i-blog.csdnimg.cn/blog_migrate/3ecfd3b6628f9717b3d5c4459307a709.gif)
扩展阅读:
背包问题(上)|贪心算法与 MATLAB程序实现
最优化问题|惩罚函数法与机器人路径规划
最优化问题|梯度下降法与 MATLAB程序实现
模糊数学|秃不秃头谁说了算
图文+模拟 | 阿明
编辑 | Jason
![4616e6f1f2b4775602fb449cbdebc7f6.png](https://i-blog.csdnimg.cn/blog_migrate/833708a162d785849d5f01244a9ea764.jpeg)