Как превратить TSP в минимальный гамильтонов путь?

Я пытаюсь решить эту проблему http://coj.uci.cu/24h/problem.xhtml?abb=1368.

После большого количества исследований и потраченного времени я смог реализовать алгоритм Branch and Bound для TSP, который получает путь, проходящий все точки и возвращающийся в начало.

Я думал, что удалив самый длинный край этого пути, я получу ответ, но когда я закончил свой алгоритм, я обнаружил, что это не во всех случаях, прочитав этот вопрос: Гамильтониан пути минимального расстояния Javascript

Я нашел несколько ответов, в которых говорится, что добавление фиктивной точки с нулевым расстоянием к каждой другой точке, а затем ее удаление решает проблему, но я не знаю подробностей этого. Я уже добавил эту фиктивную точку, теперь вместо 26.01 теперь это 16.23 в качестве ответа. Я еще не удалил фиктивную точку, потому что не понимаю «весь смысл добавления фиктивной точки».

Можете ли вы помочь мне решить эту проблему? Или лучше использовать другой подход вместо TSP?


person Nyu    schedule 05.11.2012    source источник


Ответы (1)


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

Если вы введете фиктивную точку (или представите ее как ярлык, червоточину), ваши концы могут лежать далеко друг от друга, не влияя на расстояние.

person Andreas    schedule 05.11.2012
comment
О, я понимаю. Это означает, что TSP будет думать, что два конца очень близки, используя эту точку как соединение между ними. Видя это, кажется, что мой алгоритм делает что-то не так. Что значит удалить фиктивную точку впоследствии? Если это не влияет на общее расстояние. - person Nyu; 05.11.2012
comment
Удаляйте его только для визуализации и вывода, это никак не влияет на вашу физическую форму. - person Andreas; 06.11.2012
comment
Спасибо, с моим кодом что-то не так, я посмотрю. Но теперь я понимаю эту проблему. - person Nyu; 07.11.2012
comment
Я просто решил это, это была глупая ошибка, все еще вычитал наибольшее преимущество на нижних границах, теперь это работает. Я не могу добиться принятия этого решения судьей, но меня это устраивает. - person Nyu; 07.11.2012