Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python约束将此约束添加到问题中_Python_Arrays_Numpy_Constraint Programming - Fatal编程技术网

如何使用python约束将此约束添加到问题中

如何使用python约束将此约束添加到问题中,python,arrays,numpy,constraint-programming,Python,Arrays,Numpy,Constraint Programming,我试图使用python约束来解决一个组合问题,但我似乎无法将我需要的约束添加到问题中。我的问题是,我有9个必须放置的方形瓷砖,每个瓷砖可以旋转到4个位置中的一个,我已经将瓷砖编码为向量,并且需要特定的元素对添加到零 使用具有两个平铺的示例: piece1=np.数组([-1,-3,4,2]) piece_2=np.array([-2,-1,3,2]) 每个向量可以滚动形成一组4个向量: piece\u 1\u set=[np.滚动(piece\u 1,i)以在范围(4)内滚动i] piece_2

我试图使用python约束来解决一个组合问题,但我似乎无法将我需要的约束添加到问题中。我的问题是,我有9个必须放置的方形瓷砖,每个瓷砖可以旋转到4个位置中的一个,我已经将瓷砖编码为向量,并且需要特定的元素对添加到零

使用具有两个平铺的示例:

piece1=np.数组([-1,-3,4,2])

piece_2=np.array([-2,-1,3,2])

每个向量可以滚动形成一组4个向量:

piece\u 1\u set=[np.滚动(piece\u 1,i)以在范围(4)内滚动i]

piece_2_set=[np.滚动(piece_2,i)范围(4)内的i]

我已将它们添加到问题中:

问题。添加变量(“1”,件套)

问题。添加变量(“2”,件套)

我想做的是从每个集合中找到一个向量,这样第一个向量的第二个元素和第二个向量的第四个元素的和为0

我尝试过各种版本的:

problem.addConstraint(λ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:包含多个元素的数组的真值不明确。使用a.any()或a.all()


是否有人知道如何表达此约束,以便我添加它们以获得问题的解决方案?

问题似乎只是您试图将numpy数组与python约束库结合使用,而不是使用内置的python列表。您需要将它们转换回下面的解决方案

import numpy as np
from constraint import *

problem = Problem()

piece_1 = np.array([-1,-3, 4, 2])
piece_2 = np.array([-2, -1, 3, 2])
piece_1_set = [list(np.roll(piece_1, i)) for i in range(4)]
piece_2_set = [list(np.roll(piece_2, i)) for i in range(4)]

problem.addVariable("1", piece_1_set)
problem.addVariable("2", piece_2_set)

problem.addConstraint(lambda i, j: i[0] == j[0], ("1", "2"))
problem.getSolutions()


太好了,谢谢你,我还没考虑呢!