微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OR-tools CP-SAT 求解器是否支持 x.Min() 和 x.Max() 等“反射”方法?

如何解决OR-tools CP-SAT 求解器是否支持 x.Min() 和 x.Max() 等“反射”方法?

我正在将旧的(从 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
  # ... 
 

然后可以使用变量的这些下限/上限来实现其他约束。 (这是一个使用 cumulativeMin 方法实现 Max 约束的 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 约束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。