Как уже упоминалось в предыдущем ответе, эта проблема представляет собой NP-полную задачу коммивояжера.
Существует лучший способ, чем тот, который вы используете.Ультрасовременный решатель TSP принадлежит Решателю Concorde от Georgia Tech .Если вы не можете просто использовать их свободно доступные программы самостоятельно или использовать их API, я могу описать основные методы, которые они используют.
Чтобы решить TSP, они начинают с жадной эвристики, называемой Лин-Керниганэвристика для генерации верхней границы.Затем они используют ветвление и вырезание в смешанной целочисленной программной формулировке TSP.Это означает, что они пишут ряд линейных и целочисленных ограничений, которые, когда они решены, дают вам оптимальный путь TSP.Их внутренний цикл вызывает решатель линейного программирования, такой как Qsopt или Cplex, чтобы получить нижнюю границу.
Как я уже говорил, это современный уровень, так что если вы ищете лучший способрешить TSP, чем то, что вы делаете, здесь самое лучшее.Они могут обрабатывать более 10 000 городов за несколько секунд, особенно на симметричном, плоском TSP (я подозреваю, что это вариант, над которым вы работаете).
Если число путевых точек, которые вам нужно в конечном итоге обработать, малоскажем, порядка от 10 до 15, тогда вы сможете выполнять поиск по ветвям и границам, используя минимальную эвристику связующего дерева .Это учебное упражнение во многих вводных курсах по искусственному интеллекту.Больше точек, чем вы, вероятно, переживете фактическое время работы алгоритма, и вместо этого вам придется использовать Concorde.