НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

Ответы на вопросы о целях

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

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

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

Система мира кубиков в определенной степени может осуществлять интроспективный анализ

На вопрос "Почему вы поместили А на стол?" правильный ответ получается, если найти (PUT-ON А <положение с z=0>) в этом дереве целей, посмотреть на узел, расположенный сверху от него, и ответить, что действие было совершено для того, чтобы избавиться от А. Тогда в ответ на вопрос "Почему вы это сделали?" необходимо произвести еще один шаг вверх по дереву и заметить, что нужно было освободить блок В. Повторение вопроса приведет в конечном итоге к ответу о том, что необходимо было поместить В на С, а в дальнейшем - и к окончательному ответу самого верхнего уровня: "Потому что вы мне приказали это сделать".

Вопросы типа как обрабатываются иначе. "Как вы поместили В на С?" вызывает ответ: "Я поместил его в (7 1 2)". Повторение вопроса вызывает перечисление целей, находящихся непосредственно под (PUT-AT В (7 1 2)), а именно: "Сначала я взял В; затем я перенес В, и наконец я отпустил В".

С вопросами типа когда также можно работать. Соответствующий прием состоит в прослеживании дерева от узла, относительно которого задан вопрос, к узлу наверху, который представляет собой первоначальную команду. Так, на вопрос "Когда вы взяли А?" можно дать ответ: "Тогда, когда я ставил В на С". Если вопрос касается самого верхнего узла, то, конечно, никакое прослеживание вверх невозможно, и нужно указать время, ссылаясь на следующую команду верхнего уровня или на команду, только что выполненную. На вопрос "Когда вы поместили В на С?" можно было бы дать и такой ответ: "После того, как я поместил А на В, но прежде, чем я взял D". Подведем итоги:

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

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

Хранение в памяти обращений к функциям хорошо представляет историю работы системы

Выражаясь более точным языком, мысль состоит в том, чтобы для отражения отношений цели - под цели использовать иерархию вложений в списковой структуре. Тот факт, что функция F обращалась к функциям X, Y и Z, представляется списком, в котором F с ее аргументами находится в первой позиции, а описания действий - при X, Y и Z и ниже их, в следующих далее позициях. Ясно, что в описании действия, производимого при обращении, скажем, к X, будет использован список, в котором функция X и ее аргументы находятся в первой позиции, а остальные позиции заняты описаниями соответствующей деятельности, которая была вызвана самой X. Таким образом, эта схема представления рекурсивна.

Функция PUT-AT (ПОМЕСТИТЬ-В), например, делает по существу три вещи, используя три программы GRASP (ВЗЯТЬ), MOVE-OBJECT (ПЕРЕМЕСТИТЬ-ОБЪЕКТ) и UNGRASP (ОТПУСТИТЬ). Поэтому функция PUT-AT должна возвращать что-то наподобие следующего:


Понятно, что это достигается путем добавления переменных Gl, G2 и G3 к переменным функции PROG. Каждая из них полагается равной результату соответствующего обращения, и используется функция LIST для образования необходимой структуры:


Все эти результаты строятся обычно схожим образом, и поэтому они сами по себе будут также некоторыми списками. Таким образом, общий результат в сложных случаях будет представлять собой структуру с большой глубиной вложения, где каждый уровень вложения соответствует некоторому уровню в дереве целей. Вложение заканчивается на функциях, которые не характеризуются интересными обращениями к другим программам. Например, функция UNGRASP (ОТПУСТИТЬ) возвращает просто следующее:


Соответствующий программный код выглядит так:


Теперь функции PUT-AT (ПОМЕСТИТЬ-В) и UNGRASP (ОТПУСТИТЬ) выглядят следующим образом:


Ряд интересных проблем возникает в связи с GET-RID-OF (ИЗБАВИТЬСЯ) и MAKE-SPACE (ОСВОБОДИТЬ-МЕСТО), в которых имеются циклы, и в связи с функцией GRASP (ВЗЯТЬ), которая может обратиться к CLEAR-TOP (ОЧИСТИТЬ-ПОВЕРХ-НОСТЬ). После разрешения этих проблем пересмотренная система будет не только строить план и делать его значением функции PLAN, но также будет записывать историю смены целей как значение функции верхнего уровня. Идущая ниже списковая структура эквивалентна совокупности целей, приведенных ранее на рис. 12.6.


предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь