Час пик
если вы не знакомы с ней, игра состоит из набора автомобилей различных размеров, установленных по горизонтали или по вертикали, на сетке NxM, которая имеет один выход.
Каждый автомобиль может двигаться вперед/назад в заданных направлениях, если другой автомобиль не блокирует его. Вы не можете никогда менять направление движения автомобиля.
Есть одна специальная машина, обычно красная. Он находится в том же ряду, в котором находится выход, и цель игры состоит в том, чтобы найти серию ходов (движение - движение автомобиля на N шагов назад или вперед), которые позволят красной машине выехать из лабиринта.,
Я пытался думать, как решить эту проблему в вычислительном отношении, и я действительно не могу придумать ни одного хорошего решения.
Я придумал несколько:
- Откат. Это довольно просто - рекурсия и еще несколько рекурсий, пока вы не найдете ответ. Тем не менее, каждая машина может перемещаться несколькими различными способами, и в каждом игровом состоянии можно перемещать несколько автомобилей, и итоговое дерево игры будет ОГРОМНЫМ.
- Какой-то алгоритм ограничения, который будет учитывать то, что нужно переместить, и каким-то образом работать рекурсивно. Это очень грубая идея, но это идея.
- Графы? Смоделируйте игровые состояния в виде графика и примените какое-либо изменение алгоритма раскраски, чтобы разрешить зависимости? Опять же, это очень грубая идея.
- Друг предложил генетические алгоритмы. Это вроде возможно, но не легко. Я не могу придумать хороший способ сделать функцию оценки, и без этого у нас ничего нет.
Итак, вопрос в том, как создать программу, которая будет использовать сетку и макет транспортного средства и вывести серию шагов, необходимых для того, чтобы вывести красную машину?
Подвопросы:
- Найти какое-то решение.
- Поиск оптимального решения (минимальное количество ходов)
- Оценка того, насколько хорошо текущее состояние
Пример: как вы можете перемещать автомобили в этом режиме, чтобы красная машина могла "выйти" из лабиринта через выход справа?
(источник: scienceblogs.com)