【发布时间】:2020-11-15 13:38:02
【问题描述】:
我正在尝试使用 python-constraint 来解决组合问题,但我似乎无法将我需要的约束添加到问题中。我的问题是我必须放置 9 个方形图块,并且每个图块都可以旋转到 4 个位置之一,我已将图块编码为矢量,并且需要特定的元素对添加到零。
使用带有两个图块的示例:
piece_1 = np.array([-1,-3, 4, 2])
piece_2 = np.array([-2, -1, 3, 2])
每个向量可以滚动形成一组 4 个向量:
piece_1_set = [np.roll(piece_1, i) for i in range(4)]
piece_2_set = [np.roll(piece_2, i) for i in range(4)]
我已将它们添加到问题中:
problem.addVariable("1", piece_1_set)
problem.addVariable("2", piece_2_set)
我想做的是从每个集合中找到一个向量,使得第一个向量的第二个元素和第二个向量的第四个元素总和为 0。
我尝试过各种版本的:
problem.addConstraint(lambda i,j: i[1] + j[3] == 0, ("1", "2"))
problem.addConstraint(lambda i,j: np.any(i[1]) + np.any(j[3]) == 0, ("1", "2"))
但我总是返回以下内容:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有谁知道如何表达这个约束,以便我可以添加它们以获得问题的解决方案?
【问题讨论】:
标签: python arrays numpy constraint-programming