OR工具和Python中的NoCycle约束
我正在用Python中的或工具实现Knight Tour问题,我正在努力解决无循环约束。在C++中,存在<代码> MakCyCullo树循环约束。 到目前为止,我已经完成了简化的代码(我从一些不完整的示例中复制了TreeNoCycle部分): 其中,执行时,最后一部分得到以下错误: python3.6/site-packages/ortools/constraint_-solver/pywrapcp.py“,行 337,在下一个解决方案中 return _pywrapcp.Solver_NextSolution(self)SystemError:返回一个带有错误集的结果 我的代码的其余部分可以工作,也就是说,当我省略了带有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
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))