繁体   English   中英

在多个图形上运行Google或工具TSP约束求解器时出现DuplicateFlagError

[英]DuplicateFlagError when running Google or-tools TSP constraint solver on multiple graphs

我正在使用Google的ortools.constraint_solver查找旅行商问题的解决方案。 如此处所示。 当我在一组点上运行程序时,一切都按预期工作。

现在,我开始工作了, 我试图通过遍历所有集合并在每个集合上调用约束求解器来解决多点集合的TSP

我有以下代码根据特定问题的大小(不是所有集合的大小都相同)重新定义gflag tsp_size

gflags.DEFINE_integer('tsp_size', len(points), 'Size of Traveling Salesman Problem instance.')

同样,当仅指定一个集合时,它可以工作,但是在为第二个集合运行它时,出现错误: gflags.DuplicateFlagError: The flag 'tsp_size' is defined twice.

考虑到我有多个图形,如何在程序的同一运行中制作约束求解器的单独实例?

我通过在每次迭代开始时导入模块,然后在sys.modules中将其删除来解决此问题。

这为每个集合提供了约束求解器的新实例,其中特定于该集合大小的gflag配置值:)

for graph in graphs:
    import shp
    shp.run(graph)
    del sys.modules['shp']

编辑:

上面的代码给了我一些问题,因为shp.py没有作为main运行。 我最终使它可以使用:

from subprocess import call

# graph_files is a collection of filenames each referencing graph txt files I'm using.    
for fn in graph_files:
    call(["python", "shp.py", fn])

使用subprocess.Popen异步执行此操作。

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM