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

问题描述 投票:0回答: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.



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

python google-api or-tools constraint-programming gflags
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

 异步执行此操作。

希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.