【问题标题】:Infeasible solution with redundant constraints - PuLP and COIN-OR具有冗余约束的不可行解决方案 - PuLP 和 COIN-OR
【发布时间】:2016-12-19 19:22:24
【问题描述】:

我在 python 中使用PuLPCBC 处理LP 模型。该模型有很多约束,当然其中许多是多余的。我将展示一个例子。

#import libraries
from pulp import LpVariable, LpProblem, LpMaximize, lpSum, LpConstraint, LpStatus, value

prob = LpProblem("test_model", LpMaximize)
set_pt=[i for i in range(100)] #set of var
var = LpVariable.dicts("var",set_pt,lowBound=0,cat='Continuous')

# The objective function is added to 'prob' first
prob += lpSum([var[i] for i in set_pt]), "f(v)"

#constraits
for i in set_pt:
     prob += LpConstraint(var[i] <= 300000), "max margin "+str(i) 
     prob += LpConstraint(var[i] <= 30000000000), "ma2 margin "+str(i) 

#solve
prob.writeLP("price_mod2.lp")
print 'solver begin'
prob.solve()

# The status of the solution is printed to the screen
print "Status:", LpStatus[prob.status]

这样的结果是:

solver begin
Status: Infeasible

当然,在这个例子中,两个约束显然都是多余的,而且在我解决的问题中更难看出约束是多余的。

我不知道问题是否出在求解器 (CBC),所以我可以改用 CPLEX 来解决冗余约束的问题,或者问题是 PuLP,我需要使用另一个库。或者,也许我需要对问题进行建模以使其成为冗余证明。

任何指导? 谢谢!

编辑:我尝试使用 CBC 使用开放式求解器(在 excel 中)并且它有效,所以我认为这一定是 PuLP 中的实现有问题,或者我正在做某事错误或者可能没有办法在PuLP中添加冗余约束

【问题讨论】:

    标签: python constraints linear-programming pulp coin-or-cbc


    【解决方案1】:

    我没怎么用纸浆,所以我不能在这里解释内部原理(这会使你的案例失败),但是你以错误的方式使用纸浆的约束机制。 p>

    你的方法(失败):

    for i in set_pt:
        prob += LpConstraint(var[i] <= 300000), "max margin "+str(i) 
        prob += LpConstraint(var[i] <= 30000000000), "ma2 margin "+str(i) 
    

    可行的替代方案 A(使用重载运算符)

    for i in set_pt:
        prob += var[i] <= 300000, "max margin "+str(i)
        prob += var[i] <= 30000000000, "ma2 margin "+str(i)
    

    可行的替代方案 B(明确使用 LpConstraint;需要导入)

    for i in set_pt:
        prob += LpConstraint(var[i], LpConstraintLE, 300000), "max margin "+str(i)
        prob += LpConstraint(var[i], LpConstraintLE, 30000000000), "ma2 margin "+str(i)
    

    后者更像您最初的方法。但是您的用法看起来不像函数所期望的那样(请参阅docs

    【讨论】:

    • 谢谢 sascha!,它成功了!。我将再次阅读文档。
    • 不客气。虽然在非常繁重的数值问题模型中可能存在差异,但不要太害怕冗余约束。这些不应该破坏任何东西(在任何求解器中)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多