在 google 的 OR-Tools CP-SAT 中使用 python 创建自定义约束

问题描述 投票:0回答:1

我刚刚开始学习约束编程,所以如果我的问题可能非常琐碎,请原谅。

主要动机是优化我已经通过暴力解决的问题。我在 python 或工具模块中使用 CP-SAT 求解器。

这是我面临的问题的描述-(请注意-CP变量是与CP模块相关的变量)

我有“X”个 CP 变量。我想要对这些变量施加的约束与这些 X 变量之间的差异数量有关。例如,我想将所有差异存储在单独的数组中 - abs(X1-X2) 、 abs(X3-X4) 、 .. (其中 X1,X2,... 是我最初定义的 CP 变量)然后执行一些计算(例如计数)来施加我的约束。

我意识到这是根本不可能的,因为在数组创建中涉及 CP_variables 和普通的 python 变量显然是不允许的。

我到底应该如何使用约束编程来解决这个问题?我是否别无选择,只能将我的约束浓缩为数学?

如果这个问题的框架不好,我很抱歉,但我正在寻找关于如何解决这个问题的见解。文档过于僵化,有时让我无法理解,而且网上没有太多关于这方面的资源,这无济于事。

提前致谢。

python optimization or-tools constraint-programming operations-research
1个回答
0
投票

您需要创建中间变量。

  x = model.NewIntVar(0, 10, 'x')
  y = model.NewIntVar(0, 10, 'y')
  diff = model.NewIntVar(-10, 10, 'diff')
  model.Add(diff = x - y)
  abs_diff = model.NewIntVar(0, 10, 'abs_diff')
  model.AddAbsEquality(abs_diff, diff)
© www.soinside.com 2019 - 2024. All rights reserved.