这个例子展示了如何使用遗传算法(遗传算法
)求解器在全局优化工具箱。
在这个例子中所说明的问题涉及到一个阶梯悬臂梁的设计。特别地,梁必须能够承受规定的端荷载。在各种工程设计约束下,我们将解决一个最小化梁体积的问题。
在这个例子中,我们将解决[1]中发布的问题的两个有界版本。
一端支承阶梯式悬臂梁,自由端施加荷载,如下图所示。金宝app梁必须能够承受给定的载荷,金宝app,在一个固定的距离的支持。金宝app梁的设计者可以改变梁的宽度()及身高()。我们假设悬臂的每个部分都有相同的长度,.
射束体积
光束的体积,,是各部分体积的总和
设计约束:1 -弯曲应力
考虑单个悬臂梁,其坐标中心在其横截面的中心在梁的自由端。某一点的弯曲应力在梁中,由下列方程给出
在哪里弯矩为,距离终端负载和的距离为梁的面积惯性矩。
现在,在图中所示的阶梯式悬臂梁中,梁各截面的最大弯矩为,在那里为到端荷载的最大距离,,用于梁的每一段。因此,最大应力为-梁的第一部分,,是由
最大应力出现在梁的边缘,.面积惯性矩梁的截面为
代入方程给了
悬臂各部分的弯曲应力不应超过最大许用应力,.因此,我们最终可以说明五个弯曲应力约束(悬臂的每一步一个)。
设计约束:2 -端部挠度
悬臂梁的端部挠度可以用卡斯蒂利亚诺第二定理计算
在哪里为梁的挠度,为由于施加的力而存储在光束中的能量,.
储存在悬臂梁中的能量为
在哪里作用力的力矩是在.
考虑到对于悬臂梁,我们可以把上面的方程写成
在哪里面积的转动惯量是悬臂的部分。评估积分给出以下表达式.
应用卡斯蒂利亚诺定理,给出了梁的端部挠度
现在,悬臂的末端挠度,,应小于最大允许挠度,,给出了下面的约束条件。
设计约束:3 -长宽比
对于悬臂的每个步骤,纵横比不得超过最大允许的宽高比,.也就是说,
为
我们现在能够陈述问题,以找到最优参数的阶梯式悬臂梁给定的约束条件。
让,,,,,,,,和
最小化:
主题:
横梁的第一步只能加工到最近的厘米。也就是说,和必须是整数。其余的变量是连续的。变量的边界如下:-
这个问题的设计参数
对于本例中要解决的问题,梁必须支撑的端荷载为金宝app.
梁的长度和最大端部挠度为:
梁总长度,
梁的个别截面,
梁端最大挠度,
梁的每个步骤中的最大允许应力,
梁每一步的杨氏模量,
我们现在解决中描述的问题描述优化问题.
定义适应度和约束函数
检查MATLAB文件cantileverVolume.m
和cantileverConstraints.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];
设置选项
为了得到更精确的解,我们增加PopulationSize
,MaxGenerations
选项的默认值,并减少EliteCount
和FunctionTolerance
选项。这些设置的原因遗传算法
使用更大的填充(增加PopulationSize),增加设计空间的搜索(减少EliteCount),并一直进行,直到其最佳成员的变化非常小(小功能容忍度)。我们还指定一个plot函数来监视惩罚函数的值为遗传算法
的进展。
注意,有一个限制的集合遗传算法
解决混合整数问题时可用的选项-详细信息,请参阅全局优化工具箱用户指南。
选择= Optimoptions(@ga,...“PopulationSize”, 150,...“MaxGenerations”, 200,...“EliteCount”10...“FunctionTolerance”1 e-8...“PlotFcn”, @gaplotbestf);
调用遗传算法
解决问题
我们现在可以调用遗传算法
来解决这个问题。在问题陈述中和是整数变量。我们通过传递下标向量来指定它(1 2)
来遗传算法
在非线性约束输入之后,在期权输入之前。我们还在这里播种和设置随机数生成器以保证重现性。
rng (0,“旋风”);[xb, fb, exitflag] = ga (@cantileverVolume 10 , [], [], [], [],...lb, ub, @ cantileconstraints, [1 2], opts);
优化终止:超过了最大代数。
分析结果
如果问题有整数约束,遗传算法
哈贝马斯在内部。特别地,问题中的适应度函数被处理约束的惩罚函数所代替。对于可行种群成员,惩罚函数与适应度函数相同。
解从遗传算法
如下显示。注意,最靠近支架的部分被限制为宽度(金宝app)及身高(),它是一个整数值,该约束已被GA遵守。
显示(xb);
xbest =列1至7 3.0000 60.0000 2.8504 57.0057 2.6114 50.6243 2.2132列8至10 44.2349 1.7543 35.0595
我们也可以问遗传算法
以返回光束的最佳体积。
流('\nCost函数由ga = %g\n'返回、fb);
由ga = 63408.9返回的成本函数
工程师们现在被告知,悬臂的第二和第三个台阶的宽度和高度只能从标准设置中选择。在本节中,我们将展示如何将这个约束添加到优化问题中。注意,添加了这个约束后,这个问题与[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文件cantileverVolumeWithDisc.m
,cantileverConstraintsWithDisc.m
和cantileverMapVariables.m
.
现在我们可以调用遗传算法
解决离散变量问题。在这种情况下都是整数。这意味着我们传递了下标向量1:6
来遗传算法
定义整型变量。
rng (0,“旋风”);[xbestDisc, fbestDisc, exitflagDisc] = ga(@悬臂volumewithdisc,...10、[],[],[],lb, ub, @cantileverConstraintsWithDisc, 1:6, opts);
优化终止:超过了最大代数。
分析结果
xbestDisc(三6)
是回来遗传算法
作为整数(即处于转换状态)。我们需要反向转换以检索它们的工程单元中的值。
xbestDisc = cantileverMapVariables (xbestDisc);显示(xbestDisc);
xbestDisc =列1至7 3.0000 60.0000 3.1000 55.0000 2.6000 50.000 2.2430列8至10 44.8603 1.8279 36.5593
和以前一样,解决方案返回遗传算法
尊重和都是整数。我们也可以看到,从一套[2.4,2.6,2.8,3.1]厘米和,选自设置[45,50,55,60] cm。
回想一下,我们在变量上添加了额外的约束x (3)
,x (4)
,x (5)
和x (6)
.正如预期的那样,当这些变量有额外的离散约束时,最优解决方案具有更高的最小容量。进一步注意,在[1]中报告的解决方案的最小体积是我们找到了一个近似于[1]的解。
流('\nCost函数由ga = %g\n'返回, fbestDisc);
GA = 64795返回的成本函数
这个例子演示了如何使用遗传算法求解器,遗传算法
,求解具有整数约束的非线性优化问题。这个例子也显示了如何处理离散变量的问题,在问题的公式化。
Thanedar, P. B.和G. N. Vanderplaats。结构设计离散变量优化综述。土木工程学报,2004,(3):1 - 8。