在多个图表上运行Google或-tops TSP约束求解器时出现DuplicateFlagError

时间:2015-06-28 20:10:16

标签: python google-api traveling-salesman constraint-programming gflags

我正在使用Google的ortools.constraint_solver来寻找旅行商问题的解决方案。 As seen here.当我在一组点上运行程序时,一切都按预期工作。

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

我有以下代码重新定义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.

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

1 个答案:

答案 0 :(得分:0)

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

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

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

修改

上面的代码给了我一些问题,因为shp.py并没有作为主要运行。我最终得到了这个:

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异步执行此操作。

希望这有助于某人。