我有一个程序,我想要最小化两个变量的绝对差(一个绝对误差函数)。比如说:
e_abs(x, y) = |Ax - By|; where e_abs(x, y) is my objective function that I want to minimize.
该函数受以下限制条件的约束:
x and y are integers;
x >= 0; y >= 0
x + y = C, where C is an arbitrary constant (also C >= 0)
我正在使用 mip 库(https://www.python-mip.com/),在其中定义了我的目标函数和约束条件。
问题在于 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
在解决了两个单独的问题后,比较两个结果,得到
min(abs(e))
。这应该可以工作,但是 mip 似乎不理解错误可以是负数。如下所示:
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
程序再次返回OptimizationStatus.INFEASIBLE
,显然组合X(0, 0) = 1 and X(1, 0) = 0
可以解决问题。
这是我的模型公式的问题吗?还是mip库的行为有问题?