Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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
OR工具和Python中的NoCycle约束_Python_Or Tools - Fatal编程技术网

OR工具和Python中的NoCycle约束

OR工具和Python中的NoCycle约束,python,or-tools,Python,Or Tools,我正在用Python中的或工具实现Knight Tour问题,我正在努力解决无循环约束。在C++中,存在 MakCyCullo树循环约束。 到目前为止,我已经完成了简化的代码(我从一些不完整的示例中复制了TreeNoCycle部分): 其中,执行时,最后一部分得到以下错误: python3.6/site-packages/ortools/constraint_-solver/pywrapcp.py“,行 337,在下一个解决方案中 return _pywrapcp.Solver_NextSolu

我正在用Python中的或工具实现Knight Tour问题,我正在努力解决无循环约束。在C++中,存在<代码> MakCyCullo树循环约束。

到目前为止,我已经完成了简化的代码(我从一些不完整的示例中复制了TreeNoCycle部分):

其中,执行时,最后一部分得到以下错误:

python3.6/site-packages/ortools/constraint_-solver/pywrapcp.py“,行 337,在下一个解决方案中 return _pywrapcp.Solver_NextSolution(self)SystemError:返回一个带有错误集的结果

我的代码的其余部分可以工作,也就是说,当我省略了带有
TreeNoCycle
约束的部分时,我得到了许多解决方案,但有些解决方案使用了断开连接的图


我的假设是否正确,即
TreeNoCycle
MakeNoCycle
的Python方法?如果是,我如何正确使用
TreeNoCycle
?如果。如果我不能使用TreeNoCycle,有什么不同的实现方法吗?

请使用CP-SAT解算器

请注意,在这种情况下,建模应该有点不同,因为回路约束采用以布尔文字(布尔变量或其否定)标记的图形。 您不需要整数变量

一些文件:

和python示例(查找_sat.py后缀):


我已经在挣扎,当我复制并粘贴代码时,我得到了
属性错误:module'ortools.sat.python.cp_model'没有属性'appability'
似乎你已经安装了一个非常旧的版本。你能检查一下你正在加载哪个模块吗?最新的稳定版本是6.10。我已经通过pip安装了6.7.4973,python 3.6.5。还有什么需要说明的吗检查?刚刚试用了一个新的virtualenv,这就是
pip安装或工具安装(OSX High Sierra)。从pipy上可用的软件包列表来看,我需要升级OS和Python。
# side length of board
n = 5

# where the knight jumps to from field i, starting at 0, ending at n*n
jump_to = [solver.IntVar(1, n*n) for i in range(n*n)]

# snip other constraints

# the no cycle constraint
active = [solver.IntVar(1, 1) for i in range(dim * dim)]
for t in active:
    solver.Add(t == 1)
solver.Add(solver.TreeNoCycle(jump_to, active, lambda: None))