|
|||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Проблемно-ориентированные языки. Языки представления знанийЛекция 9. Стремление к эффективной программной реализации моделей представления знаний привело к разработке большого числа языков представления знаний от простых, предназначенных для решения отдельных специальных задач, до мощных универсальных. Общими свойствами ЯПЗ высокого уровня являются следующие; - наличие средств описания типов данных и процедур управления более сложных, чем в универсальных языках программирования; - наличие встроенных механизмов представления поиска и обработки информации; - наличие средств построения дедуктивных алгоритмов. ЯПЗ условно можно разделить на три группы: 1.Языки обработки символьной информации. Характерными представителями этой группы являются LISP, РЕФАЛ, SNOBOL. 2.Языки, ориентированные на поиск решения в пространстве состояний и доказательства теорем. К ним относятся, например, PLANNER,QLISP. 3.Языки, представления знаний общего назначения. Характерными представителями являются KRL, FRL. Наиболее распространенным языком обработки символьной информации является LISP. Основными единицами информации в этом языке являются атомы и списки. Атом – любая последовательность алфавитно-цифровых символов и специальных знаков, заключенных между ограничениями. Атомы могут использоваться для представления имен, отношений, действий, свойств, переменных, а также для представления синтаксических признаков, семантических маркеров. Список – это упорядоченная совокупность элементов, в качестве которых могут выступать либо атомы, либо другие списки. Под выражением в LISP понимается либо атом, либо список. Выражение (6, 8, SPM, B) представляет собой список из четырех элементов, каждый из которых является атомом; выражение (PUT (NHE PEN) (IN (THE TABLE))) – список из трех элементов. Первый элемент – атом, второй – список из двух атомов, третий – двухэлементный список со вторым элементом в виде списка. В LISP есть аппарат интерпретации списков, называемый вычислением. Первый элемент интерпретируется как имя функции, остальная часть рассматривается как множество аргументов функции. Примеры: Список (PLUS 2 4) вырабатывает значение 6 = 2 + 4. Список (TIMES 9 3) вырабатывает значение 27=9х3. LISP имеет целый ряд встроенных стандартных функций, но пользователь может строить и вводить свои функции. Для присвоения значения переменной используется функция SETQ. Например, (SETQ R 4) переменная R получает значение 4. Для обработки списков в LISP используется ряд элементарных функций, таких, как CAR, CDR, CONS и др. Функция CAR в качестве значения выбирает первый элемент списка – аргумента; функция CDR – все элементы списка, кроме первого. Например, (CAR (ABC)) есть А, (CDR (ABC)) есть (BC). Очевидно, сочетание этих функций позволит выбрать любой атом в списке. Предположим, что требуется выбрать второй атом списка (АВС). Это можно сделать выражением(CAR(CDR ' (ABC))). Здесь кавычка является разделителем, указывающим начало обрабатываемого списка. Если функции CAR и CDR используются для разделения списков, то CONS объединяет списки. Пусть имеются два списка – (А) и (ВС). Выражение (CONS A(BC)) даст список (АВС), т.е. атом, стоящий на первом аргументном месте, становится первым элементом нового списка. В LISP есть несколько базовых предикатных функций, принимающих значение Т – истина и NIL – ложь. К ним относятся АТОМ, NULL, EQ и другие. Функция АТОМ проверяет, является ли ее аргумент атомом, а функция LL проверяет, является ли ее аргумент пустым списком. Функция EQ проверяет равенство двух аргументов. Сочетание базовых предикатных функций позволяет строить сколь угодно сложные функции. Невычисляемая функция DEFINE может использоваться для введения функций обработки списков. Например, имеются две символьные переменные – АБИТУРИЕНТЫ и СТУДЕНТЫ. Определим значения этих переменных: (SETQ СТУДЕНТЫ (ПЕТРОВ ИВАНОВ)), (SETQ АБИТУРИЕНТЫ (СИДОРОВ ВАСИЛЬЕВ)) Будем считать, что список студентов может расшириться за счет элементов списка абитуриентов. Тогда, если ВАСИЛЬЕВ стал студентом, его фамилия должна быть удалена из списков абитуриентов и внесена в список студентов. Построим функцию ЗАЧИСЛИТЬ, выполняющую такие действия: (DEFINE (ЗАЧИСЛИТЬ NAME) (SETQ АБИТУРИЕНТЫ (DELETE NAME АБИТУРИЕНТЫ)) (SETQ СТУДЕНТЫ (CONS NAME СТУДЕНТЫ))) Здесь использована функция DELETE, удаляющая из списка, имя которого стоит на втором аргументном месте, элемент, стоящий на первом аргументном месте. Располагая функцией ЗАЧИСЛИТЬ, перевод из списка АБИТУРИЕНТЫ в список СТУДЕНТЫ будет осуществляться записью выражения (ЗАЧИСЛИТЬ ВАСИЛЬЕВ). В настоящее время разработано много диалектов LISP и накоплены обширные библиотеки LISP- программ. Языки, ориентированные на задачи поиска решений и доказательства теорем (языки второй группы), характеризуются достаточно простыми и хорошо определенными методами, но сложными методами обработки информации. Наиболее распространенным является язык PLANNER, который представляет средства для описания предметной области в виде базы данных, состоящей из произвольных выражений LISP, описывающих определенный факт. Языки третьей группы характеризуются следующими особенностями: данные представляются в виде многоуровневой фреймовой структуры; абстрактная модель предметной области – в виде иерархически организованного множества понятий, а конкретная модель ситуации - в виде совокупности взаимосвязанных экземпляров этих понятий; используются механизмы семантического сопоставления образцов. К языкам этой группы относятся KRL и FRL. Большинство языков второй и третьей групп либо являются расширенным вариантом LISP, либо активно используют написанные на LISP процедуры. В качестве языка для систем ИИ, отличного от LISP, используется язык PROLOG, который является языком высокого уровня, основанным на математической логике. Основной особенностью программы является наличие нескольких равноправных семантик. Текст на этом языке может трактоваться как декларативное описание некоторых свойств и как описание процедур. Основной единицей программы является описание отношения, а программа представляет собой множество описаний отношений и базу данных, содержащую факты – экземпляры отношений. Все запросы в языке формулируются в терминах введенных или встроенных отношений. Различают три вида запросов: проверить истинность выражения; выдать все объекты, удовлетворяющие описанию; добавить факт. Пролог – это язык программирования, в котором решения задач выражаются с помощью фактов и правил. Факт – это фраза без условий, которая используется для того, чтобы показать простую взаимосвяэь данных, т. е. отношения между объектами. Например Знает (мэри, боб). Выражает мысль о том, что Мэри знает Боба. С точки зрения синтаксиса факт состоит из имени предиката (знает) и списка аргументов, заключенных в скобки. Предикат может обладать произвольным количеством аргументов. Правила – выводимые из фактов следствия. Форма записи правила: Заголовок:- Тело. Заголовок правила имеет точно такую же форму, как и факт. После заголовка стоит обозначение:- (которое читается как «если»), а затем располагается тело правила..Каждое условие, входящее в тело, называется подцелью. Для того, чтобы заголовок оказался истинным, необходимо, чтобы каждая подцель, входящая в тело, была истинной. I. Терм. Пролог предусматривает только один тип данных, называемый термом. Любой объект задачи представляется термом. Например, дату можно представить следующим термом:
дата(‘четверг’,22,'март’,1998)
Такой терм называется структурированным или просто структурой. Структура состоит из функтора, и последовательности компонентов. Функтор - имя отношения, компоненты - объекты отношения. Размерность структуры равна числу компонентов, входящих в нее. Синтаксис Пролога требует, чтобы компоненты структуры заключались в скобки и разделялись запятой. В Прологе используется три вида компонент. Два из них являются константами, это атомные константы и числовые константы. Третий вид компонент – это переменные 1) Атомными константами в приведенном примере являются первый и третий компоненты структуры. Атом может содержать любой алфавитно-цифровой знак и должен заключаться в апострофы. Примеры атомов: 'моя мать' 'Иван, да, Марья' '_ первый' 'Георгий' 2) Числовые константы или просто числа. Примеры: 205 -10 3.75 3)Переменные. Примеры: A, B, R II. Полноценная программа. Ниже приведена Пролог-программа, содержащая информацию о военнослужащих и их званиях: Павлов генерал Климов полковник Максимов полковник военный ('Павлов' 'генерал'). военный ('Климов ', 'полковник'). военный ('Максимов ', 'полковник'). В программе каждый военный представляется структурой, имеющей функтор военный и размерность 2. Компоненты структур являются атомами. Первый представляет фамилию военнослужащего, а второй - его звание. Точка, стоящая в конце записи структуры говорит о том, что данная структура является фактом. Дополним нашу программу другими фактами: военный ('Павлов' 'генерал'). военный (' Климов', 'полковник'). военный ('Максимов', 'полковник'). военный ('Тихонов' 'сержант'). военный ('Николаев', 'сержант'). военный ('Абрамов', 'капитан '). военный ('Дмитриев' 'лейтенант'). военный ('Федоров', 'капитан'). военный ('Дарьин', ‘майор'). Теперь можно задавать вопросы. Вопрос, часто называемый целью, имеет форму структуры, перед которой ставится символы?-, а после структуры ставится точка. Пример вопроса: ?- военный ('Тихонов ', 'сержант '). Данный вопрос означает "Имеет ли военнослужащий Тихонов звание сержанта". Пролог сопоставляет структуру вопроса с имеющимися фактами. Если сопоставление найдено, Пролог выдает ответ "да", если же ни одного сопоставления не найдено выдается ответ "нет". Таким образом, ответом на наш вопрос является "да". Если мы зададим вопрос: ?- военный ('Климов', 'капитан '). то получим ответ: "нет" Или зададим другой вопрос: ?- военный('Давыдов', 'генерал'). Будет дан ответ "нет", потому что в программе нет никаких сведений о военнослужащем по фамилии Давыдов. Вопрос может содержать в качестве компонентов переменные. Пример вопроса, содержащего переменную: ?-военный ('Абрамов', R). Этот вопрос можно интерпретировать следующим образом: "В каком звании Абрамов". После сопоставления Пролог выдаст значения, которыми будут заменены переменные, входящие в цель. Ответом на вопрос будет: R = капитан Допустим, мы хотим узнать: "Какие военнослужащие имеют звание полковника?" Вопрос на Прологе формулируется так: ?-военный(S, 'полковник'). Пролог даст ответы: S = Климов S = Максимов Наша программа может быть использована для ответа на более сложные вопросы: "Имеют ли Абрамов и Федоров одинаковые звания?" Для этого перефразируем наш вопрос: "Какое звание у Абрамова и имеет ли Федоров то же звание?" Вопрос на Прологе выражается следующим образом: ?-военный ('Абрамов', R),военный ('Федоров', R). Ответ: R = капитан III. Правило сопоставления структур. Существует правило сопоставления двух структур. Две структуры сопоставляются, если: -они имеют один и тот же функтор; -они имеют одинаковую размерность; -компоненты на одинаковых позициях обеих структур сопоставляются. Две компоненты сопоставляются, если: -обе являются переменными; -одна из них переменная; -обе являются структурами и эти структуры сопоставляются Пример 1. Будут ли сопоставляться структуры: оркестр ('струйные', B,C,D) и оркестр ('струйные', 'духовые', 'ударные', 'клавишные'). Проверяем каждое из трех требований. Обе структуры имеют одинаковый функтор - оркестр и одинаковую размерность 4. Теперь мы должны сопоставить компоненты на одинаковых позициях. Первые компоненты - одинаковые атомы - струнные. При рассмотрении вторых компонент значение - духовые замещает переменную B в первой структуре. Аналогично дело обстоит и с третьими компонентами. Таким образом, мы можем заключить, что структуры сопоставляются. Пример 2. Будут ли сопоставляться структуры: комплектующие (станок ('патрон'), робот ('захватное устройство')) комплектующие (Оборудование, Оборудование) Обе структуры имеют один и тот же функтор комплектующие и одну и ту же размерность 2. Теперь проверим, сопоставляются ли элементы на одинаковых позициях. Для первых компонент имеем: структура станок('патрон') сопоставляется с переменной "Оборудование", при этом значение станок('патрон') замещает переменную "Оборудование". Для вторых компонент имеем структура робот ('захватное устройство') должна быть сопоставима с переменной "Оборудование", т.е. заместить переменную "Оборудование". Однако в Прологе переменная в одной структуре может иметь лишь единственное значение. Поэтому невозможно осуществить подстановку различных значений на место одной и той же переменной в одной структуре. Таким образом, эти две структуры несопоставимы. IV. Рекурсия в структурах. Представим, что существует военнослужащий, имеющий звание генерал и фамилию Рядовой. Существование военнослужащего с такой фамилией может быть описано с помощью следующего факта: Военный (‘рядовой’, ’генерал’). Если мы захотим задать вопрос: “Кто служит в данном, воинском подразделении и какое звание у этого военнослужащего?”, мы должны будем сформулировать вопрос в следующем виде: ?-военный (А, В). Для генерала Рядового ответом на него будет: А = Рядовой В = генерал При таком ответе может возникнуть вопрос, где же фамилия военнослужащего. Можно предотвратить возникновение этого затруднения путем представления фамилии и звания с помощью структур, функторы которых поясняют смысл этих компонентов. Для представления фамилии военнослужащего выберем структуру с функтором фамилия и размерностью 1, а для представления звания структуру с функтором звание такой же размерности. Теперь мы можем дать сведения о военнослужащем в виде такого факта: военный (фамилия (‘Рядовой’), звание(‘генерал’)). при ответе на вопрос: ?- военный (А, В). Пролог выдаст более корректный ответ: A = фамилия (‘Рядовой’) В = звание (‘генерал’) Перепишем нашу программу, так как это было предложено для генерала Рядового: военный (фамилия ('Павлов'), звание ('генерал')). военный (фамилия ('Климов'), звание ('полковник')). военный (фамилия ('Максимов'), звание ('полковник')). военный (фамилия ('Тихонов') звание ('сержант')). военный (фамилия ('Николаев'), звание ('сержант')). военный (фамилия ('Абрамов'), ' звание (капитан ')). военный (фамилия ('Дмитриев') звание ('лейтенант')). военный (фамилия ('Федоров'), звание ('капитан')). военный (фамилия ('Дарьин'), звание (‘майор')). V. Правила. Применение правил имеет значительные преимущества перед простым перечислением некоторых отношений. Применяя правила, программист может выразить общий закон, управляющий отношением. Например, вопрос: “Имеют ли Абрамов и Федоров одинаковые звания?” ?-военный (фамилия(‘Абрамов’),R),военный(фамилия(‘Федоров’),R). Этот вопрос представлен конъюнкцией двух функций. Теперь выразим закон: “Два любых военнослужащих имеют одинаковое звание, если каждый из них имеет звание R.” одинаковое_ звание (А, В):- военный (А,R), военный (В,R). Правило имеет заголовок и тело, которые разделяются специальным символом “:-”, который называется (произносится) “если”. Тело правила состоит из одной или нескольких подцелей, которые разделяются запятой. Каждая цель может быть структурой. В конце правила ставится знак завершения – точка. В приведенном примере: одинаковое_ звание (А, В):- -заголовок правила, военный (А,R), военный (В, R). -тело правила, военный (А,R) -первая подцель, военный (В,R). -вторая подцель. Приведенное правило говорит о том, что отношение в заголовке правила имеет место, если имеют место все отношения в теле правила. Таким образом, смысл правила в приведенном примере таков: “Истинно то, что военный А имеет то же самое звание, что и военный В, если истинно то, что военный А имеет звание R, и то, что военный В имеет звание R.” Добавим это правило к нашей программе: военный (фамилия ('Павлов'), звание ('генерал')). военный (фамилия ('Климов'), звание ('полковник')). военный (фамилия ('Максимов'), звание ('полковник')). военный (фамилия ('Тихонов') звание ('сержант')). военный (фамилия ('Николаев'), звание ('сержант')). военный (фамилия ('Абрамов'), ' звание (капитан ')). военный (фамилия ('Дмитриев') звание ('лейтенант')). военный (фамилия ('Федоров'), звание ('капитан')). военный (фамилия ('Дарьин'), звание (‘майор')). одинаковое_ звание (А, В):- военный (А,R), военный (В,R). Теперь форма вопроса, который раньше состоял из двух функций будет следующей: ?-одинаковое_ звание (фамилия (’Абрамов’)), фамилия(‘Федоров’)) ответом будет: да Существуют другие возможности использования этого правила. Например, если мы хотим задать вопрос: “Кто из военнослужащих имеет то же звание, что и Максимов?” мы должны задать его следующим образом: ?- одинаковое_ звание (Военный, фамилия (‘Максимов’)). и получим ответ: Военный = фамилия (‘Климов’); Военный = фамилия (‘Максимов’); нет Можно задать вопрос, эквивалентный данному: ?- одинаковое_ звание (фамилия(‘Максимов’), Военный). При этом ответы будут теми же. Может показаться странным, почему Пролог выдал второй ответ. Но это действие является правильным потому, что в правиле ничего не говориться о том, что военнослужащие должны быть разными людьми. Поэтому является истинным, что каждый военнослужащий имеет то же звание, что и он сам. Можно задать и такой вопрос: “Какие военные имеют одинаковые звания?” На Прологе вопрос формулируется так: ?- одинаковые_ звания (X, Y). Возможны различные варианты подстановок для X и Y. Приведем начало этого списка: X= фамилия (‘Павлов’) Y= фамилия (‘Павлов’) X= фамилия (‘Климов’) Y= фамилия (‘Климов’) X= фамилия (‘Климов’) Y= фамилия (‘Максимов’) X= фамилия (‘Максимов’) Y= фамилия (‘Климов’) X= фамилия (‘Максимов’) Y= фамилия (‘Максимов’) X= фамилия (‘Тихонов’) Y= фамилия (‘Тихонов’) X= фамилия (‘Тихонов’) Y= фамилия (‘Николаев’) X= фамилия (‘Николаев’) Y= фамилия (‘Тихонов’) и т. д. По тому, как порождаются эти ответы, становится ясным, что Пролог не только перечисляет идентичные пары, но и выдает дубликаты, связанные с реверсивными подстановками. Это происходит в силу рефлексивности отношения одинаковое_ звание. Такое дублирование ответов Прологом является абсолютно правильным, хотя и ненужным. 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.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.039 сек.) |