使用Python cvxpy和Python_MIP()(CBC求解器)进行不可行解决方案处理



在一个使用cvxpy和Python MIP(CBC(作为求解器的MIP工具中,我正在寻找一种方法来生成不可行的解决方案的细节,用于日志记录。有人知道这是否存在吗?我读到CPLEX有这种能力(功能(来指出特定的违反约束的行为。

在python docplex中,您可以获得放松和冲突。

参见示例https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoorelaxationandconflict.py

所以在你的情况下,你可以:

  • 在python docplex中打开您的模型
  • 保留cvxpy,导出mps文件,然后在docplex中导入mps文件(带有model.import_model(,然后在docplex中运行relation

这里的模型:

from docplex.mp.model import Model
from docplex.mp.relaxer import Relaxer
from docplex.mp.conflict_refiner import ConflictRefiner
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.add_constraint(nbbus40 + nbbus30 <= 7, 'maxTotalBuses')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
mdl.report()
print(f"* solve status is: '{mdl.solve_details.status}'") #infeasible model
print()
print("------- starting relaxation")
print()
rx = Relaxer()
rx.relax(mdl)
print ("number_of_relaxations= " + str(rx.number_of_relaxations))
rx.print_information()
mdl.report()
print(f"* status after relaxation is: {mdl.solve_details.status}")
#print(mdl.solution)
print()
print("------ starting conflict refiner")
print()
cr=ConflictRefiner()
conflicts=cr.refine_conflict(mdl)
conflicts.display()

最新更新