logo search
Интеллектуальные Информационные Системы / лекции

2.1. Фреймы

Фреймы предложены в 1975 году Марвином Минским [31].

Фрейм (рамка в переводе с англ.) - это единица представления знаний, запомненная в прошлом, детали которой могут быть изменены согласно текущей ситуации.

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

Фрейм отражает основные свойства объекта или явления. Структура фрейма записывается в виде списка свойств, называемых во фрейме слотами. Рассмотрим запись фрейма на языке FRL (Frame Representation Language) [32] - языке, похожем на LISP, но только внешне из-за наличия скобок.

Например, фрейм СТОЛ может быть записан в виде 3 слотов: слот НАЗНАЧЕНИЕ (purpose), слот ТИП (type) и слот ЦВЕТ (colour) следующим образом:

(frame СТОЛ

(purpose (value(размещение предметов для

деятельности рук)))

(type (value(письменный)))

(colour (value (коричневый))))

Во фрейме СТОЛ представлены только ДЕКЛАРАТИВНЫЕ средства для описания объекта, и такой фрейм носит название фрейм-образец. Однако существуют также фреймы-экземпляры, которые создаются для отображения фактических ситуаций на основе поступающих данных и ПРОЦЕДУРАЛЬНЫХ средств (демонов), например, следующих:

IF-DEFAULT - по умолчанию

IF-NEEDED - если необходимо

IF-ADDED - если добавлено

IF-REMOVED - если удалено

Слот IS-A или AKO (A Kind Of) определяет иерархию фреймов в сети фреймов. Такая связь обеспечивает наследование свойств. Слот isa указывает на фрейм более высокого уровня, откуда неявно наследуются свойства аналогичных слотов.

Рассмотрим фрагмент описания из "мира блоков" (рис. 2.1) в виде фреймов.

Рис. 2.1.  "Мир блоков"

(frame (name (Cube))

(isa (Block World))

(length (NULL))

(width (IF-DEFAULT (use length)))

(height (IF-DEFAULT (use length))))

(frame (name (B1))

(isa (Cube))

(color (red))

(length (80)))

(frame (name (B2))

(isa (Cube))

(color (green))

(length (65))

(who_put (value (NULL))

(IF_NEEDED (askuser))))

Слот isa указывает на то, что объекты B1 и B2 являются подтипом объекта Cube и наследуют его свойства, а именно, length = width = height. Демон IF_NEEDED запускается автоматически, если понадобится узнать, кто поставил B2 на стол. Полученный ответ (Робби) будет подставлен в значение слота who_put. Аналогично работают демоны IF-ADDED и IF-REMOVED.

Допустим, однорукому роботу Робби дается приказ "Возьми желтый предмет, который поддерживает пирамиду". На языке представления знаний (ЯПЗ) вопрос записывается так:

(object ? X

(color (yellow))

(hold ? Y

(type (pyramid))))

Программа сопоставления с образцом находит в базе знаний описание объектов:

(frame (name (B3))

(type (block))

(color (yellow))

(size (20 20 20))

(coordinate (20 50 0))

(hold (P2)))

и

(frame (name (P2))

(type (pyramid))

...)

Ответ получен X = B3, Y = P2 и Робби выдается команда take(object=B3).

Таков общий механизм представления знаний в виде фреймов. Реализация этого механизма потребует решения других, более сложных проблем, например, автоматического ввода знаний для трехмерных объектов, работы с трехмерными быстродвижущимися объектами (своеобразный тест на реакцию) и т.д. Эти проблемы ждут своего эффективного решения.