这个例子展示了如何使用遗传算法解决一个混合整数工程设计问题(遗传算法
)全局优化工具箱中的解算器。
本例中所示的问题涉及阶梯悬臂梁的设计。特别是,梁必须能够承受规定的端部荷载。我们将解决一个问题,使梁体积在各种工程设计约束下最小化。
在这个例子中,我们将解决[1]中发布的问题的两个有界版本。
阶梯悬臂梁一端支撑,自由端施加荷载,如下图所示。该梁必须能金宝app够支撑给定荷载,,在固定的距离梁的设计者可以改变金宝app宽度()及身高()每个部分的。我们假设悬臂的每个部分都有相同的长度,.
梁的体积
梁的体积,,是各部分体积的总和
设计约束:1-弯曲应力
考虑单个悬臂梁,其坐标中心在其横截面的中心在梁的自由端。某一点的弯曲应力在梁中,由下列方程给出
哪里弯矩是多少,是距离端部荷载和为梁的面积惯性矩。
现在,在图中所示的阶梯悬臂梁中,梁的每个截面的最大力矩为哪里是距离端部荷载的最大距离,,适用于梁的每个截面。因此,最大应力为-梁的第一部分,,是由
最大应力出现在梁的边缘,. 转子的面积惯性矩-梁的截面由下式给出:
代入方程给予
悬臂各部分的弯曲应力不得超过最大容许应力,.因此,我们最终可以说明五个弯曲应力约束(悬臂的每一步一个)。
设计约束:2端挠度
悬臂梁的端部挠度可以用卡斯蒂利亚诺第二定理计算
哪里是梁的挠度,是由于施加的力而储存在梁中的能量,.
悬臂梁中储存的能量由下式给出
哪里是在以下位置施加力的力矩:.
鉴于此对于悬臂梁,我们可以将上述方程写成
哪里是物体的面积惯性矩-悬臂的一部分。对这个积分求值得到下面的表达式.
应用卡斯蒂利亚诺定理,给出了梁的端部挠度
现在,悬臂的末端偏转,,应小于最大允许挠度,,给出了下面的约束条件。
设计上的限制:3-纵横比
对于悬臂的每一步,长宽比不得超过最大允许的长宽比,.就是,
为
我们现在能够陈述问题,在给定约束的情况下,找到阶梯悬臂梁的最佳参数。
允许,,,,,,,,和
最小化:
从属于:
梁的第一步只能加工到最接近的厘米,即,和必须是整数。其余变量是连续的。变量的界限如下所示:-
该问题的设计参数
对于本例中要解决的问题,梁必须支撑的端荷载为金宝app.
梁长度和最大端部挠度为:
梁总长度,
梁的单个截面,
梁端最大挠度,
梁每一步的最大允许应力,
梁各阶的杨氏模量,
现在,我们解决了中描述的问题说明优化问题.
定义适应度和约束函数
检查MATLAB文件cantileverVolume.m
和悬臂梁
了解适应度和约束函数是如何实现的。
关于线性约束的一个注记:当线性约束被指定为遗传算法
,通常通过一个
,b
,Aeq
和说真的
投入。在这种情况下,我们通过非线性约束函数指定了它们。这是因为在本例的后面,一些变量将变得离散。当问题中存在离散变量时,在非线性约束函数中指定线性约束要容易得多。另一种方法是修改线性约束矩阵,使其在变换后的变量空间中工作,这不是简单的,也可能是不可能的。另外,在混合整数中遗传算法
无论如何指定,线性约束的处理方式与非线性约束的处理方式没有任何不同。
设定界限
创建包含下界的向量(磅
)和上界约束(乌兰巴托
).
Lb = [1 30 2.4 45 2.4 45 1 30 1 30];Ub = [5 65 3.1 60 3.1 60 5 65 5 65];
设置选项
为了获得更精确的解,我们增加了人口规模
和MaxGenerations
选项的默认值,并减少精英帐户
和FunctionTolerance
选项。这些设置的原因遗传算法
使用更大的总体(增加的总体大小),增加设计空间的搜索(减少的EliteCount),并继续进行,直到其最佳成员的变化非常小(较小的函数公差)。我们还指定了一个绘图函数来监控惩罚函数值,如下所示:遗传算法
的进展。
请注意,有一组受限制的遗传算法
解决混合整数问题时可用的选项-详细信息,请参阅全局优化工具箱用户指南。
选择= optimoptions (@ga,...“PopulationSize”, 150,...“最大世代”, 200,...“EliteCount”, 10,...“功能公差”1 e-8...“PlotFcn”,@gaplotbestf);
呼叫遗传算法
解决问题
我们现在可以调用遗传算法
来解决这个问题。在问题陈述中和是整数变量。我们通过传递索引向量来指定它[1 2]
到遗传算法
在非线性约束输入之后和选项输入之前。我们还在此处播种并设置随机数生成器,以确保再现性。
rng(0,“旋风”);[xbest,fbest,exitflag]=ga(@悬臂体积,10,[],[],[],[],[],[],...lb,ub,@悬臂约束[12],选项);
优化终止:超过了最大代数。
分析结果
如果问题有整数约束,遗传算法
在内部重新制定。特别是,问题中的适应度函数被处理约束的惩罚函数所取代。对于可行种群成员,惩罚函数与适应度函数相同。
解从遗传算法
如下显示。注意,最靠近支架的部分被限制为宽度(金宝app)及身高()这是一个整数值,GA已遵守此约束。
显示器(xbest);
xbest=第1列至第7列3.0000 60.0000 2.8326 56.6516 2.5725 51.4445 2.2126第8列至第10列44.2423 1.7512 34.9805
我们也可以问遗传算法
返回梁的最佳体积。
流(“\n ga返回的代价函数=%g\n”,fbest);
ga返回的成本函数=63196.6
工程师们现在被告知,悬臂的第二和第三步只能具有从标准设置中选择的宽度和高度。在本节中,我们将演示如何将此约束添加到优化问题中。请注意,添加此约束后,此问题与[1]中解决的问题相同。
首先,我们声明将添加到上述优化中的额外约束
梁的第二和第三步的宽度必须从以下设置中选择:-[2.4,2.6,2.8,3.1]厘米
梁的第二和第三级台阶的高度必须从以下设置中选择:-[45,50,55,60]厘米
为了解决这个问题,我们需要能够指定变量,,和作为离散变量。指定组件的步骤从集合中取离散值,使用进行优化取值范围为1到的整型变量,并使用作为离散值。指定范围(1到),设1为下界和作为上界。
首先,我们转换离散变量的边界。每个集合有4个成员,我们将离散变量映射到[1,4]范围内的整数。因此,要将这些变量映射为整数,我们将每个变量的下界设置为1,上界设置为4。
Lb = [1 30 1 1 1 1 1 30 1 30];Ub = [5 65 4 4 4 4 5 65 5 65];
的转换(整数)版本,,和当遗传算法
调用解算器。要正确计算这些函数,,,和需要转换为这些函数中给定的离散集合中的一个元素。要了解这是如何完成的,请检查MATLAB文件悬臂体积(含圆盘)m
,cantileverConstraintsWithDisc.m
和悬臂梁
.
现在我们可以打电话了遗传算法
解决离散变量的问题。在这种情况下是整数。这意味着我们传递索引向量1:6
到遗传算法
定义整型变量。
rng(0,“旋风”); [xbestDisc,fbestDisc,exitflagDisc]=ga(@悬臂体积,带圆盘,...10、[],[],[],lb, ub, @cantileverConstraintsWithDisc, 1:6, opts);
优化终止:超过了最大代数。
分析结果
xbestDisc(3:6)
从遗传算法
作为整数(即处于转换状态)。我们需要反向转换以检索它们的工程单元中的值。
xbestDisc=悬臂映射变量(xbestDisc);显示(xbestDisc);
xbestDisc=第1列至第7列3.0000 60.0000 3.1000 55.0000 2.8000 50.0000 2.3036第8列至第10列43.6153 1.7509 35.0071
与以前一样,解决方案从遗传算法
尊重约束和都是整数。我们也可以看到,从[2.4,2.6,2.8,3.1]厘米和,从一套[45,50,55,60]厘米中选择。
回想一下,我们在变量上添加了额外的约束x (3)
,x (4)
,x(5)
和x (6)
.正如预期的那样,当这些变量有额外的离散约束时,最优解决方案具有更高的最小容量。进一步注意,在[1]中报告的解决方案的最小体积是我们找到了一个近似于[1]的解。
流(“\n ga返回的代价函数=%g\n”, fbestDisc);
由ga = 65226.5返回的成本函数
此示例说明了如何使用遗传算法解算器,遗传算法
,以解决具有整数约束的约束非线性优化问题。该示例还显示了如何处理问题公式中具有离散变量的问题。
结构设计中的离散变量优化,P.B. Thanedar, G.N. Vanderplaats, J. Struct。Eng。,121 (3), 301-306 (1995)