LINUX.ORG.RU

Описание алгоритма поиска выхода из лабиринта

 


0

1

Алгоритм поиска выхода Кассандра

(см. рисунок )

Находясь в точке (0,0) агент А создает четыре копии, по направлениям (-1,0), (1,0), (0,-1), (0,1)

Так как два направления невозможны в лабиринте 2x2 при создании копии с такими координатами возникает ошибка и эти копии не создаются.

Поэтому далее мы рассматриваем жизненный цикл только успешно созданных копий.

Это два агента B. У одного координаты (1,0), у другого (0,1) Эти агенты создают каждый по три копии, так как исключаются координаты родителя A(0,0)

Agent B(1,0) parent A(0,0)

------------

C(1,-1) exception, not created

C(1,1) wall, exception, not created

C(2,0) success, created

Agent B(0,1) parent A(0,0)

------------

C(-1,1) exception, not created

C(1,1) wall, exception, not created

C(0,2) success, created

Успешно созданные на втором шаге агенты создают каждый по три копии, так как исключаются координаты родителей B(1,0) и B(0,1)

Agent С(2,0) parent B(1,0)

------------

D(3,0) exception, not created

D(2,-1) exception, not created

D(2,1) success, created

Agent С(0,2) parent B(0,1)

------------

D(0,3) exception, not created

D(-1,2) exception, not created

D(1,2) success, created

Успешно созданные на третьем шаге агенты создают каждый по три копии, так как исключаются координаты родителей С(2,0) и С(0,2)

Agent D(2,1) parent B(1,0)

------------

E(3,1) exception, not created

E(1,1) wall, exception, not created

E(2,2) success, exit from puzzle found

Agent D(1,2) parent B(0,1)

------------

E(1,3) exception, not created

E(1,1) wall, exception, not created

E(2,2) success, exit from puzzle found

Если агент заходит в тупик то сообщает об этом своему родителю и прекращает работу.

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

В итоге агент А получает информацию о двух возможных путях выхода из лабиринта.

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

Из равновесных автоматически выбираем первый.


Имхо, вполне обыденная реализация волнового алгоритма на агентах. А вопрос-то о чём?

blexey ★★★★★
()
Ответ на: комментарий от blexey

В чем отличие model-based agents от goal-based agents?

А описание может кому пригодится из студентов. Вроде простенько, доходчиво.

legion
() автор топика
Ответ на: комментарий от legion

студенты часто не идиоты, могут и книжку открыть. Пост не читал.

nokachi
()

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

ну, скажем, пусть поле будет матрицей, где 0 - клетка по которой нельзя пройти, 1 - клетка по которой можно пройти и 2 - выход.

//А ИИ то где?

RedPossum ★★★★★
()

А кто тебе сказал, что кассандра идеальный алгоритм? Попробуй метод рёнгэ-кутта

ziemin ★★
()
Ответ на: комментарий от nokachi

«Заблудиться в таких сложных лабиринтах очень просто. Бесцельно бродить по ним можно целую вечность. Чтобы этого не произошло, вот один совет, который поможет выйти из любого лабиринта. Называется этот метод “Правило правой руки”. Его суть очень проста – всегда поворачивать на право, и тогда, в конце концов, цель будет достигнута.»

http://udivimenia.ru/raznoe/labirint/

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows
#######
   ...#
# #.#.#
#  .@.#
#######

Правило какой-то одной руки в общем случае не работает. Нужно отмечать зацикливания и переключаться.

И да, ИИ здесь, в выборе «налево/направо» делать нечего.

blexey ★★★★★
()
Ответ на: комментарий от ilovewindows

Бесцельно бродить по ним можно целую вечность
Называется этот метод “Правило правой руки”

...
.#.
...
anonymous
()

Зачем это здесь?

Лучше бы статью в LOR-wiki оформили, а здесь комментарии для нее запросили.

trex6 ★★★★★
()
Ответ на: комментарий от RedPossum

//А ИИ то где?

Сейчас какую только хрень «ИИ» не называют...

d_Artagnan ★★
()
Ответ на: комментарий от ziemin

метод рёнгэ-кутта

Чем он идеальней сабжевого?

Deleted
()
Ответ на: комментарий от d_Artagnan

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

ilovewindows ★★★★★
()

В общем-то этот алгоритм уже лет 50 как называется floodfill, ты только сигнальную точку добавил.

anonymous
()

это что-то вроде

first revert . head . filter (atExit) $ go lab empty initial
  where 
    go _ _ [] = error "no exit"
    go lab prev (z@(x,hist):zs) = 
       let z' = next x 
                 & filter (canEnter lab)
                 & filter (`S.notElem` prev)
                 & map (\y -> (y, t:hist))
       in z:go lab (prev `S.union` (fromList z')) (zs++z')
       where canEnter = {- put your implementation here -} undefined
             next     = {- put your implementation here -} undefined

только непонятно, что за агенты, какие агенты, кому они нужны...

qnikst ★★★★★
()
Последнее исправление: qnikst (всего исправлений: 1)
Ответ на: комментарий от anonymous

Что более всего меня поразило, так это сходство работы алгоритма с поведением главного героя Николаса Кейджа в фильме «Пророк».

Ведь агент А создает КОПИИ СЕБЯ и РАССЫЛАЕТ ИХ в поисках решения.

При этом созданные копии обладают способностью к САМОКОПИРОВАНИЮ то есть буквально речь идет о WORM - черве, плодящемся в лабиринте ради достижения определенной цели - в приведенном примере цель - нахождение выхода.

Агент А создает 4 потока - окружения, в каждом из которых пытается запустить свою копию.

Как видите, тут multi-threading обязательно.

Это позволяет ускорить поиски выхода за счет parallel and multi-core programming

PS. При равновесных ответах выбирать можно тот, который поступил первым по времени.

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

legion
() автор топика

Сопоставим каждому входу в ответвление с развилки вес 0.
1 Подойдя к развилке проверяем вес крайнего левого входа
2 если он больше 1 отбрасываем этот вход и переходим к шагу 1
3 иначе проходим в этот вход и увеличиваем его вес на 1.
Всё.

Suntechnic ★★★★★
()
Ответ на: комментарий от legion

У Кейджа копий было немного, ветвился он только в ключевых точках, да и на создание не уходило по 15 минут. Ну, образно.

Кстати он таки зафейлил.

anonymous
()
Ответ на: комментарий от anonymous

Нет. Не зафейлил. Он совершил ошибку в видении. Потом проснулся и сдался властям. Это очень важный момент, я считаю. Честно говоря, когда сам в первый раз посмотрел, тоже почему-то запомнилась только ошибка пророка и ядерный взрыв из-за нее. Считал «Пророк» фильмом с несчастливым концом. А потом пересмотрел и увидел как он просыпается и сдается властям. И все - happy end

legion
() автор топика
Ответ на: комментарий от legion

Ну да. Тщетность усилий, бег на месте, безысходность, пост рок.

anonymous
()
Ответ на: комментарий от Suntechnic

Мне «Пророк» понравился, а Прошкина не читал. За половину мира спасибо :)

legion
() автор топика
Ответ на: комментарий от Suntechnic

++++++

спасибо . помнил форвардинг но гугление фэйлило.

да книга намного полезней кинца с Кейджем.

ТС'У есть отличия между ветвлением Кейджей(там дерево ибо короткая дистанция) в лабиринте DAG - тем более у тебя агенты либо должны метить лабиринт либо экспоненциальный рост числа агентов.

если манька с агентами начинай|продолжай вокруг вот этого http://channel9.msdn.com/Shows/Going Deep/Hewitt-Meijer-and-Szyperski-The-Act...

qulinxao ★★☆
()
Ответ на: комментарий от anonymous

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

ilovewindows ★★★★★
()
Ответ на: комментарий от legion

интересно было бы посмотреть на адекватную реализацию этого алгоритма с использованием parallel и multi-core programming.

qnikst ★★★★★
()
Ответ на: комментарий от qulinxao

Кинцо с Кейджем тоже можно посмотреть. Один раз. А Прошкин реально раскрыл тему, проработал ее и довел до логического конца, заставив еще и поразмышлять. Это да.

Suntechnic ★★★★★
()
23 июля 2013 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.