这种形式的模型实际上被称为双线性优化问题。线性化双线性项的典型方法是通过称为McCormick包络线的东西。
考虑变量x和y,您希望在最大化问题的目标函数中使用x*y
。如果我们假设x和y受到xL <= x <= xU
和yL <= y <= yU
的限制,则我们可以用以下约束条件(您可以在此处查看推导here)替换x*y
为数量的上限w
:
w <= xU*y + x*yL - xU*yL
w <= x*yU + xL*y - xL*yU
xL <= x <= xU
yL <= y <= yL
请注意,这些约束条件在决策变量中都是线性的。 在 McCormick 包络中有相应的下界,但由于你正在最大化,它们在你的情况下不重要。
如果你想对 x*y 有更严格的限制,可以将其中一个变量(我会在这里使用 x)的区间分成区间 [xL1, xU1]、[xL2, xU2]、......、[xLn, xUn],引入辅助连续变量 {x1,x2,......,xn} 和 {w1,w2,......,wn},以及辅助二进制变量 {z1,z2,......,zn},它们将指示选择了哪个 x 值范围。 上述约束条件可以被替换为(我将展示索引 1 的情况,但你需要这些约束条件来适用于所有 n 索引):
w1 <= xU1*y + x1*yL - xU1*yL*z1
w1 <= x1*yU + xL1*y - xL1*yU*z1
xL*z1 <= x1 <= xU*z1
基本上,当z1=0时(即未选择该范围的部分),您将拥有x1=0和w1<=0,而如果z1=1(即选择了该范围的部分),则将具有正常的McCormick包络。
最后一步是生成特定范围版本的x和w变量。这可以通过以下方式完成:
x = x1 + x2 + ... + xn
w = w1 + w2 + ... + wn
你将n设得越大,双线性项的估计就会越准确。但是,n值过大会影响解决模型的可行性。
最后需要注意的是,你指出其中一个变量是无界的,但McCormick包络需要对两个变量都设定边界。你应该设定边界、求解,如果最优值在边界上,则应该使用不同的边界重新求解。
w = x*y*z
,该怎么办? - Alex McLeanw = x*y
和k = w*z
,然后k
就是你的近似值。 - josliberxL
和yL
)吗?或者当下限为零时,我们应该使用一个非常小的数字代替它们? - thaynexL=0
和yL=0
,然后按照我提出的步骤进行即可。 - josliber