4

我是 CP 问题和 Python 中的 OR-Tools 的新手,我想做以下事情:

# declare variables
for i in range(I):
    for k in range(K):
        x[i,k]=solver.IntVar(0,N,"x %i %i " % (i,k))

#constraints
solver.Add(CustomFunction[(x[i,k])] == 1) # only consider the values of x[i,k] evaluated in CustomFunction is equal to 1

但我在评估时收到错误CustomFunction

IndexError:只有整数、切片 ( :)、省略号 ( ...)、numpy.newaxis ( None) 和整数或布尔数组是有效的索引

这是正确的,因为x它是 IntVar。

另一方面,我在https://developers.google.com/optimization/reference/constraint_solver/constraint_solver/Solver/中看到 我可以添加自定义约束,但我不知道如何在 Python 中执行此操作。

我感谢您的帮助 :)

4

1 回答 1

0

不幸的是,在原始 CP 求解器中未实现添加新约束。该求解器已弃用,取而代之的是 CP-SAT 求解器。新的求解器不支持添加新的约束,但由于支持布尔约束和强制文字,它具有更具表现力的建模语言。

看:

无论如何,这并不能解决您问题的基础。您不能在 CP 求解器(原始或 CP-SAT)中嵌入任何任意代码。

一种方法是预先计算所有可能的分配,并将其添加到 AllowedAssignment 约束中。

于 2019-03-23T10:32:22.030 回答