我正在使用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.
考虑到我有多个图表,如何在同一个程序运行中创建约束求解器的单独实例?
答案 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
异步执行此操作。
希望这有助于某人。