Building可视库
一起做些更酷的事吧!
关注
小库这两天学习有关遗传算法的一些问题,其作为一种全局寻优的智能优化算法,具有很强大的适应性,可以应用于多个领域解决一些最优化的问题,诸如寻路问题,囚犯困境,动作控制,生产调度问题,人工生命模拟等。
袋鼠跳问题
从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。
我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。
遗传算法的实现过程:
首先寻找一种对问题潜在解,进行“数字化”编码的方案(建立表现型和基因型的映射关系),然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上)种群里面的个体就是这些数字化的编码。
接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高),用选择函数按照某种规定择优选择(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平),让个体基因交叉变异,然后产生子代(希望存活下来的袋鼠是多产的,并在那里生儿育女),遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解(你不必去指导袋鼠向那边跳,跳多远),而只要简单的“否定”一些表现不好的个体就行了(把那些总是爱走下坡路的袋鼠射杀),这是遗传算法的精粹。
在MATLAB中,有遗传算法的优化工具箱,我们先尝试用Rastrigin函数测试MATLAB中的遗传算法(GA)工具箱。
绘制函数图像的代码
选用Ras函数测试的原因:Rastrigin 函数有许多局部最小值,然而,该函数只有一个全局最小值,出现在 xy 平面上的点[0,0]处,在任何不同于[0,0]的局部最小点处,Rastrigin 函数的值均大于 0。局部最小处距原点越远,该点处 Rastrigin 函数的值越大。Rastrigin 函数之所以最常用来测试遗传算法,是因为它有许多局部最小点,使得用标准的、基于梯度的查找全局最小的方法十分困难。
首先我们需要建立函数脚本文件(来源于工具箱)
本过程用的版本为是MATLAB.2014a,在应用程序打开Optimization,在solver选择ga-Genetic Algorithm,或者直接使用gatool命令打开。
GA工具箱界面
Fitness function—— 输入适应度函数;
Num of variables——输入变量个数;
结果如下:
经过200次迭代,x1=-0.001,y=-0.024,最优值为0.1151,可见使用GA工具包进行Ras函数测试的结果是可靠的。
在这里,我们举个结构优化设计的例子。
如图所示的某 机械的悬臂结构,矩形悬臂梁A固定在支撑 体B上。在梁A的最大弯曲量为[ δ max]=10mm条 件下能承受作用力 F=10kN,已知梁A的悬臂 长度为 L=2000mm,材料的弹性模量为E=2.0× 105MPa,许用应力σmax≦[σ]=175MPa。
在满足弯 曲应用和弯曲变形约束条件以及梁宽度b及高度 h 均不小于50mm且都不大于200mm的条件 下,求出材料体积V最小的优化问题的数学模型并结合Matlab遗传算法工具箱寻找最优的b和 h值。
建立优化数学模型,令b=x1,h=x2,并代入相关已知数据,得出悬臂梁的体积最优化数学模型如下:
由数学模型可以看出,该优化问题为单目标 非线性最优化问题,其中:目标函数f(x)和约束方 程g1(x)、g2(x)均属于非线性规划。对于非线性的 最优化设计,采用遗传算法进行优化具有明显的优势。
编写函数M文件 :
另新建一个非线性约束函数的M文件,输入以下代码,保存到工作目录中,文件名为BeamO⁃ pt_constraint。
如下图所示输入相关的参数,运行遗传算法:
结果如下:分别为迭代6次,25次,30次
可以看出大约从第16代开始后面每一代的平均适应 值变化很小,所形成的曲线接近水平线,因而可以断定x1=50mm,x2=147mm,目标函数值f(x)= 1.47×10的7次方mm3已经十分接近最优解,可作为问题的最优解。
好了,以上便是本期推送的全部内容,这里是Building可视库,我们下期见吧~
参考文章:
优化与决策
CSDN:遗传算法详解(GA)
基于Matlab的遗传算法在结构优化设计中的应用.吴立华
官方文档:使用 MATLAB 遗传算法工具
扩展阅读:
背包问题(上)|贪心算法与 MATLAB程序实现
最优化问题|惩罚函数法与机器人路径规划
最优化问题|梯度下降法与 MATLAB程序实现
模糊数学|秃不秃头谁说了算
图文+模拟 | 阿明
编辑 | Jason