主要内容

用遗传算法求解混合整数工程设计问题

这个例子展示如何使用遗传算法(遗传算法)全局优化工具箱中的求解器。

本例中所说明的问题涉及阶梯悬臂梁的设计。特别是,梁必须能够承载规定的末端荷载。我们将在各种工程设计约束条件下解决一个最小化梁体积的问题。

在这个例子中,我们将解决在[1]中发布的问题的两个有界版本。

阶梯悬臂梁设计问题

在一端支撑一个阶梯悬臂梁,在自由端施加载荷,如下图所示。梁必须能够承受给定的载荷,$ P $,在一个固定的距离L美元的支持。梁的设计者可以改变宽度(b_i美元)和身高(h_i美元)。我们假设悬臂的每一部分长度相同,l美元

光束的体积

光束的体积,五美元为各部分体积之和

$ $ V = l (b_1h_1 + b_2h_2 + b_3h_3 + b_4h_4 + b_5h_5) $ $

设计约束:1 -弯曲应力

考虑一个单一的悬臂梁,其坐标中心在其截面的中心在梁的自由端。一点处的弯曲应力(x, y, z)美元由下式给出

$ $ \ sigma_b = M (x) y /我$ $

在哪里M (x)美元弯矩在吗x美元x美元到末端荷载的距离和我美元是梁的面积惯性矩。

现在,在如图所示的阶梯悬臂梁中,梁各截面的最大弯矩为PD_i美元,在那里d1美元是到末端荷载的最大距离,$ P $,为梁的每个截面。因此,最大应力为我美元梁的-th截面,\ sigma_i美元,由

$ $ \ sigma_i = PD_i (h_i / 2) / I_i $ $

当最大应力发生在梁的边缘时,y = h_i / 2美元.面积转动惯量我美元梁的-th截面由

$ $ $ $ I_i = b_ih_i ^ 3/12

把这个代入方程\ sigma_i美元给了

$ $ \ sigma_i = 6 pd_i / b_ih_i ^ 2 $ $

悬臂各部分的弯曲应力不应超过最大允许应力,$ \ sigma_{马克斯}$.因此,我们最终可以陈述五个弯曲应力约束(一个用于悬臂的每一步)

$ $ \压裂{6 pl} {b_5h_5 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (2 l)} {b_4h_4 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p l (3)} {b_3h_3 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (4 l)} {b_2h_2 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (5 l)} {b_1h_1 ^ 2} \ leq \ sigma_{马克斯}$ $

设计约束:2 -端偏转

悬臂的末端挠度可以用Castigliano第二定理来计算,该定理指出

$$\delta = \frac{\partial U}{\partial P}$$

在哪里\三角洲美元是梁的挠度,你美元是由于外力储存在梁中的能量,$ P $

储存在悬臂梁中的能量由

$$U = \int_0^L \!M^2/2EI \, \mathrm{d} x$$

在哪里M美元施加力的时刻是x美元

考虑到M = Px美元对于悬臂梁,我们可以把上面的方程写成

P^2/2E \int_0^l \![(x + 4 l) ^ 2 / I_1 \ & # xA;+ (x + 3 l) ^ 2 / I_2 \ & # xA;+ l (x + 2) ^ 2 / I_3 \ & # xA;+ (x + l) ^ 2 / I_4 \ & # xA;+ x^2/I_5]\, \mathrm{d} x$$

在哪里I_n美元面积是转动惯量吗n美元-第一部分悬臂。对积分求值得到以下表达式你美元

$ $ U = (P ^ 2/2) (l ^ 3/3E) (61 / I_1 + 37 / I_2 + 19 / I_3 + 7 / I_4 + 1 / I_5) $ $

应用Castigliano定理,给出了梁的末端挠度

$ $ \δ= Pl ^ 3/3E (61 / I_1 + 37 / I_2 + 19 / I_3 + 7 / I_4 + 1 / I_5) $ $

现在,悬臂的末端挠度,\三角洲美元,应小于最大允许挠度,$ \ delta_{马克斯}$,得到以下约束条件。

$ $ Pl ^ 3/3E (61 / I_1 + 37 / I_2 + 19 / I_3 + 7 / I_4 + 1 / I_5) \ leq& # xA; \ delta_{马克斯}$ $

设计约束:3 -长宽比

对于悬臂的每一步,长宽比不得超过允许的最大长宽比,美元现代{马克斯}$.也就是说,

$ h_i / b_i \ leq现代{马克斯}$$i = 1,…, 5美元

说明优化问题

我们现在能够给出给定的约束条件,找出阶梯悬臂梁的最优参数的问题。

x_1 = b_1美元x_2 = h_1美元x_3 = b_2美元x_4 = h_2美元x_5 = b_3美元x_6 = h_3美元x_7 = b_4美元x_8 = h_4美元x_9 = b_5美元而且美元间{10}= h_5 $

最小化:

$ $ V = l (x_1x_2 + x_3x_4 + x_5x_6 + x_7x_8 + x_9x_ {10}) $ $

主题:

$ $ \压裂{6 pl} {x_9x_ {10} ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (2 l)} {x_7x_8 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p l (3)} {x_5x_6 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (4 l)} {x_3x_4 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{6 p (5 l)} {x_1x_2 ^ 2} \ leq \ sigma_{马克斯}$ $

$ $ \压裂{Pl ^ 3} {E}(\压裂{244}{x_1x_2 ^ 3} + \压裂{148}{x_3x_4 ^ 3} + & # xA; \压裂{76}{x_5x_6 ^ 3} + \压裂{28}{x_7x_8 ^ 3} + & # xA; \压裂{4}{x_9x_ {10} ^ 3}) \ leq \ delta_{马克斯}$ $

$ $ x_2 / x_1 \ leq 20 $ $ $ $ x_4 / x_3 \ leq 20 $ $ $ $ x_6 / x_5 \ leq 20 $ $ & # xA; $ $ x_8 / x_7 \ leq 20 $ $ $ $间{10}/ x_9 \ leq 20 $ $

梁的第一步只能加工到最近的厘米。也就是说,x_1美元而且x_2美元必须是整数。其余的变量是连续的。变量的边界如下:-

$$1 \leq x_1 \leq 5$$

$$30 \leq x_2 \leq 65$$

$$2.4 \leq x_3, x_5 \leq 3.1$$

$$45 \leq x_4, x_6 \leq 60$$

$$1 \leq x_7, x_9 \leq 5$$

$30 \leq x_8, x_{10} \leq 65$

该问题的设计参数

对于我们在本例中要解决的问题,梁必须支撑的端荷载为$ p = 50000 n $

梁的长度和最大端挠度为:

  • 梁总长度,L = 500 cm$

  • 梁的单独截面,$l = 100 cm$

  • 最大梁端挠度,$\delta_{max} = 2.7 cm$

梁每一步的最大允许应力,$\sigma_{max} = 14000 N/cm^2$

梁每一步的杨氏模量,$E = 2\times10^{7} N/cm^2$

求解混合整数优化问题

我们现在解决了说明优化问题

定义适应度和约束函数

检查MATLAB®文件cantileverVolume.m而且cantileverConstraints.m看看适应度和约束函数是如何实现的。

关于线性约束的注意事项:当线性约束指定为遗传算法,通常通过一个bAeq而且说真的输入。在这种情况下,我们通过非线性约束函数来指定它们。这是因为在本例后面,一些变量将变成离散的。当问题中存在离散变量时,在非线性约束函数中指定线性约束要容易得多。另一种方法是修改线性约束矩阵以在变换后的变量空间中工作,这不是简单的,也许是不可能的。同样,在混合整数中遗传算法在求解器中,线性约束与非线性约束的处理没有任何区别,无论它们是如何指定的。

设置范围

创建包含下界()和上限约束(乌兰巴托).

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),并继续进行,直到其最佳成员的变化非常小(小FunctionTolerance)。我们还指定了一个plot函数来监视惩罚函数的值遗传算法的进展。

注意,这里有一组受限的遗传算法在解决混合整数问题时可用的选项-有关更多细节,请参阅全局优化工具箱用户指南。

选择= optimoptions (@ga,...“PopulationSize”, 150,...“MaxGenerations”, 200,...“EliteCount”10...“FunctionTolerance”1 e-8...“PlotFcn”, @gaplotbestf);

调用遗传算法解决问题

我们现在可以叫遗传算法解决问题。在问题陈述中x_1美元而且x_2美元是整数变量。我们通过传递索引向量来指定它(1 2)遗传算法在非线性约束输入之后,在选项输入之前。为了再现性,我们还在这里设置了随机数生成器。

rng (0,“旋风”);[xb, fb, exitflag] = ga (@cantileverVolume 10 , [], [], [], [],...lb, ub, @cantileverConstraints, [1 2], opts);
优化终止:超过最大代数。

分析结果

如果一个问题有整数约束,遗传算法哈贝马斯在内部。特别地,问题中的适应度函数被一个处理约束的惩罚函数所取代。对于可行的总体成员,惩罚函数与适应度函数相同。

返回的解遗传算法如下显示。注意,最靠近支撑的部分被限制为宽度(x_1美元)和身高(x_2美元),它是一个整数值,并且该约束已被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

我们也可以问遗传算法返回光束的最佳体积。

流(ga = %g\n'返回的cost函数、fb);
ga返回的代价函数= 63408.9

添加离散非整数变量约束

工程师们现在被告知,悬臂的第二步和第三步的宽度和高度只能从标准集合中选择。在本节中,我们将展示如何将此约束添加到优化问题中。注意,添加了这个约束后,这个问题与在[1]中解决的问题相同。

首先,我们说明将添加到上述优化的额外约束

  • 梁的第二步和第三步的宽度必须从以下集合中选择:- [2.4,2.6,2.8,3.1]cm

  • 梁的第二步和第三步的高度必须从以下集合中选择:- [45,50,55,60]cm

要解决这个问题,我们需要能够指定变量x_3美元x_4美元x_5美元而且x_6美元离散变量。要指定一个组件x_j美元从集合中取离散的值$ S = {v_1, \ ldots v_k} $、优化与x_j美元取从1到的值的整数变量k美元,并使用$ S (x_j)美元作为离散值。指定范围(1到k美元),设1为下界k美元作为上界。

首先,我们变换离散变量的边界。每个集合有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];

的转换(整数)版本x_3美元x_4美元x_5美元而且x_6美元现在将传递给适应度和约束函数,当遗传算法解算器。为了正确计算这些函数,x_3美元x_4美元x_5美元而且x_6美元需要在这些函数中转换为给定离散集的一个成员。要了解这是如何实现的,请检查MATLAB文件cantileverVolumeWithDisc.mcantileverConstraintsWithDisc.m而且cantileverMapVariables.m

现在我们可以调用遗传算法解决离散变量问题。在这种情况下x_1美元,…, x_6 $都是整数。这意味着我们要传递索引向量1:6遗传算法来定义整数变量。

rng (0,“旋风”);[xbestDisc, fbestDisc, exitflagDisc] = ga(@cantileverVolumeWithDisc,...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.0000 2.2430列8 ~ 10 44.8603 1.8279 36.5593

和前面一样,解返回遗传算法遵守约束条件x_1美元而且x_2美元都是整数。我们也可以看到x_3美元x_5美元从[2.4,2.6,2.8,3.1]cm和x_4美元x_6美元从[45,50,55,60]cm中选择。

回想一下,我们在变量上添加了额外的约束x (3)x (4)x (5)而且x (6).正如预期的那样,当对这些变量有额外的离散约束时,最优解具有更高的最小体积。请进一步注意,[1]中报告的解决方案的最小体积为厘米^ 3 64558美元我们找到了一个近似于[1]中报告的解。

流(ga = %g\n'返回的cost函数, fbestDisc);
ga返回的代价函数= 64795

总结

这个例子说明了如何使用遗传算法求解器,遗传算法,求解具有整数约束的有约束非线性优化问题。该示例还展示了如何处理在问题表述中具有离散变量的问题。

参考文献

Thanedar, P. B.和G. N. Vanderplaats。结构设计中的离散变量优化研究综述结构工程学报,1995,(3),pp. 301-306。

相关的话题

Baidu
map