Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек,11, Языки предст. знаний.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
99.84 Кб
Скачать

VI. Процедуры, утверждения, предикаты.

Вся Пролог- программа целиком называется базой данных. Это название говорит о том, что каждый объект Пролог - программы представляет собой объект данных. Факты, правила, заголовки правил, цели- все они, на уровне синтаксиса, являются просто структурами. Мы имеем некоторую словарную зону, позволяющую нам распознавать контекст, в котором используются эти структуры: факт есть структура для утверждения; цель есть структура для вопроса.

Каждый факт и каждое правило в программе называется утверждением. Правило- это утверждение, имеющее заголовок и тело. Факт – это утверждение, имеющее заголовок и пустое тело.

В нашей программе заголовком каждого утверждения является структура одного и того же типа: с функтором военнослужащий и размерностью 2. Совокупность утверждений, заголовки которых имеют одинаковый функтор и одну и ту же размерность, называется процедурой. Наша программа содержит одну процедуру, состоящую из девяти утверждений. Множество утверждений процедуры определяет некоторое отношение. Отношение, определяемое процедурой, называется предикатом. Число аргументов предиката – это размерность заголовков соответствующих ему утверждений. По аналогии со структурой, размерностью предиката называется число его аргументов. Таким образом, наша программа является предикатом военный размерностью 2. Сокращенно запись фразы: “предикат играет размерностью 2” будет выглядеть следующим образом играет/2. Пролог не строг по поводу разбивки программы на фрагменты при ее записи. Единственное требование – необходимость знаков <пробел> и <новая строка> после точки в конце каждого утверждения. Язык допускает свободное использование комментариев в Пролог – программе. Любой текст между символом /*, находящимся слева от него, и символом */, находящимся справа от него, трактуется как комментарий. Например:

/*

Это комментарий.

Он занимает несколько строк.

*/

Любой текст на какой-либо строке после символа % воспринимается тоже как комментарий. Концом такого комментария является символ перевод строки. Например:

% Процедура для предиката играет/2

играет (музыкант (‘Герман’), инструмент (‘гобой’))

Фрейм-ориентированный язык FRL.

Основная единица знаний в таких языках – фрейм, представляющий собой информационную модель ( или описание ) некоторой стереотипной ситуации. Фрейм в FRL – совокупность поименованных, ассоциативных списков, содержащих до пяти уровней структур. Подструктурами фреймов могут быть слоты, аспекты, данные комментарии и сообщения. Основной структурной единицей являются слоты, отражающие связь между понятиями предметной области. Слот характеризуется своим именем и значением. Имена слотов назначаются проектировщиком базы знаний. Однако FRL имеет также и зарезервированные имена слотов: АКО, INSTANSE, CLAS SIFICATION. В качестве значения слотов могут выступать числа, символы, имена процедур. Фреймы в FRL строятся с помощью процедуры FASSERT. В FRL имеется семь зарезервированных аспектов: VALUE, DELAULT, IF-NEEDET, IF-ADDED, IF-REMOVED, IF-INSTANTIAL, REQUIRE. Данные из аспекта VALUE интерпретируются как значение слота, а из аспекта DELAULT – как значение по умолчанию. Остальные пять аспектов связывают с фреймом процедуральные знания. Процедуры из аспекта IF-ADDED активизируется в том случае, если в слот добавлены новые данные; процедуры из аспекта IF-REMOVED

- если из слота удаляется какое либо данное. Процедуры из аспекта IF-NEEDET запускаются при создании экземпляра фрейма. Аспект REQUIRE содержит процедуры, которые ограничивают значение слота.

Важным свойством языка является наличие в нем встроенного механизма «наследования свойств». Суть этого механизма заключается в том, что все понятия предметной области БЗ организовываются в виде иерархической классификационной системы, где каждое понятие связывается с помощью специальных отложений с более конкретными. Для реализации этих отложений существуют слоты ФКО и INSTANSE. Слот АКО связывает понятие с более общим (родовым). Слот INSTANSE. Связывает понятие с более конкретным (видом). Свойства, присущие всему классу, описывают только во фрейме класса, а остальные фреймы этого класса могут наследовать это свойство в случае надобности.

Процедуры обработки FRL подразделяются на независимые и присоединенные. Независимо от типа эти процедуры пишутся обычно на языке реализации самого FRL. На сегодняшний день большинство FRL-систем написаны на LISP.

Продукционный язык ОРS.

Продукционный язык OPS является универсальным языком программирования, он в первую очередь предназначен для разработки систем ИИ, и, в частности экспертных систем. Программа на этом языке состоит из декларативной и продукционной частей. В языке имеются три вида операторов: оператор описания типов данных TYPE, оператор описания классов CLASS и оператор описания правил RULE. Декларативная часть программы содержит описание типов данных и классов элементов рабочей памяти. Элемент рабочей памяти (класс) является единственно возможным представителем данных в OPS программе. Он представляет собой фиксированную структуру, состоящую из совокупности пар «атрибут-значение». Атрибуты локализованы в пределах одного класса, некоторые атрибуты могут не иметь значения. Допустимые классы элементов рабочей памяти должны быть предварительно описаны в разделе определения классов. Определение класса задает его структуру, типы допустимых значений атрибутов, входящих в класс, и, если это необходимо, начальные значения атрибутов (значения по умолчанию).

Раздел правил записывается после декларативной части и представляет собой совокупность правил. Правило состоит из заголовка и тела правила. Заголовок начинается со слова RULE, за которым следует имя правила и описание переменных (если они используются). Тело правила состоит из левой части, задающей условие применимости правила, и правой части, содержащей последовательность выполняемых действий. Левая часть начинается словами IF, разделителем между левой и правой частями служит слово THEN. Например:

RULE ОСТАНОВКА УСТАНОВКИ 1

IF

ОБЪЕКТ

ИМЯ УСТАНОВКА _1

СОСТОЯНИЕ ОСТАНОВИЛАСЬ

AND

ОБЪЕКТ

ИМЯ УСТАНОВКА _2

СОСТОЯНИЕ РАБОТАЕТ

AND

ОБЪЕКТ

ИМЯ УСТАНОВКА _3

СОСТОЯНИЕ РАБОТАЕТ

THEN

WRITE Установка 1 остановилась

WRITE Распределить ее сырье между установкой 2 и установкой 3

Левая часть состоит из одного или более условных элементов. Каждый условный элемент задает образец, который сопоставляется с содержащимися в рабочей памяти элементами. Левая часть считается сопоставленной, если одновременно сопоставились все входящие в нее условные элементы. Разделителем между условными элементами служит слово AND или ANDNUT. В левой части могут быть использованы предикатные операторов: не равно¸ больше, меньше, не больше, не меньше, не входит в список и др.

Правая часть правила состоит из последовательности императивных утверждений, называемых действиями, которые разделяются на две группы: элементарные, обеспечивающие вывод решения, и вспомогательные, обеспечивающие ввод и другие сервисные возможности. К элементарным относятся: MARE – создание нового элемента рабочей памяти; REMOVE – удаление элемента из рабочей памяти; MODIFY – изменение значений атрибутов, уже находящихся в рабочей памяти. К вспомогательным относятся: HALT – явное прекращение программы; BIND – вызов функций или модулей на других языках программирования; SET – динамическое изменение стратегии вывода решений или подробности объяснения решений, а также операторы вывода сообщений на дисплей или принтер.

Язык CLIPS.

Язык CLIPS разработана NASA и используется для создания экспертных систем. Отличительной особенностью является наличие конструкторов для создания баз данных. CLIPS включает операторы: определения правил, определения фактов, определения глобальных переменных, определения классов, определения модулей (совокупности правил), определения функций и другие. Правила в CLIPS состоят из предпосылок и следствий. Операторы CLIPS позволяют в определенном факте пояснять значения слота, осуществлять проверку наличия фактов. CLIPS поддерживает практически все типы данных, а также поддерживает процедурные функции, реализующие возможные ветвления, организацию циклов в программах и т.п.

Кроме того имеются функции булевой логики, сравнения чисел, практически все математические, логарифмические, тригонометрические функции. Дополнительно имеются функции работы со строками ( объединения строк, выполнения строк, сравнения строк, проверка синтаксиса строк и др.). Функции ввода-вывода поддерживают логические имена устройств и собственно функции ввода-вывода (открыть файл, закрыть, переименовать, удалить и др.).

Один из недостатков: CLIPS не может удовлетворительно работать в реальном времени, когда требуется время реакции менее 0,1 сек.

Для построения интеллектуальных систем в последнее время используются также объектно-ориентированный язык Visual Basic, язык логического программирования Visual Prolog, интегрированная инструментальная среда GURU. Подробнее можно ознакомиться в книге: Н.М.Абдикеев. Проектирование интеллектуальных систем в экономике. М.2004.