Последние пару дней я воздержался от мастер-исследований и сосредоточился на этой (казалось бы простой) головоломке:
Существует такая сетка размером 10 * 10, которая составляет квадрат из 100 доступных мест. Цель состоит в том, чтобы начинать с угла и проходить через все места по отношению к некоторым простым "правилам хода" и достигать числа 100 (или 99, если вы программист и начинаете с 0 вместо).
Правила прохождения:
1. Два прыжка по вертикальной и горизонтальной оси
2. Один пространственный прыжок вдоль диагоналей
3. Вы можете посещать каждый квадрат только один раз
Чтобы лучше визуализировать, вот пример примерного траверса (до 8-го шага):
Пример Traverse http://img525.imageshack.us/img525/280/squarepuzzle.png
В ручном режиме я работаю над этой головоломкой от скуки. В течение многих лет я пытался время от времени решать это вручную, но я никогда не выходил за рамки 96. Звучит просто? Попробуйте сами и убедитесь сами:)
Таким образом, для решения проблемы я разработал короткую (около 100 строк кода) программу в Python. Я новичок на этом языке, я хотел посмотреть, что я могу сделать.
Программа просто применяет исчерпывающую технику устранения ошибок и ошибок. Другими словами: первый поиск глубины грубой силы.
Здесь возникает вопрос: программа, к сожалению, не может решить проблему, потому что пространство состояний настолько велико, что поиск никогда не заканчивается, когда вы когда-либо находите решение. Он может подняться до номера 98 (и печатает это) без особых трудностей, тем не менее, не является полным решением.
Программа также печатает длину дерева поиска, которое оно охватило до сих пор. Через пару минут список переходов, скажем, 65-го элемента, будет закрыт до конца, всего за один путь. Это число уменьшается в экспоненциально возрастающих периодах времени. Я уже давно запускаю код и не могу выйти за пределы 50 барьеров, и теперь я убежден.
Кажется, этого простого подхода будет недостаточно, если я не запустил его навсегда. Итак, как я могу улучшить свой код, чтобы быть быстрее и эффективнее, чтобы он придумывал решения?
В принципе, я с нетерпением жду, чтобы увидеть идеи о том, как:
- Захват и использование знаний о домене, специфичных для этой проблемы.
-
Применить методы/трюки программирования для преодоления усталости
.. и, наконец, реализовать существенное решение.
Спасибо заранее.
Revision
Благодаря Dave Webb для связи проблемы с доменом он принадлежит:
Это очень похоже на рыцарское Проблема, связанная с перемещением рыцарь вокруг шахматной доски без пересматривая ту же площадь. В основном это та же проблема, но с разные "Правила траверса".