是否有一个docplex函数来获取多个变量的解以用于延迟切割?

问题描述

我基于here用python(docplex)编写了一个优化问题,但是我的切入点是sum(X) <= N + M*sum(Y,Z)X,Y and Z是决策变量。我不知道如何将X,Y,Z解决方传递给 {{11}} self.get_cpx_unsatisfied_cts([ct], solution 。 当我使用,tolerance=1e-6)时,出现以下错误self.get_values() 有没有人可以帮助您?

解决方法

在示例[here](Implementing TSP with Lazy constraint callback)中,回调通过混合类MosdelCallbackMixin连接到DOcplex。 此类具有make_complete_solution方法,该方法从回调内部返回一个解决方案对象(请参阅docplex.mp.SolveSolution文档)。

第二步,get_cpx_unsatisfied_cts从给定的约束列表中返回未满足的约束列表。在您的情况下,如果只需要检查一个约束,则使用is_satisfied方法来约束比较简单,这需要一种解决方案,并且 公差(默认值为1e-6,即:

   if not myct.is_satisfied(sol,tolerance):
       print(f" constraint {myct} is violated")

总结:

  • 在调用回调时使用make_complete_solution生成解决方案对象
  • 使用ct.is_satisfied检查是否满意。