zykov, великая цель за горизонтом: реализовать "Разделяй и Властвуй". Будничная текучка на данный момент: отработать понимание и навыки работы с графами, потому что для реализации РиВ они должны быть отточены особенно остро.
Работать с полным уровнем пазла очень просто: никаких исключений, всё замкнуто и красиво. При переходе же к участкам, получающимся при разрезании уровня, сразу встаёт куча проблем. В частности, как рациональнее/грамотнее/удобнее организовать сочленение вдоль открытых границ кусков лабиринта; в каком виде хранить состояния? Ведь тут появляется новое исключительное "положение" агента — его отсутствие на рассматриваемом участке лабиринта. Надо будет изучить и проработать вопрос того, какие состояния являются ключевыми, важными, обычными и проходными, что исключить из конечного графа пространства состояний участка лабиринта, а что оставить. Ведь главная цель — это сократить размер пространства решений всеми возможными средствами, чтобы кратчайший путь в нём искался как можно проще.
В частности с последним у меня даже на замкнутой карте не всё так гладко. Найти тупиковые состояния, получившиеся обратным проходом, легко: надо пройтись по графу в ширину прямым проходом из вершины, соответствующей начальному состоянию, а затем выкинуть все вершины, оказавшиеся не помеченными в процессе. Однако, в связи с используемым мною походом к построению графа состояний, у меня получаются дополнительные хвосты и ненужные рёбра. С вершинами-хвостами понятно, а вот рёбра для меня были удивлением (впрочем, понимание "почему?" приходит сразу как осознался факт их существования). Хорошо, что я установил себе пару редакторов
Gephi и
yEd Graph Editor и изучаю их на конкретных примерах, иначе бы я эти косяки не заметил. Кстати, очень интересные программы для работы с графами, которые имеют довольно богатый набор алгоритмов для автоматической укладки со всевозможными настройками. yEd даже
онлайн вариант имеет.
Среди всего прочего, при изучении графов пространств решений, я заметил такую особенность: бывают последовательные цепочки состояний, в которых совершенно нет ветвления. Сразу появляется идея заменять такие последовательности одним направленным ребром, которому соответствует длинная последовательность ходов. К сожалению, как уверенно и однозначно детектировать такие вещи в процессе построения графа, а не на этапе его обработки, я не представляю. Наглядная демонстрация к этому вопросу (участок графа для пазла Microban #3):
(Оффтоп)
Картинка выше за одно иллюстрирует самоподобие графов пространств состояний пазлов сокобана, речи про которое я толкал на предыдущих страницах. Обратите внимание, как в трёх параллельных цепочках различие лишь в одном статическом ящике (находящемся, соответственно в ячейках
0,
5 и
6). Да, пример примитивный, в самоподобных участках нет ветвлений и циклов, как будет в графах задач на картах большего размера, но всё же.
-- 12.11.2021, 02:35 --А вот из этого что-то реализовано?
Если вы что-то сами закодили, то возможно.
Если честно, я не до конца понял что вы предлагаете, кроме того, что ваш поход не ориентирован на получение
оптимального решения.