CVXPY产生奇怪的结果

时间:2019-04-30 08:39:33

标签: cvxpy mixed-integer-programming

这是一个简单的优化问题:

import cvxpy as cp
import numpy as np

w = np.array([700, 700, 700, 700, 700, 700, 700, 700, 700, 700])
b = 7000
n = len(w)

# Define and solve the CVXPY problem.
x = cp.Variable(n, boolean=True)
prob = cp.Problem(cp.Minimize(w.T@x), [w.T@x >= b])
prob.solve()

# Print result.
print("\nThe optimal value is", prob.value)
print("A solution x is")
print(np.round(x.value))

我想将此作为ILP进行解决,因此得到{x,in {0,1} ^ n $中的$ x \的结果。很容易看到,这将使x = [1,1,1,1,1,1,1,1,1,1]成为最佳x,并且最佳值为7000,这确实是我得到的。但是,如果我将[1800, 1800]添加为w = [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 1800, 1800],则最佳值仍应约为7000(全部为700),但求解器会给出7100,并包括两个1800。

我知道这只是逼近最佳结果,但在这种情况下,它应该找到真正的最佳值。

0 个答案:

没有答案