Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Поиск выхода из лабиринта

Лекция



Сразу хочу сказать, что здесь никакой воды про поиск выхода из лабиринта, и только нужная информация. Для того чтобы лучше понимать что такое поиск выхода из лабиринта , настоятельно рекомендую прочитать все из категории Робототехника.

Правило правой руки. Элементы лабиринта. Построение карты лабиринта.

Нить Ариадны, или Алгоритм поиска выхода из лабиринта

Вспомните веселую историю, рассказанную английским писателем Джеромом К. Джеромом в книге “Трое в лодке (не считая собаки)” (если не читали, то обязательно прочитайте — это в главе 6). Сколько людей смеялось над чудаком Гаррисом, попавшим в Хемптон-Кортский лабиринт!

Мы только зайдем сюда, чтобы ты мог сказать, что побывал в лабиринте, но это совсем не сложно. Даже нелепо называть его лабиринтом. Мы походим здесь минут десять, а потом отправимся завтракать, — уговаривал Гаррис своего родственника.

Но увы! Он не только заблудился сам, но и запутал людей, которых взялся избавить от мучительного блуждания по лабиринту. За ним следовало по крайней мере человек двадцать и даже одна женщина с ребенком, безуспешно искавшая выход из лабиринта все утро.

Следуя своей тактике, Гаррис все время поворачивал направо. Ему казалось, что вот-вот он выберется из лабиринта. Но время шло, и... вся компания во главе с Гаррисом вернулась к тому месту, где они уже были. Половинка булочки, брошенная ребенком и замеченная родственником Гарриса семь минут тому назад, с несомненностью указывала место их недавнего пребывания.

Тогда Гаррис предложил вернуться назад и начать все снова. Предложение начать снова особого энтузиазма не вызвало, но все согласились вернуться.

Процессия повернула обратно и потянулась за Гаррисом в противоположном направлении, но через десять минут вся компания снова очутилась в центре лабиринта. Такой же неудачей закончились и последующие попытки. В какую бы сторону они ни сворачивали, все пути приводили их в центр. Это стало повторяться с такой правильностью, что некоторые просто оставались на месте и ждали, пока остальные прогуляются и вернутся к ним.

Наконец отчаявшиеся любители лабиринта призвали на помощь сторожа, который и вывел их на “свободу”.

Бедному Гаррису не пришлось бы блуждать и мучить людей, если бы он знал алгоритм поиска путей в лабиринте. Таких алгоритмов существует несколько. Один из них связан с древнегреческим мифом о легендарном герое Тезее, который отважился проникнуть в лабиринт для того, чтобы разыскать в нем чудовищного Минотавра и убить его. Ему помогла выбраться из лабиринта Ариадна, давшая Тезею клубок ниток, один конец которых держала она сама. По мере углубления Тезея в лабиринт клубок разматывался; наматывая потом нитки, Тезей благополучно вернулся к выходу.

Представим себе лабиринт в виде конечной системы площадок, от которых расходятся коридоры, причем каждый коридор соединяет две площадки (такие площадки будем называть смежными), но не исключается существование таких площадок, из которых можно пройти только в один коридор (такие площадки будем называть тупиками). Геометрически лабиринт можно представить в виде системы точек А, В, С, … (изображающих площадки) и совокупности отрезковАВ, ВС, … (изображающих коридоры), соединяющих некоторые пары этих точек (рис. 1).

Поиск выхода из лабиринта

Рис. 1

Будем говорить, что площадка Y достижима из площадки X, если существует путь, ведущий от X к Y через промежуточные коридоры и площадки. Точнее, это означает, что либо X и Y — смежные площадки, либо существует последовательность площадок Х1, Х2, Х3, ..., Хn, таких, что пары площадок Х иХ1, Х1 и Х2, Х2 и Х3, …, Хn и Y смежны. Например, на приведенном рисунке площадка Н достижима из тупика А посредством пути АВ, ВС, СD, , ЕF, FD, , в то время как площадка K не достижима из А. Вместе с тем, если Y вообще достижима из X, то она достижима и посредством простого пути, т.е. такого пути, в котором каждая площадка (а тем более и каждый коридор) проходится лишь один раз. В предыдущем примере путь не был простым, но, срезав петлю, ЕF, FD, мы получаем простой путь АВ, ВС, СD, .

Предполагается, что Минотавр находится на одной из площадок лабиринта (обозначим ее М), а Тезей, отправляясь на его поиски с площадки А, на которой его ждет Ариадна, должен решить следующую задачу: требуется выяснить, достижима ли М из А или нет1. Если достижима, то нужно добраться до нее по какому бы то ни было пути, но вернуться к Ариадне нужно уже по простому пути. Если же М недостижима, то вернуться к Ариадне.

Различных лабиринтов может быть бесчисленное множество, а взаимное расположение в данном лабиринте площадок А и М также можно варьировать. Поскольку Тезею заранее ничего не известно об устройстве данного лабиринта и о местонахождении в нем Минотавра, то решение поставленной задачи мыслится в виде общего метода поисков, пригодного при любом лабиринте и при любом расположении в нем площадок А и М. Иными словами, решение мыслится в виде алгоритма, решающего любую из задач данного типа (именно в этом, как известно, заключается такое свойство алгоритма, как массовость).

Алгоритм поиска. Для построения такого алгоритма мы рассмотрим один специальный метод поисков. На любой стадии процесса поиска в соответствии с этим методом приходится различать коридоры:

1) еще ни разу не пройденные Тезеем (условно — зеленые);

2) пройденные один раз (желтые);

3) пройденные дважды (красные).

Далее, находясь на какой-либо площадке, Тезей может попасть на одну из смежных площадок посредством одного из следующих двух ходов:

1. Разматывание нити. Прохождение от данной площадки по любому зеленому коридору до смежной площадки. При этом нить Ариадны разматывается вдоль этого коридора, который после прохождения уже считается желтым.

2. Наматывание нити. Возвращение от данной площадки по последнему пройденному желтому коридору до смежной площадки. При этом нить Ариадны, ранее размотанная вдоль этого коридора, наматывается обратно, а этот коридор уже объявляется красным.

Предполагается, что Тезей делает какие-то пометки, позволяющие ему впоследствии отличать зеленые коридоры от зеленых; желтые различимы тем, что по ним протянута нить Ариадны2. Выбор того или иного хода зависит от обстановки, наблюдаемой Тезеем на той площадке, на которой он находится в данный момент; эту обстановку можно охарактеризовать одним или несколькими из следующих признаков:

1. Об этом говорит сайт https://intellect.icu . Минотавр. На данной площадке обнаружен Минотавр.

2. Петля. Через данную площадку уже протянута нить Ариадны; иными словами, от площадки расходятся по крайней мере два желтых коридора.

3. Зеленая улица. На данной площадке есть выход по крайней мере в один зеленый коридор.

4. Ариадна. На данной площадке находится Ариадна.

5. Пятый случай. Отсутствие всех предыдущих признаков.

Наш метод поиска может быть теперь задан следующей схемой (см. табл. 1):

Таблица 1

Поиск выхода из лабиринта

Находясь на какой-нибудь площадке, Тезей делает очередной ход так: он проверяет по порядку номеров в левом столбце схемы, какой из перечисленных признаков имеет место; обнаружив первый такой признак, он (уже не проверяя остальные признаки) делает соответствующий ход (или остановку) из правого столбца. Такие ходы делаются до тех пор, пока не наступит остановка.

Пригодность предложенного метода непосредственно вытекает из следующих трех утверждений:

1. При любом взаимном расположении А и М в лабиринте после конечного числа ходов обязательно наступит остановка либо на площадке Минотавра, либо на площадке Ариадны.

2. Если остановка наступила на площадке Минотавра, то Минотавр достижим. Более того, в этом случае нить Ариадны оказывается протянутой по простому пути, ведущему от А до М; наматывая нить, Тезей может теперь вернуться по этому пути к Ариадне.

3. Если остановка наступила на площадке Ариадны, то Минотавр недостижим.

С доказательством этих утверждений можно познакомиться, например, в .

А мы покажем на двух примерах, как работает предложенный метод.

Пример 1. Пусть с площадки А лабиринта (см. рис. 1) начинается поиск Минотавра, который находится в F. Процесс поиска в соответствии с нашим методом удобно изобразить посредством схемы, представленной в табл. 2 (из-за свободы в выборе зеленого коридора — это лишь одна из возможных схем).

Мы видим, что в данном случае Минотавр достижим. Выделив в предпоследнем столбце те из коридоров, которые остались желтыми (в соответствии с показаниями последнего столбца), получим следующий простой путь, ведущий от А к F: АВСDF.

Пример 2. Если же поиск начинается с площадки К, то процесс поиска можно отразить в схеме, представленной в табл. 3.

Мы видим, что в этом случае Минотавр недостижим.

Заметим, что описанный алгоритм не обладает свойством определенности — с какой-то площадки могут оказаться выходы в несколько зеленых коридоров, а наше предписание не указывает, какой из них выбрать, точнее — оно допускает произвольный выбор одного из них. Чтобы это свойство соблюдалось, необходимо регламентировать, как должен проводиться выбор очередного проверяемого коридора в таких ситуациях.

Таблица 2

Поиск выхода из лабиринта

Таблица 3

Поиск выхода из лабиринта

Задание для самостоятельной работы

Составьте схему выхода из лабиринта (с площадки 1 на площадку 10 — см. рис. 2), используя описанный в этой статье алгоритм:

Поиск выхода из лабиринта

При наличии на площадке выходов в несколько зеленых коридоров перемещение по ним должно идти “по часовой стрелке”.

Схемы, пожалуйста, оформите в виде таблиц, аналогичных табл. 2 и табл. 3.

ПРОХОЖДЕНИЕ ЛАБИРИНТА :: ПРАВИЛА И АЛГОРИТМЫ

Поиск выхода из лабиринта

Поиск выхода из лабиринта

Правило "правой руки".
Моделирование робота в среде GameLogo.
Алгоритм Люка-Тремо.

С глубокой древности лабиринты несли ощущение тайны и загадки. Один из первых лабиринтов, известных человечеству, описывает Геродот - это был египетский Лабиринт, в котором было 5000 комнат. Со временем лабиринты утратили свое религиозно-мистическое значение и стали объектами развлечений, превратившись в сады и парки в виде зеленых изгородей сложной конфигурации.

Разгадывание лабиринтов всегда являлось увлекательнейшим занятием, но еще более увлекательным является создание машин, способных пройти Лабиринт.

Одним из самых простых правил для прохождения лабиринта является правило "одной руки": двигаясь по лабиринту, надо все время касаться правой или левой рукой его стены. Этот алгоритм, вероятно, был известен еще древним грекам. Придется пройти долгий путь, заходя во все тупики, но в итоге цель будет достигнута. Хотя у этого правила и есть один недостаток, но о нем мы поговорим позже.

Попробуем описать робота, действующего в соответствии с правилом "правой руки".

В начале своей работы робот должен найти стену, по которой он будет следовать. Для этого он может просто двигаться вперед, пока не упрется в преграду.

После того как робот наткнулся на препятствие, он начинает передвигаться в соответствии с правилом "правой руки".

Двигаясь вдоль стены, робот следит, есть ли проход справа. Если проход есть, робот должен идти по нему, чтобы не оторваться от стены справа.

Если прохода нет - впереди стена - робот поворачивает налево. Если прохода снова нет, он еще раз поворачивает налево, таким образом разворачиваясь на 180 градусов, и идет в обратном направлении.

Блок-схема алгоритма для робота, работающего по правилу "правой руки", представлена на рисунке.

Поиск выхода из лабиринта

Рис Блок-схема алгоритма для робота, работающего по правилу

Попробуем проверить работу данного алгоритма и напишем для него программу. Для этой цели обратимся к среде программирования GameLogo. Эта среда является удобным средством для моделирования различных алгоритмов, связанных с управлением роботами. В ней есть исполнитель черепаха, который по своей сути является не чем иным, как самым настоящим роботом. Черепаха располагает очень удобным набором команд - вперед, направо, налево, назад. Кроме того, в центре черепахи есть датчик, принимающий значение от 0 до 100, в зависимости от тона поверхности, на которой она находится.

Диалект языка Лого, который мы будем использовать, очень прост и похож на Basic. Познакомиться с командами языка можно здесь. А бесплатно скачать среду программирования GameLogo - здесь. Размер дистрибутива невелик - всего 1 Mb.

В архиве с GameLogo есть фоны с лабиринтами, одним из которых мы и воспользуемся.
Поиск выхода из лабиринта
Файл maze1.gif


переменная флагВ самом начале программы дадим команду черепахе, чтобы она подняла перо (по умолчанию черепаха оставляет после себя след).

Размер поля - 800 на 600 точек. Исходное положение для черепахи находится в месте с координатами 115, 545 (белый квадрат).

Цвет дорожек лабиринта - светлый, на них датчик будет принимать значения больше 50. Цвет стен лабиринта - темный, значение датчика будет меньше 50. Выход из лабиринта представлен черным квадратом, значение датчика над которым будет равно 0.

Объявим переменную флаг, с помощью которой будем контролировать, достигнут ли выход из лабиринта.

Напишем программу и запустим ее с помощью большой красной кнопки с надписью "Выполнить".


фон = maze1.gif
     поднять перо
          место  115, 545

' поиск первой стены

повторять пока датчик > 50 {
          вперед 12
}


' правило правой руки

повторять пока флаг = 0 {

          направо 90
          вперед 12

          если датчик = 0 то

                    флаг = 1

          иначе

                    если датчик < 50 то

                              назад 12
                              налево 90
                              вперед 12

                              если датчик < 50 то
                                        назад 12
                                        налево 90
                              конец условия

                    конец условия

          конец условия

}

пиши "цель достигнута"



Если известно, что у лабиринта нет отдельно стоящих стенок, то есть нет замкнутых маршрутов, по которым можно возвращаться в исходную точку, то такой лабиринт называют односвязным и его всегда можно обойти полностью, применив правило "одной руки".

Если же лабиринт содержит отдельно стоящие стенки, то, применяя правило "одной руки", не всегда можно пройти все коридоры и тупики. Лабиринты с отдельно стоящими стенками и с замкнутыми маршрутами называются многосвязными. При этом многосвязные лабиринты можно разделить на две группы: без "петли" вокруг цели (замкнутый маршрут не проходит вокруг цели) и с замкнутой "петлей" вокруг цели (цель можно обойти по замкнутому маршруту).
Поиск выхода из лабиринта
Робот для прохождения лабиринта на базе ATmega8
(соревнования Micromouse competition).


Зная алгоритм Тремо, можно скорректировать поведение легендарного Тесея. Вдохновленный подарком любимой Ариадны, он уверенно идет по лабиринту. Вдруг перед ним возникает ход, по которому уже протянута нить... Что делать? Ни в коем случае не пересекать ее, а вернуться по уже известному пути, сдваивая нить, пока не найдется еще один непройденный ход.В многосвязных лабиринтах второй группы правило "одной руки" не работает и, применяя его, достичь цели невозможно. Но и эти лабиринты можно пройти, полагаясь на точный алгоритм.

Решение задачи о таких лабиринтах принадлежит сравнительно позднему времени, и начало ему положено Леонардом Эйлером. Эйлер не без оснований полагал, что выход из любого лабиринта может быть найден, и притом сравнительно простым путем.

Универсальный алгоритм прохождения любых лабиринтов был описан только через столетие в книге французского математика Э. Люка "Recreations matematiques", изданной в 1882 году. Интересно, что Люка при описании алгоритма указал на первенство другого французского математика М. Тремо. Таким образом, алгоритм стал известен как алгоритм Люка-Тремо.

Тремо предлагает следующие правила: выйдя из любой точки лабиринта, надо сделать отметку на его стене (крест) и двигаться в произвольном направлении до тупика или перекрестка; в первом случае вернуться назад, поставить второй крест, свидетельствующий, что путь пройден дважды - туда и назад, и идти в направлении, не пройденном ни разу, или пройденном один раз; во втором - идти по произвольному направлению, отмечая каждый перекресток на входе и на выходе одним крестом; если на перекресте один крест уже имеется, то следует идти новым путем, если нет - то пройденным путем, отметив его вторым крестом.
Поиск выхода из лабиринта
Клод Шеннон (Claude Elwood Shannon)


Применив вариант алгоритма Тремо, отец теории информации Клод Шеннон (Claude Elwood Shannon) построил одного из первых самообучающихся роботов. Шеннон дал ему звучное имя "Тесей", но в истории "Тесей" стал больше известен как "мышь" Шеннона. "Мышь" сначала обследовала весь лабиринт, а затем (во второй раз) проходила весь путь значительно быстрее, избегая участков, пройденных дважды.
Поиск выхода из лабиринта
Лабиринт на соревнованиях Micromouse competition.


В наши дни роботы, проходящие лабиринт, являются участниками одного из самых интересных состязаний думающих машинок, которое проходит в нескольких странах мира. Эти соревнования носят общее название Micromouse competition и по своим техническим новациям относятся к лидерам робототехнического спорта.

На первой Российской Олимпиаде Роботов проводились соревнования, целью которых было прохождение своеобразного лабиринта: за наиболее короткое время, двигаясь через "открытые двери" в стенках, робот должен был добраться от места старта до места финиша. Контролировать свое движение робот мог по черным линиям, нанесенным на пол лабиринта.

  • Выход из лабиринтаЗадание Робот должен найти выход из лабиринта, двигаясь из одного угла поля в другой. • Для выхода из лабиринта робот должен использовать только один датчик расстояния и один датчик касания • От попытки к попытке лабиринт может изменять свою конфигурацию. • Лабиринт не имеет циклов Старт Финиш
  • Выход из лабиринтаАнализ задачи. • Из-за того, что лабиринт по условию задачи имеет специфическую структуру, можно заметить, что робот выполняет в каждой секции лабиринта одни и те же действия: правило правой руки • Робот едет прямо, пока не найдет проход в следующую секцию, выполняет поворот и затем заезжает в нее. • Следовательно, датчик расстояния расположен справа
  • Выход из лабиринтаПрограмма. • Составьте программу выполняющую поиск прохода в следующую секцию в лабиринте и заезд в нее. ?? см. 15 см. • Выполните несколько запусков робота из разных секций лабиринта. Проверьте, как хорошо он определяет проходы В зависимости от положения датчика расстояния на тележке, возможно, роботу придется делать дополнительные перемещения, помимо поворота, после обнаружения прохода.
  • Выход из лабиринтаАнализ задачи. Продолжение. • После проезда в секцию, роботу нужно попасть в «начальную точку»
  • Выход из лабиринтаАнализ задачи. Продолжение. • Как двигаться в «начальную» точку - передом или задом, зависит от конструкции робота (насколько точно делает поврот) и от количества поворотов, которое нужно выполнить Движение передом Движение задом +2 поворота +1 поворот
  • Выход из лабиринтаАнализ задачи. Продолжение. • Как робот будет определять, что он в «начальной» точке секции? Логично использовать для этого датчик касания – ехать, пока робот не столкнется со стеной.
  • Выход из лабиринтаПрограмма. Продолжение • Доработайте программу, чтобы робот после заезда в секцию лабиринта, направился к «начальной» точке в данной секции. • Выполните несколько запусков робота из разных секций лабиринта.
  • Выход из лабиринтаАнализ задачи. Продолжение • Очевидно, что для выхода из лабиринта робот должен повторить набор из одних и тех же действий.
  • Выход из лабиринтаПрограмма. Продолжение • Измените программу таким образом, чтобы действия «найти проход в секции -> проехать к базовой точке секции» повторялись бесконечно. • Попробуйте запускать робота при разных конфигурациях лабиринта.

Вау!! 😲 Ты еще не читал? Это зря!

генерация лабиринта , прохождение лабиринта ,

А как ты думаешь, при улучшении поиск выхода из лабиринта, будет лучше нам? Надеюсь, что теперь ты понял что такое поиск выхода из лабиринта и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Робототехника

создано: 2014-08-18
обновлено: 2024-11-14
2340



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Робототехника

Термины: Робототехника