Меня интересует решение TSP для (малых) графиков сетки. Любая библиотека будет делать для меня, но это кажется сложнее, чем ожидалось. Я попробовал пару решателей, которые я обнаружил там (включая concorde), но у всех их есть проблемы, когда неравенство треугольника не выполняется.Решатель TSP без неравенства треугольника
Например, я хотел бы решатель для вывода тура (0, 1, 2, 1, 4, 3) для графа (с единичными весами ребер) ниже:
0-1-2
| |
3-4
В данном конкретном Случай, я сказал concorde, что край (2, 4) имел вес 1000, и Concorde быстро произвел тур (0, 1, 2, 4, 3) стоимостью 1004. Это явно не то, что я ищу.
В идеале в Java будет реализована простая (возможно, грубая сила) реализация, но все, что работает, на самом деле будет выполнено. Может ли кто-нибудь указать мне на какой-то код или мне действительно нужно реализовать это сам?
Редактировать: также важно, чтобы я получил точное решение, а не некоторое приближение.
Edit2: действительно, это не похоже на TSP. То, что я пытаюсь найти, - это кратчайшая замкнутая прогулка, которая посещает все вершины.
Вы уверены, что используете Concorde правильно? Он должен быть * точным * решателем для симметричной задачи TSP ... –
@ Li-aungYip: Concorde на самом деле дает оптимальное решение TSP. Проблема в том, что OP ожидает решение, которое не является действительным туром TSP. См. Мой ответ для деталей. – NPE
Я вижу. На самом деле, учитывая этот график, я не думаю, что есть * любой * другой закрытый цикл, который посещает все узлы. (ключевое слово: закрыто. 2-1-0-3-4 имеет вес 4 и посещает все узлы, но он не закрыт.) –