最小化压力容器的总成本但答案不满足约束

时间:2021-04-29 08:48:44

标签: matlab optimization constraints minimization

我编写了一个算法来解决压力容器设计问题。目标是最小化总成本,包括材料成本、成型成本和焊接成本。

该解决方案有四个值 x1x2x3x4,其中:
x1 是壳的厚度
x2 是头部的厚度
x3 是内半径 (R)
x4 是容器圆柱截面的长度。

这个问题的一个限制是,x1x2 应该是 0.0625 的整数倍。尽管获得了优异的结果,但我的算法不满足此约束。我在我的 MATLAB 代码中提供了目标函数和约束函数。如何在我的最终答案中满足这些约束?

最小化问题可以表述为:

function y = PrPf(x)
y = 0.6224*x(1)*x(3)*x(4)+1.7781*x(2)*x(3)^2+3.1661*x(1)^2*x(4)+19.84*x(1)^2*x(3);

MATLAB 中的约束函数是:

function [g,geq]=constraint(x)
%Inequality constraints 
g(1)=-x(1)+0.0193*x(3);
g(2)=-x(2)+0.00954*x(3);
g(3)=-pi*x(3)^2*x(4)-(4/3)*pi*x(3)^3+1296000;
g(4)=x(4)-240;
% If no equality constraint at all, put geq=[] as follows
geq=[];

哪里:

0 <= x1 <= 99
0 <= x2 <= 99
10 <= x3 <= 200 
10 <= x4 <= 200 `

我的算法得到的结果是:

x1 = 0.8221372
x2 = 0.4063913
x3 = 42.59778
x4 = 170.5458

如您所见,x1x2 的值不是 0.0625 的倍数。查了这么多文章,发现很多方法都拿到了值:

x1 = 0.812500
x2 = 0.437500

0.0625 的倍数。需要做些什么来强制我的算法满足这些约束。

0 个答案:

没有答案
相关问题