1

Я использую Google ortools.constraint_solver для поиска решений проблемы с продавцом. As seen here. Все работает так, как ожидалось, когда я запускаю программу на одном наборе точек.DuplicateFlagError при запуске Google or-tools TSP Ограничитель ограничений на нескольких графиках

Теперь, когда я получил эту работу, Я пытаюсь решить TSP для множества наборов точек, перейдя по всем наборам и вызывая решатель ограничений на каждом наборе.

У меня есть ниже код повторно определения gflagtsp_size в зависимости от размера конкретной задачи (не все наборы имеют одинаковый размер):

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

Опять же, это работает, когда есть только один набор уточняются, но после запуска его для второго набора, я получаю ошибку: gflags.DuplicateFlagError: The flag 'tsp_size' is defined twice.

Как я могу сделать отдельные экземпляры решателя в пределах одного прогона программы, учитывая, что я есть несколько графиков?

+0

Возможно, вы захотите перечитать [ask]. – boardrider

+1

@boardrider Не могли бы вы объяснить свое отвращение к вопросу? Я вижу, что вы еще не внесли каких-либо существенных вкладов в сайт; может быть, вы не понимаете, что считается приемлемым? :) – sgarza62

ответ

0

Я решил это, импортировав модуль в начале каждой итерации, а затем удалив его в sys.modules.

Это дает мне новый экземпляр решателя для каждого набора, со значениями Gflag конфигурации специфичны для размера этого сета :)

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

EDIT:

Приведенный выше код дает мне потому что 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 сделать это асинхронно.

Надеюсь, это поможет кому-то.