如何在python中使用绝对值进行整数优化?

如何在python中使用绝对值进行整数优化?,python,optimization,mixed-integer-programming,Python,Optimization,Mixed Integer Programming,我有一个程序,我想最小化两个变量的绝对差(绝对误差函数)。说: 该函数受以下约束: x and y are integers; x >= 0; y >= 0 x + y = C, where C is an arbitrary constant (also C >= 0) 我使用的是mip库(),在这里我定义了目标函数和约束 问题是mip没有“abs”方法。因此,我必须通过将主要问题分为两个优化子问题来克服这一点: e(x, y) = Ax - By Porblem 1:

我有一个程序,我想最小化两个变量的绝对差(绝对误差函数)。说:

该函数受以下约束:

x and y are integers;
x >= 0; y >= 0
x + y = C, where C is an arbitrary constant (also C >= 0)
我使用的是mip库(),在这里我定义了目标函数和约束

问题是mip没有“abs”方法。因此,我必须通过将主要问题分为两个优化子问题来克服这一点:

e(x, y) = Ax - By

Porblem 1: minimize e(x, y); subject to e(x, y) >= 0
Porblem 2: maximize e(x, y); subject to e(x, y) <= 0
同样,程序结果是
OptimizationStatus.invasible
,其中
X(0,0)=1和X(1,0)=0的组合显然解决了问题

这是我的模型的公式问题吗?或者这是mip库的不良行为?

您可以(也应该)重新格式化。因为要最小化函数的绝对值,所以可以在该变量上引入一个虚拟变量和两个约束,然后最小化虚拟变量以保持其线性。(ABS是一个非线性函数)

因此,引入
z
,以便:

z >= Ax - By


那么你的目标就是尽量减少发布你的代码。难道不是z>=Ax-By和z>=-(Ax-By)吗?是的!我把你的函数抄写得很糟糕。我会编辑答案。如果我有一个目标函数,它是绝对差和的结果呢?
constr(0): -1.0941176470588232 X(0, 0) +6.199999999999998 X(1, 0) - error = -0.0
constr(1): error <= -0.0
constr(2): X(0, 0) + X(1, 0) = 1.0

Obs.: consider X(0, 0) as x and X(1, 0) as y in our example
z >= Ax - By
z >= -(Ax - By)