OR-tools CP-SAT 求解器是否支持 "reflection" 方法,例如 x.Min() 和 x.Max()?
Does OR-tools CP-SAT solver supports "reflection" methods such as x.Min() and x.Max()?
我正在将我的旧(从 2010 年开始)OR-tools CP 求解器模型移植到 CP-SAT 求解器(在 Python3 中)。这些系统之间存在不少差异,但大多数都非常容易移植到 CP-SAT 求解器。
但是,我在 CP-SAT 求解器文档中没有找到的一件事是旧 CP 求解器支持的“反射”方法,例如获取决策变量的 lower/upper 边界。例如
# 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
# ...
然后可以使用这些 lower/upper 变量边界来实现其他约束。 (这是一个使用 Min
和 Max
方法实现 cumulative
约束的 CP 求解器:http://hakank.org/or_tools/furniture_moving.py )
CP-SAT求解器是否支持这些反射方法?
您可以通过基础变量Proto访问域。
x.Proto().domain
第一个值是 min
,最后一个值是 max
。
x_lb = x.Proto().domain[0]
x_ub = x.Proto().domain[-1]
PS:也许你可以在这里使用 AddCumulative 约束。
我正在将我的旧(从 2010 年开始)OR-tools CP 求解器模型移植到 CP-SAT 求解器(在 Python3 中)。这些系统之间存在不少差异,但大多数都非常容易移植到 CP-SAT 求解器。
但是,我在 CP-SAT 求解器文档中没有找到的一件事是旧 CP 求解器支持的“反射”方法,例如获取决策变量的 lower/upper 边界。例如
# 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
# ...
然后可以使用这些 lower/upper 变量边界来实现其他约束。 (这是一个使用 Min
和 Max
方法实现 cumulative
约束的 CP 求解器:http://hakank.org/or_tools/furniture_moving.py )
CP-SAT求解器是否支持这些反射方法?
您可以通过基础变量Proto访问域。
x.Proto().domain
第一个值是 min
,最后一个值是 max
。
x_lb = x.Proto().domain[0]
x_ub = x.Proto().domain[-1]
PS:也许你可以在这里使用 AddCumulative 约束。