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