Я создал головоломку, производную от задачи коммивояжера, которую я назвал «Идеальный след».
По сути, это неориентированный граф со взвешенными ребрами. Цель состоит в том, чтобы пройти каждое ребро хотя бы один раз в любом направлении, используя минимальный вес (в отличие от классического TSP, где цель состоит в том, чтобы посетить каждую вершину, используя минимальный вес).
И наконец, ребру присваиваются два веса, по одному для каждого направления обхода.
Каждый день я создаю новый экземпляр головоломки и публикую его через интерфейс JSON.
Теперь я знаю, что TSP является NP-трудным. Но мои головоломки обычно имеют лишь небольшое количество ребер и вершин. Ведь они должны быть решаемы по-человечески. Так что грубой силы с базовой оптимизацией может быть достаточно.
Я хотел бы разработать некоторый (Javascript?) код, который извлекает головоломку с сервера и решает алгоритм за разумное время. Кроме того, он может даже опубликовать решение на сервере для регистрации в таблице лидеров.
Я написал базовый решатель грубой силы для него на Java, используя мою внутреннюю Java-модель на сервере, но код слишком толстый и, как и ожидалось, быстро исчерпал место в куче.
Возможен ли и осуществим ли решатель Javascript?
JSON API прост. Вы можете найти его по адресу: http://service.traceperfect.com/api/stov?pdate=20110218, где pdate — это дата головоломки в формате ггггММдд.
В основном головоломка имеет много строк. Каждая линия имеет две вершины (A и B). Каждая строка имеет два веса (время A для прохождения A -> B и время B для прохождения B -> A). И это должно быть все, что вам нужно для построения структуры данных графа. Все остальные свойства в объектах JSON предназначены для визуальных целей.
Если вы хотите познакомиться с головоломкой, вы можете сыграть в нее через флеш-клиент по адресу http://www.TracePerfect.com/
Если кому интересно реализовать решатель для себя, то выложу подробно про API для отправки решения на сервер, что тоже очень просто.
Спасибо, что прочитали этот длинный пост. Я с нетерпением жду ваших мыслей об этом.