使用遗传算法解决混合整数工程设计问题
这个例子展示了如何解决混合整数使用遗传算法(工程设计问题遗传算法
在全球优化工具箱)解算器。
问题说明在这个例子中包括一个梯形悬臂梁的设计。特别是,梁必须能够携带规定的负载。我们将解决问题最小化梁体积受各种工程设计约束。
在这个示例中,我们将解决两个版本的有界问题发表在[1]。
悬臂梁的设计问题
一端支持加强悬臂梁自由端和负载应用,如下图所示。万博1manbetx光束必须能够支持给定的负载,万博1manbetx,在一个固定的距离的支持。万博1manbetx梁的设计师可以改变宽度()和高度()的每个部分。我们假定每个部分的悬臂长度相同,。
梁的体积
梁的体积,,个人部分的体积的总和
限制设计:1 -弯曲应力
考虑一个悬臂梁,其横截面中心坐标中心在梁的自由端。弯曲应力在一个点在梁是由以下方程
在哪里弯矩在吗,最后加载和距离吗是梁的惯性矩。
现在,在悬臂梁图所示,每个部分的梁的最大力矩,在那里最大距离结束的负载,梁的每个部分。因此,的最大应力th梁的截面,的话,是
的最大应力出现在梁的边缘,。该地区的惯性矩th部分给出了梁的
用这个方程给了
的每一部分悬臂的弯曲应力不应超过最大许用应力,。因此,我们终于可以国家五个弯曲应力约束悬臂的为每个步骤(一)
限制设计:2 -偏转
悬臂式可以计算使用的最终挠度卡斯蒂利亚诺第二定理,即
在哪里梁的挠度,是能量存储在梁由于作用力,。
能量存储在一个悬臂梁是由
在哪里应用力的时刻吗。
考虑到悬臂梁,我们可以写出上述方程
在哪里惯性矩的面积th悬臂的一部分。评估积分给下面的表达式。
应用卡斯蒂利亚诺定理,最后给出梁的挠度
结束现在,悬臂梁的挠度,应小于最大允许偏差,,这给了我们以下约束。
限制设计:3 -纵横比
对于悬臂的每一步,长宽比不得超过最大允许长宽比,。也就是说,
为
状态的优化问题
我们现在能够状态问题找到最优参数下悬臂梁由于规定约束。
让,,,,,,,,和
最小化:
主题:
梁的第一步只能加工到最近的厘米。也就是说,和必须是整数。其余的变量是连续的。下面给出变量的范围:-
设计参数对这个问题
在这个例子中,我们将解决的问题最后加载梁必须支持万博1manbetx。
梁长度和最大挠度结束:
梁总长度,
个人部分梁、
最大的梁端挠度,
最大允许应力在梁的每一步,
梁的杨氏模量的每一步,
解决混合整数规划问题
我们现在描述的解决问题状态的优化问题。
定义健身和约束功能
检查MATLAB®文件cantileverVolume.m
和cantileverConstraints.m
看到健身和约束功能是如何实现的。
在线性约束:当线性约束指定遗传算法
通过,您通常指定它们一个
,b
,Aeq
和说真的
输入。在这种情况下我们指定通过非线性约束函数。这是因为在这个例子中,将离散的一些变量。当有离散变量问题更容易指定线性约束的非线性约束函数。替代方法是修改线性约束矩阵转换变量空间中工作,这并不是微不足道的,也许不可能。另外,在混合整数遗传算法
解算器,是不会被看成是线性约束的非线性约束,不管他们是如何指定。
设置范围
创建包含下界的向量(磅
)和上界约束(乌兰巴托
)。
[1 30 2.4 45磅= 2.4 45 1 30 1 30];乌兰巴托= [5 65 3.1 3.1 60 60 65 65 5];
设置选项
获得更准确的解决方案,我们增加了PopulationSize
,MaxGenerations
选项的默认值,减少EliteCount
和FunctionTolerance
选项。这些设置的原因遗传算法
使用一个更大的人口(增加PopulationSize),增加设计的搜索空间(减少EliteCount),继续前行,直到其最佳成员变化非常小(小FunctionTolerance)。我们还指定一个函数监控罚函数值的阴谋遗传算法
的进展。
请注意,有限制的遗传算法
选择当解决混合整数问题——看到全局优化工具箱用户指南的更多细节。
选择= optimoptions (@ga,…“PopulationSize”,150,…“MaxGenerations”,200,…“EliteCount”10…“FunctionTolerance”1 e-8…“PlotFcn”,@gaplotbestf);
调用遗传算法
为了解决这个问题
现在我们可以打电话遗传算法
来解决这个问题。问题陈述的和是整数变量。我们指定这个通过索引向量(1 2)
来遗传算法
在选项前的非线性约束输入和输入。我们还种子和再现性的随机数字生成器。
rng (0,“旋风”);[xb, fb, exitflag] = ga (@cantileverVolume 10 []、[] [], [],…2磅,乌兰巴托,@cantileverConstraints[1],选择);
优化终止:超过了一代又一代的最大数目。
分析结果
如果一个问题有整数约束,遗传算法
哈贝马斯在内部。特别是,适应度函数的问题是被罚函数处理约束条件。可行的人口成员,罚函数作为适应度函数是一样的。
返回的解决方案遗传算法
如下显示。注意,最近的部分支持约束的宽度(万博1manbetx)和高度(),是一个整数值,这约束已经被GA荣幸。
显示(xb);
xb = 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设置为下界作为上界。
所以,首先我们变换离散变量的范围。每组有四个成员,我们将离散变量映射到一个整数范围内[1,4]。地图这些变量是整数,我们设置下限为1和4的上界的每个变量。
30磅= [1 1 1 1 1 1 30 1 30];乌兰巴托= [5 65 4 65 4 65 5 5];
转换(整数)的版本,,和现在将被传递到健身和约束功能的时候遗传算法
解算器。正确评估这些函数,,,和需要转换为给定的离散集成员在这些功能。看到这是如何实现的,检查MATLAB文件cantileverVolumeWithDisc.m
,cantileverConstraintsWithDisc.m
和cantileverMapVariables.m
。
现在我们可以打电话遗传算法
解决离散变量的问题。在这种情况下都是整数。这意味着我们通过索引向量1:6
来遗传算法
定义整型变量。
rng (0,“旋风”);[xbestDisc, fbestDisc exitflagDisc] = ga (@cantileverVolumeWithDisc,…10[][],[],[],磅,乌兰巴托,@cantileverConstraintsWithDisc, 1:6,选择);
优化终止:超过了一代又一代的最大数目。
分析结果
xbestDisc(三6)
是回来遗传算法
为整数(即改变状态)。我们需要反向转换检索价值的工程单位。
xbestDisc = cantileverMapVariables (xbestDisc);显示(xbestDisc);
xbestDisc = 1到7列3.0000 60.0000 3.1000 55.0000 2.6000 50.0000 2.2430列8到10 44.8603 1.8279 36.5593
和之前一样,从返回的解决方案遗传算法
荣誉的约束和都是整数。我们也可以看到,选择从集合(2.4,2.6,2.8,3.1)厘米,,选择从集合(45岁,50岁、55岁,60岁)厘米。
回想一下,我们添加了额外的约束变量x (3)
,x (4)
,x (5)
和x (6)
。正如所料,这些变量上有额外的离散约束时,最优解决方案具有更高的最低体积。还需要注意,报告的解决方案[1]有一个最小的体积我们找到一个解决方案,大约是一样的报道[1]。
流(' \ nCost函数返回的ga = % g \ n ',fbestDisc);
成本函数返回的ga = 64795
总结
这个例子演示了如何使用遗传算法解算器,遗传算法
,解决约束非线性优化问题整数约束。示例还显示了如何处理问题的离散变量问题公式化。
引用
[1]Thanedar, p . B。,G. N. Vanderplaats. "Survey of Discrete Variable Optimization for Structural Design." Journal of Structural Engineering 121 (3), 1995, pp. 301–306.