这是一个简单的优化问题:
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。
我知道这只是逼近最佳结果,但在这种情况下,它应该找到真正的最佳值。