1

我正在使用 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.

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

4

1 回答 1

0

我通过在每次迭代开始时导入模块来解决这个问题,然后在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异步执行此操作。

希望这可以帮助某人。

于 2015-06-29T04:18:08.163 回答