【问题标题】:Cplex Error: Adding trivial infeasible linear constraintCplex 错误:添加微不足道的不可行线性约束
【发布时间】:2020-03-16 15:14:51
【问题描述】:

我想用 cplex python 求解整数编程模型。我有这个模型:

a 和 h 是具有 0 和 1 的矩阵。 p 是一组数字。 这是我的这个模型的 cplex 代码的一部分:

p=[i for i in range (len(h))]
x=mdl.binary_var_dict(p,name='x')

#objective
mdl.minimize(0)

#constraints
#1
mdl.add_constraints(mdl.sum(h[i][k]*x[i] for  i  in p)==4  for k in T)

#2    
mdl.add_constraints(mdl.sum(a[i][k]*x[i] for i in p)==4  for k in T)

mdl.print_information()
Solution = mdl.solve(log_output=False)
mdl.get_solve_status()
print(Solution)

当我运行程序时出现此错误:

Error: Adding trivial infeasible linear constraint: 0 == 4, rank: 1
Error: Adding trivial infeasible linear constraint: 0 == 4, rank: 1
Error: Adding trivial infeasible linear constraint: 0 == 4, rank: 23
Error: Adding trivial infeasible linear constraint: 0 == 4, rank: 23

'h' 是一个 600*22 的矩阵,'a' 是 h 的逆矩阵(如果 h 中有 1(或 0),则 a 中为 0(或 1))。 h的样本:


 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0],
 [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0]]

我不明白问题出在哪里。

【问题讨论】:

    标签: python cplex integer-programming mixed-integer-programming docplex


    【解决方案1】:

    错误消息告诉您会发生什么:您添加了一个非常不可行的约束,即显然不能满足。从错误消息看来,您添加了一些左侧为空的 == 4 约束。

    从您的代码看来,如果p 为空,就会发生这种情况。

    【讨论】:

    • 但是左边的参数和集合都不是空的。
    • 好吧,如果p 是空的,那么所有左侧都是空的。或者ah 中的引用值可能都是0?如果您需要进一步的帮助,您必须使用完整代码(一个最小示例)更新您的问题。
    • 好的。我编辑了帖子。
    • 在您的h 样本中,您可以看到有些列全为0。这将导致在左侧具有全 0 系数的约束。因此,在这些约束中,左侧为 0。您可以计算/打印min(max(h[i][k] for i in p) for k in T)。如果这是 0,那么您在 h 中有全 0 列。从该列构造的约束将触发上述警告。
    • 所以这与我没有得到任何可行解决方案的问题无关?
    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 2018-10-12
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多