0

我正在将我的旧(从 2010 年)OR-tools CP 求解器模型移植到 CP-SAT 求解器(在 Python3 中)。这些系统之间有很多差异,但大多数都非常容易移植到 CP-SAT 求解器。

但是,我在 CP-SAT 求解器文档中没有找到的一件事是旧 CP 求解器支持的“反射”方法,例如获取决策变量的下限/上限。例如

  # Old CP solver code
  solver = pywrapcp.Solver("Name")
  x = solver.IntVar(0,10, "x") 

  # ....
  x_lb = x.Min()  # lower bound
  x_ub = x.Max()  # upper bound
  # ... 
 

然后可以使用变量的这些下限/上限来实现其他约束。(这是一个使用和方法实现cumulative约束的 CP 求解器:http: //hakank.org/or_tools/furniture_moving.pyMinMax

CP-SAT 求解器是否支持这些反射方法?

4

1 回答 1

2

您可以通过底层变量Proto访问域。

x.Proto().domain

第一个值是min,最后一个是max

x_lb = x.Proto().domain[0]
x_ub = x.Proto().domain[-1]

PS:也许你可以在这里使用AddCumulative约束。

于 2021-02-18T18:40:00.273 回答