我自己的约束谷歌或工具

时间:2017-11-06 21:02:49

标签: python constraint-programming or-tools

我是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中执行此操作。

感谢您的帮助:)。

1 个答案:

答案 0 :(得分:0)

不幸的是,在原始CP解算器中未实现添加新约束。 并且不推荐使用此求解器,而推荐使用CP-SAT求解器。 新的求解器不支持添加新的约束,但是由于布尔约束和强制文字的支持,它具有更具表现力的建模语言。

请参阅:

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

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