是否有一个 docplex 函数可以获取多个变量的解,以便在延迟切割中使用?

Is there a docplex function for getting solution of more than one variables for using in lazy cut?

我根据 在 python (docplex) 中编写了一个优化问题,但我的剪辑是类似的 sum(X) <= N + M*sum(Y, Z)X, Y and Z 是决策变量。我不知道如何将 X, Y, Zsolution 传递给 self.get_cpx_unsatisfied_cts([ct], solution, tolerance=1e-6)。 当我使用 self.get_values() 时,出现此错误: Error: Internal error in CPLEX solve: AttributeError: 'list' object has no attribute '_get_var_value' 有没有人可以帮忙?

在示例 [此处] () 中,回调通过混合器 class MosdelCallbackMixin 连接到 DOcplex。 此 class 有一个 make_complete_solution 方法,该方法 returns 一个来自回调内部的解决方案对象(参见 docplex.mp.SolveSolution 的文档)。

在第二步中 get_cpx_unsatisfied_cts returns 来自给定约束列表的未满足约束列表。在您的情况下,如果您只需要检查一个约束,那么使用 is_satisfied 约束方法会更简单,它需要一个解决方案并且 公差(默认为 1e-6,即:

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

总结:

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