如何在约束规划中实现细化冲突

How to implement refining conflict in constraint programming

我使用 Docplex 和 python 3.7 来实现约束编程。当它不可行时,我如何继续列出那些对冲突根源的约束?

mdl.export_as_cpo(out="/home/..../MCP3.lp")
msol = mdl.solve(FailLimit=700000, TimeLimit=1600)
DInfos= msol.get_solver_infos()
mconflict=msol.CpoRefineConflictResult()
mconflict.get_all_member_constraints()

错误信息: m冲突=msol.CpoRefineConflictResult() AttributeError: 'CpoSolveResult' 对象没有属性 'CpoRefineConflictResult'

solvereturns一个SolveResult,而CpoRefineConflictResultdocplex.cp.solution中的一个class。所以,错误消息是正确的:a SolveResult 没有属性 CpoRefineConflictResult。您会期望 CpoRefineConflictResult 作为冲突优化器的结果。

您可能应该多阅读文档 http://ibmdecisionoptimization.github.io/docplex-doc/cp/docplex.cp.solution.py.html

您可以在 CpoSolver 对象上调用 .refine_conflict() 方法来获取 CpoRefineConflictResult,如此处所述 http://ibmdecisionoptimization.github.io/docplex-doc/cp/docplex.cp.solver.solver.py.html#detailed-description

如果您需要更具体的问题解决方案,也许您可​​以提供一个最小的、可重现的示例。 https://whosebug.com/help/minimal-reproducible-example

我有补充:

from  docplex.cp.solver.solver import CpoSolver

之后,如果模型不可行,我添加了这些行:

mconfl= CpoSolver(model)
mconf = mconfl.refine_conflict()