提问人:MrKhonsu 提问时间:10/29/2023 最后编辑:Laurent PerronMrKhonsu 更新时间:10/29/2023 访问量:52
在 python 中在 google 的 OR-Tools CP-SAT 中创建自定义约束
Creating custom constraints in google's OR-Tools CP-SAT in python
问:
我刚刚开始学习约束编程,所以如果我的问题可能非常微不足道,请原谅我。
主要动机是优化我已经通过蛮力解决的问题。我在 python 或工具模块中使用 CP-SAT 求解器。
这是我面临的问题的描述 - (请注意 - CP 变量是与 CP 模块相关的变量)
我有“X”CP 变量。我想对这些变量施加的约束与这些 X 变量之间的差异数量有关。例如,我想存储所有差异 - abs(X1-X2) , abs(X3-X4), ..(其中 X1,X2,...是我最初定义的 CP 变量)在一个单独的数组中,然后执行一些计算(例如计数)来施加我的约束。
我已经意识到这根本不可能,因为在数组创建和普通 python 变量中涉及CP_variables显然是不允许的。
我究竟应该如何使用约束编程来解决这个问题?我别无选择,只能将我的约束条件浓缩到数学中吗?
如果这个问题的框架不好,我很抱歉,但我正在寻找有关如何解决这个问题的见解。文档对我来说太僵化了,有时我无法理解,而且网上没有很多这方面的资源,这无济于事。
提前致谢。
答:
2赞
Laurent Perron
10/29/2023
#1
您需要创建中间变量。
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)
上一个:确定线性程序是否是自对偶的?
下一个:匈牙利语算法步骤
评论