Пролог: код не выполняется должным образом - PullRequest
1 голос
/ 06 апреля 2010

По сути, я пытаюсь заставить агента ИИ ориентироваться в мире, основываясь на данных восприятиях. Моя проблема связана с тем, как агент движется. По сути, я создал find_action / 4 таким образом, чтобы мы передавали восприятие, действие, текущую ячейку и направление, в котором находится агент. В нынешнем виде весь код выглядит так: http://wesnoth.pastebin.com/kdNvzZ6Y

Моя проблема в основном связана со строками 102–106. По сути, в его текущей форме код не работает, а команда find_action пропускается, даже если агент фактически обращен вправо (я это подтвердил). Этот сломанный код выглядит следующим образом:

% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, right) :-
   retractall(facing(_)),
   assert(facing(up)),
   Action = turnleft .

Однако после некоторых экспериментов я пришел к выводу, что работает следующее:

% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, _) :-
   facing(right),
   retractall(facing(_)),
   assert(facing(up)),
   Action = turnleft .

Я не совсем уверен, почему это так. Я также попытался создать несколько идентичных find_action, каждый из которых проверял разное направление, используя формат facing (_), однако swipl это не понравилось и выдает ошибку.

1 Ответ

1 голос
/ 07 апреля 2010

Если работает второй вариант, то разница в последнем параметре find_action/4. Я думаю, если вы положите туда right, как в первом варианте он перестанет работать.
Я полагаю, что вы можете нажать "некоторую магию", используя эти retractall/1 и assert/1, потому что вы путаете обратный путь туда. У вашей системы есть побочный эффект, поэтому убедитесь, что как только вы добьетесь успеха на find_action/4, вы урежете свои альтернативы или предпримете некоторые контрмеры, чтобы восстановить начальное динамическое состояние facing/1 при возврате из дальнейшего объединения. Попытайтесь поместить некоторые следы сразу после find_action/4, чтобы увидеть, действительно ли это происходит сбой или происходит сбой в дальнейшем.

...