9 Анализ традиционных языков программирования и представления знаний




Скачать 382.34 Kb.
Название9 Анализ традиционных языков программирования и представления знаний
страница1/3
Дата27.12.2012
Размер382.34 Kb.
ТипДокументы
  1   2   3
Глава 9. Инструментальные средства проектирования интеллектуальных систем.


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

Выше уже говорилось, что ИИС представляют собой некоторый программный комплекс, позволяющий решать производственный и экономические задачи на уровне человека – оператора или управленца (эксперта). Однако очевидно, что любую программу можно написать на машинно – ориентированном языке (ассемблере) или на универсальном языке высокого уровня (ПЛ/1, Си, Бейсик, Алгол, Ада, Фортран, Паскаль и т.д.). В этой связи возникает вполне справедливый вопрос: зачем рассматривать специализированные средства, для изучения которых требуется определенное время, если универсальным языком высокого уровня (либо языком ассемблера) владеет практически любой программист? Ответ на этот вопрос взят из практики: процесс программирования систем ИИ на специализированных средствах занимает в 2-3 раза меньше времени, чем на универсальных. Однако следует всегда помнить, что параметры эффективности (объем памяти и быстродействие) ИИС, реализованных на базе специализированных средств, в большинстве случаев ниже, чем при реализации ИИС на универсальных средствах.

Еще одним фактором, существенным для выбора ИИС инструментальных программных средств при разработке ИИС, является потенциальная возможность взаимодействия с программными средствами, используемыми на различных уровнях иерархии интегрированных корпоративных информационных систем.

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

Рассмотрим наиболее известные и широко применяемые программные средства интеллектуальных систем.


9.1. Анализ традиционных языков программирования и представления знаний.


9.1.1. Специализированный язык LISP.

Одним из самых популярных языков программирования в системах ИИ является язык LISP[71]. Этот язык был создан в 60-х годах американским ученым Дж. Маккарти и его учениками. На сегодняшний день существует около 20 диалектов этого языка. Наиболее известными являются INTERLISP, FRANZLISP, QLISP, COMMONLISP. В Советском Союзе разработаны также несколько версий языка LISP. На языке LISP написаны многие экспертные системы (MYCIN, INTERNIST, KEE и др.), системы естественно – языкового общения (MARGIE, SHRDLU, ДИЛОС и др.), интеллектуальные операционные системы (FLEX).

Популярность языка LISP в первую очередь объясняется тем, что он с помощью довольно простых конструкций позволяет писать сложные и изящные системы обработки символьной информации. К сожалению, почти все существующие LISP – системы имеют низкую вычислительную эффективность. Именно это не дает возможность языку LISP выйти за рамки «академических» экспериментальных систем. Однако бурное повышение производительности современных компьютеров, а также разработка LISP – машин типа С/330, SYMBOLICS и т.д. вселяет оптимизм в отношении будущего языка.

Язык LISP имеет очень простой синтаксис, поскольку возможны только две его конструкции: атом и список.

Атом – элементарная конструкция языка LISP, характеризуемая своим именем и значением. В некоторых LISP – системах с атомом связывается также определенный список свойств. Примерами атомов могут служить: А, В, А1, ВРЕМЯ ВЫЛЕТА, ВЫПУСК, АИ-93 и т.д.

Список – конструкция LISP, состоящая из множества атомов и подсписков. В LISP принята скобочная нотация описания списков. Примеры списков (А1, А2,…,АК), (А,В) (ВРЕМЯ ВЫЛЕТА, 15_40) (ВЫПУСК АИ-93).

Существенной особенностью языка LISP является то, что здесь «данные» и «программы» внешне ничем не отличаются друг от друга. Это дает возможность писать на LISP «программы», манипулирующие не только данными, но и «программами». Именно данное свойство позволяет LISP стать изящным средством программирования систем ИИ. Понятия «данные», и «программа» в LISP не используются, их заменяют такие понятия, как выражение и функция.

LISP – функциональный язык. Все процедуры обработки информации оформляются в виде функций. Благодаря стандартному набору системных функций, LISP может быть «расширен» за счет пользовательских функций. Системные функции делятся на арифметические, списковые функции, функции ввода – вывода, предикаты и др.

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

Рекурсивность LISP удобна при решении очень популярной в искусственном интеллекте задачи «поиска по дереву», которая является довольно обобщенной и охватывает широкий класс конкретных задач, начиная шахматными и кончая задачами «принятия решений» или управления сложными объектами. В каждом конкретном случае вершины дуги будут иметь свою семантику. Например, при решении шахматной задачи вершинам могут соответствовать возможные позиции, а дугам те или иные ходы, приводящие к этим позициям. Последовательность ходов, обязательно приводящих к «выигранной» позиции, и будет решением данной задачи. Древовидная структура очень часто имеет также и сценарий диалога человека с ЭВМ. В этом случае с вершинами соотносятся состояния (шаги) диалога, а с дугами – возможные переходы из одного состояния в другое.

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

Одним из известных языков представления знаний является язык FRL (Frame Representation Language)[92], относящийся к классу фрейм - ориентированных. Основная единица знания в таких языках – фрейм, представляющий собой информационную модель (или описание) некоторой стереотипной ситуации. «Стереотипная ситуация», является обобщением таких понятий, как действия, процессы, события, объекты, свойства, модификаторы и т.д.

Фрейм в FRL – это совокупность поименованных, ассоциативных списков, содержащая до пяти уровней подструктур. Подструктурами фреймов могут быть слоты, аспекты, данные, комментарии и сообщения. Основной структурной единицей во фрейме являются слоты, отражающие взаимосвязи между понятиями предметной области. Слот характеризуется своим именем и значением. Имена слотов назначаются проектировщиками БЗ. Однако FRL имеет также и зарезервированные имена слотов: АКО, INSTANSE, CLAS SIFICATON. В качестве значения слотов могут выступать числа, символы, имена других фреймов, имена процедур.

Фреймы в FRL строятся с помощью процедуры FASSERT.

В FRL имеется семь зарезервированных аспектов: ¤VALUE, ¤DEFAULT, ¤IF-NEEDED, ¤IF-ADDED, ¤IF-REMOVED, ¤IF-INSTANTIAD, ¤REQUIRE. Данные из аспекта ¤VALUE интерпретируются как значение слота, а из аспекта ¤DEFAULT – как значение по умолчанию. Остальные пять аспектов связывают с фреймом процедуральные знания. Процедуры из аспекта ¤IF-ADDED активизируются в том случае, если в слот добавлено новое данные; из аспекта ¤IF-REMOVED – если из слота удаляется то или иное данные. Процедуры из аспекта ¤IF-NEEDED запускаются при создании экземпляров фрейма. Аспект ¤REQUIRE содержит процедуры, которые ограничивают значение слота.

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

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


9.1.3 Язык логического программирования PROLOG.

В последнее время к разработке ЭС все чаще стал привлекаться язык программирования Пролог [30]. Свое наименование Пролог получил от сокращения «Программирование логики» (PRogramming in LOGic). Математической основой Пролога являются исчисление предикатов преимущественно первого порядка, метод резолюции Робинсона, теория рекурсивных функций.

Основной конструкцией языка (в форме, принятой для Пролога), является импликация:

А← В1, В2, …., Вn, называемая правилом, где А112….,Вn – предикаты.

Смысл ее таков «А истинно, если истинно В1 и истинно В2 и … и истинно Вn». Например;

РЕЖИМ_УСТАНОВКИ («РЕЖИМ_1») ТИП_НЕФТИ)

(«ЗАПАДНО-СИБИРСКАЯ»)

КОЛ_НЕФТИ (Х),

БОЛЬШЕ (Х,0)

Смысл этого правила: «ЕСЛИ тип нефти – западно – сибирская и количество нефти больше нуля, то технологическая установка работает на первом режиме».

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

  1. А - такая конструкция называется фактором и имеет смысл: «А истинно всегда». Например: ВХОДИТ («УСТАНОВКА - 26», «ЦЕХ № 2»), т.е. установка 26 входит в цех № 2.

  2. В1, В2, …,Вn – данная конструкция носит название «вопрос» и означает: «Истинно ли В1В2 Вn? (знак - конъюнкция)». Например: РЕЖИМ_УСТАНОВКИ («РЕЖИМ_2»), т.е. следует проверить работает ли установка во втором режиме?

Предикаты Пролога имеют вид:

<ИМЯ предиката> (<аргумент 1>, … <аргумент К>)

Имя предиката можно рассматривать как наименование отношения на множестве аргументов. Аргументом являются либо константа (атом, атомическое выражение), либо переменная. Переменные используются для построения более сложных зависимостей:

ВХОДИТ (Х, «ЗАВОД НПЗ1») ВХОДИТ (Х, «ЦЕХ_№-2»)

Т.е. если некоторый объект (Х) входит цех №2, то он входит в НПЗ1;

ВХОДИТ (Х,У) ВХОДИТ (Х, Z), ВХОДИТ (Z,Y).

Здесь Х входит в У, если Х входит в Z, а Z входит в У.

При использовании переменных «в вопросе» можно получить их значения в качестве результата. Например: РЕЖИМ_УСТАНОВКИ (Х). Если режим установки известен и определен, то в качестве ответа получим логическое «да» или «истинно», а в качестве побочного эффекта получим значение переменной Х, т.е. действующий режим работы установки, например Х= «РЕЖИМ_2».

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

Существующие системы программирования Пролога имеют большой набор «встроенных» предикатов (т.е. предикатов, понимаемых самим Прологом), которые обеспечивают выполнение арифметических операций, строковую (символьную) обработку, функции ввода-вывода и целый ряд специфических функций. За счет наличия встроенных предикатов язык Пролог можно отнести к универсальным языкам программирования и даже к языкам системного программирования.

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

Здесь не преследовалась цель дать полное описание языка Пролог, поэтому многие элементы языка (такие, как сопоставление, backtracking и др.) нами не рассматривались.

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


9.1.4. Продукционный язык OPS.

Язык относится к числу продукционных. Являясь универсальным языком программирования, он в первую очередь предназначен для разработки систем ИИ, и, в частности экспертных систем. Идеология языка OPS нашла отражение в целом ряде практических реализаций, достаточно сильно отличающихся друг от друга. Одной из первых и наиболее известной является реализация OPS-5, выполненная на одной из версий Лиспа (Franz LISP). Поэтому синтаксис OPS –5 максимально приближен к синтаксису Лиспа. На языке OPS – 5 создан ряд промышленно эксплуатируемых экспертных систем для фирмы DEC с объемом баз знаний от 1000 до 5000 правил. Одной из последних, но уже достаточно широко известной реализацией является OPS-83[90]. Особенности этой реализации – наличие некоторых конструкций, характерных для процедурных языков программирования, а также сильная типизация данных.

Говоря об общих отличительных чертах семейства языков OPS, необходимо отметить наличие:

  • программного управления стратегий вывода решений;

  • развитой структуры данных и принципиальной эффективности реализации.

Язык OPS имеет типичную для продукционных систем архитектуру, включающую в себя базу правил, рабочую память и механизм вывода. База правил состоит из неупорядоченной совокупности правил, рабочая память – из дискретных объектов, называемых элементами рабочей памяти. Элемент рабочей памяти может быть добавлен в рабочую память, удален из нее или модифицирован. Механизм вывода является стандартным для системы продукций циклом управления. На первой фазе цикла выбираются все правила, левые части которых сопоставились с содержимым рабочей памяти. На второй фазе правило выполняется. Встроенный в OPS механизм вывода непосредственно поддерживает только прямой вывод, однако в языке имеются средства для организации обратного и смешанного выводов.

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

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

Класс

Атрибут – 1

значение

Атрибут –2

значение

Например, элемент памяти «Установка 1 предприятия» имеет вид:

ОБЪЕКТ

Имя

Установка 1

Входит в

Цех 1

Состоит из

(колонна 1, колонна 2, колонна 3)

Получает сырье от

Резервуар 5

Тип сырья

Нефть

Вырабатывает

Керосин

Поставляет продукцию

(установка 3, установка 4).

Элементарным объектом данных, имеющим значение является атрибут. Атрибуты локализованы в пределах одного класса, некоторые атрибуты могут не иметь значения. Каждый

Элемент рабочей памяти относится к определенному классу. Допустимые классы элементов рабочей памяти должны быть предварительно описаны в разделе определения классов. Определение класса задает его структуру, типы допустимых значений атрибутов, входящих в класс, и, если это необходимо, начальные значения атрибутов (значения по умолчанию).

Отметим, что все используемые типы данных (кроме встроенных) должны быть явно описаны в операторах TYPE или CLASS; особенно удобными при программировании экспертных систем являются произвольные типы данных, которые позволяют следить за правильностью вводимых пользователем данных и допустимых значений в процессе логического вывода.

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

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

IF
  1   2   3

Похожие:

9 Анализ традиционных языков программирования и представления знаний iconУчебно-методический комплекс по факультативному курсу «основы логического программирования»
Основная задача курса заключается в том, чтобы дать студентам представления о возможностях декларативных языков программирования,...
9 Анализ традиционных языков программирования и представления знаний iconЯзыки программирования Лектор 2010/11 уч года: к ф-м наук Холоденко А. Б.
Рассматриваются основные понятия и конструкции современных языков программирования. Особое внимание уделяется объектно-ориентированным...
9 Анализ традиционных языков программирования и представления знаний iconУчебно-методический комплекс по дисциплине по выбору «основы логического программирования» для специальности
Основная задача курса заключается в том, чтобы дать студентам представления о возможностях декларативных языков программирования,...
9 Анализ традиционных языков программирования и представления знаний iconУчебно-методический комплекс по дисциплине по выбору «введение в логическое программирование» для специальности
Основная задача курса заключается в том, чтобы дать студентам представления о возможностях декларативных языков программирования,...
9 Анализ традиционных языков программирования и представления знаний iconОсновы вычислительной
Структурное программирование. Типология языков программирования. Требования к языкам программирования. Языки системного программирования....
9 Анализ традиционных языков программирования и представления знаний iconЛекция Основы ооп поколения языков программирования
В развитии инструментального программного обеспечения рассматривают пять поколений языков программирования (ЯП). Языки программирования...
9 Анализ традиционных языков программирования и представления знаний iconРадиофизический факультет
Правила и приемы использования языков программирования, рассмотренные в лекционном курсе, используются в рамках лабораторных занятий...
9 Анализ традиционных языков программирования и представления знаний iconРадиофизический факультет
Правила и приемы использования языков программирования, рассмотренные в лекционном курсе, используются в рамках лабораторных занятий...
9 Анализ традиционных языков программирования и представления знаний iconПрограмма вступительного испытания (устный экзамен) по дисциплине «Языки программирования»
История возникновения и развития языков программирования. Императивное программирование. Языки функционального программирования....
9 Анализ традиционных языков программирования и представления знаний iconКурс лекций 20 часов Темы занятий Количество часов Раздел Системы разработки и языки программирования
Системы программирования. Иерархия языков программирования. Парадигмы программирования
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница