我是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中执行此操作。
感谢您的帮助:)。
答案 0 :(得分:0)
不幸的是,在原始CP解算器中未实现添加新约束。 并且不推荐使用此求解器,而推荐使用CP-SAT求解器。 新的求解器不支持添加新的约束,但是由于布尔约束和强制文字的支持,它具有更具表现力的建模语言。
请参阅:
无论如何,这不能解决您的问题基础。您不能在CP解算器(原始或CP-SAT)中嵌入任何任意代码。
一种方法是预先计算所有可能的分配,并将其添加到AllowedAssignment约束中。