Cplex在二次规划中不满足下限(使用Python API)

Cplex在二次规划中不满足下限(使用Python API),python,cplex,quadratic-programming,Python,Cplex,Quadratic Programming,我想解决一个有k个未知量的二次规划问题。问题是可分离的,即定义问题的Q矩阵中所有非对角线均为零。还有一些线性约束 我发现Cplex给出的解不满足零下限。我无法找出我将问题输入生成此类解决方案的Cplex的方式有何问题。注意,minv是负数,而我希望v中的所有值都在0和1之间 下面是我的代码 from __future__ import division import cplex from cplex.exceptions import CplexError k = 29 prob = cpl

我想解决一个有k个未知量的二次规划问题。问题是可分离的,即定义问题的Q矩阵中所有非对角线均为零。还有一些线性约束

我发现Cplex给出的解不满足零下限。我无法找出我将问题输入生成此类解决方案的Cplex的方式有何问题。注意,minv是负数,而我希望v中的所有值都在0和1之间

下面是我的代码

from __future__ import division
import cplex
from cplex.exceptions import CplexError

k = 29

prob = cplex.Cplex()
prob.objective.set_sense(prob.objective.sense.minimize)
separable = [1.0] * k
prob.objective.set_quadratic(separable)
my_ub = [1.0] * k
my_lb = [0.0] * k
prob.variables.add(ub=my_ub, lb=my_lb)

my_rhs = [10.1, 3.1, 3.1, 3.1, 3.1, 4.1, 3.1, 3.1, 3.1, 4.1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
my_sense = 'EEEEEEEEEEEEEEEEEEEE'
prob.linear_constraints.add(rhs=my_rhs, senses=my_sense)
constraints_rowColVal = [(0, 9, 3.1), (0, 11, 3.1), (0, 13, 3.1), (0, 15, 3.1), (0, 17, 4.1), (0, 20, 3.1), (0, 22, 3.1), (0, 24, 3.1), (0, 26, 4.1), (1, 0, 10.1), (1, 14, 3.1), (1, 25, 3.1), (1, 27, 4.1), (2, 1, 10.1), (2, 10, 3.1), (2, 21, 3.1), (2, 28, 4.1), (3, 2, 10.1), (3, 12, 3.1), (4, 3, 10.1), (5, 4, 10.1), (5, 16, 3.1), (6, 5, 10.1), (6, 18, 4.1), (7, 6, 10.1), (7, 19, 4.1), (8, 7, 10.1), (8, 23, 3.1), (9, 8, 10.1), (10, 0, 1), (10, 1, 1), (10, 2, 1), (10, 3, 1), (10, 4, 1), (10, 5, 1), (10, 6, 1), (10, 7, 1), (10, 8, 1), (11, 9, 1), (11, 10, 1), (12, 11, 1), (12, 12, 1), (13, 13, 1), (13, 14, 1), (14, 15, 1), (14, 16, 1), (15, 17, 1), (15, 18, 1), (15, 19, 1), (16, 20, 1), (16, 21, 1), (17, 22, 1), (17, 23, 1), (18, 24, 1), (18, 25, 1), (19, 26, 1), (19, 27, 1), (19, 28, 1)]
prob.linear_constraints.set_coefficients(constraints_rowColVal)

prob.solve()
v = prob.solution.get_values()
print min(v)

问题是你的模型不可行。在调用
solve
方法之后,尝试添加以下代码行:

print("Solution status: {0} ({1})".format(
    prob.solution.get_status_string(),
    prob.solution.get_status()
))
您应该看到以下内容:

Solution status: infeasible (3)
解决问题后,应始终检查解决方案状态。否则,正如您所看到的,解决方案结果将毫无意义

您可以使用或交互中的来了解问题可能在哪里