Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Вопросы для самоконтроля

  • Охарактеризуйте программирование, управляемое данными!

  • Какие функции и спецформы применяются в программировании, управляемом данными?

  • В чем суть метода программирования, управляемого событиями?

  • Что из себя представляет процедура сопоставления с образцом?

  • Что из себя представляют списочные образцы?

  • Что из себя представляют переменные в образцах?

  • Что из себя представляют предикатные образцы?

  • Для чего используется продукционное программирование?

  • Как выполняется реализация логического программирования в Лисп-системах?

Вопросы на самостоятельную проработку

К оглавлению

Лекция 10. Представление знаний в программах на Лиспе Процедурный подход к представлению знаний

При процедурном подходе к представлению знаний поведение и свойства объектов представляют в форме процедур (в Лиспе – функций). Процедуры взаимодействуют:

  • через поток управления, вызывая друг друга (возможно рекурсивно) в зависимости от текущего состояния задачи,

  • через общую базу данных, в которой отображаются состояния объектов.

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

Значения свойств пероедвигаемых объектов

Название свойства

Пример значения

Опирается_на - supported_by

стол - table

Служит опорой – directly_supports

(двигатель горелка) – (engine burner)

Местоположение - position

(1 1 0) - координаты

Размер – size

(2 2 2)

Тип – type

куб – boiler

Цвет – color

красный - red

Значения свойств манипулятора робота

Название свойства

Пример значения

Держит (grasping)

nil/или имя объекта

Местоположение (position)

(2 5 7)

Функции get и prop извлекают свойства, сопоставленные атомам или устанавливают их значения (вместо putprop в Common Lisp применяется setf):

(get ¢hand ¢grasping) -> nil ;; атом hand, свойство grasping

(get ¢hand ¢position) -> (2 5 7)

(putprop ¢hand ¢ (1 1 4) ¢position) -> (1 1 4) ;; установка значения для свойства position

Рассмотрим только 1 из функций, используемых в задаче планирования движений манипулятора:

(defun grasp(object) ;; функция описывает процедуру «взятия»

(prog (kruft)

(if (equal object ;; м.б. задача уже выполнена?

(get ¢hand ¢grasping)) (return t) nil)

(if (get object ¢directly_supports) ;; объект что-либо поддерживает?

(if (clear_top object) ;; clear_top освобождает поверхность объекта

nil

(report ¢(grasp “пов-ть объекта невозможно освободить”))) nil)

(if (setq kruft (get ¢hand ¢grasping)) ;; м.б. манипулятор чем-то занят?

(if (ungrasp kruft)(get_rid_of kruft) nil) nil) ;; освобождаем манипулятор

(move_hand (topcenter (get object ¢position) object))

(putprop ¢hand object ¢grasping) ;; изменяем свойство grasping манипулятора

(setq plan (cons (list ¢grasp object) plan))

(return t)

)

)

Если поверхность перемещаемого объекта несвободна, то выполняется обращение к функции clear_top (для освобождения поверхности, тем же роботом-манипулятором). Если задачу выполнить не удается (clear_top возвращает nil), то выполняется обращение к функции report. Эта функция реализует диалог с пользователем. Если занят сам манипулятор, то выполняется вызов функции ungrasp. Это выполняется сразу, если предмет, находящийся в «руке» робота опирается на что-либо. Если это не так, то вызывается функция get_rid_of (избавиться). Функция top_center определяет местоположение «руки» робота, которое она должна занять, чтобы взять предмет (object). Для этого анализируется его свойство ¢position. Функция grasp и вызываемые из нее clear_top, get_rid_of, move_hand – все добавляют данные в список plan.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]