У вас вопросы?
У нас ответы:) SamZan.net

Оно связано с разработкой моделей представления знаний созданием баз знаний образующих ядро экспертных с

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

  1.  Основные направления развития искусственного интеллекта

Разработка интеллектуальных систем, основанных на знаниях.  Оно связано с разработкой моделей представления знаний, созданием баз знаний, образующих ядро экспертных систем.

Нейросетевые и нейрокомпьютерные технологии. Это альтернатива предыдущему как в идеологическом, так и в практическом плане. Искусственные нейронные сети и нейрокомпьютеры в значительной мере заимствуют принципы работы головного мозга. Знания в них не отделены от процессора, а равномерно распределены и существуют неявно в виде сил синаптических связей. Такие знания не закладываются изначально, а приобретаются в процессе обучения.

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

Игры и творчество.  В основе этого направления лежит один из ранних подходов - лабиринтная модель плюс эвристики. Кроме того, в современных программах-игроках наиболее полно удалось реализовать центральную идею искусственного интеллекта - обучение, самообучение и самоорганизацию.

Компьютерная лингвистика. Начиная с 50-х гг. XX в. и по настоящее время одной из популярных тем исследований искусственного интеллекта является область машинного перевода. Первая программа в этой области - переводчик с английского языка на русский. Первая идея - пословный перевод.

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

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

Интеллектуальное математическое моделирование. Это компьютерное математическое моделирование с использованием методов искусственного интеллекта.

  1.  Нейросеть; области применения нейрокомпьютеров

Нейросеть – это обучаемая система. Она действует не только в соответствии с заданным алгоритмом и формулами, но и на основании прошлого опыта.

  1.  Управление в реальном времени, в том числе:
    •  

  •  самолётами и ракетами,
    •  гибридным двигателем автомобиля
    •  пневмоцилиндром
    •  сварочным аппаратом 
    •  электропечью
    •  турбогенератором
  1.  Распознавание образов:
    •  

  •  изображений,  человеческих лиц, букв, отпечатков пальцев в криминалистике, речи, сигналов радара и сонара,
    •  элементарных частиц и происходящих с ними физических процессов (эксперименты на ускорителях или наблюдение за космическими лучами),
    •  заболеваний по симптомам (в медицине)
    •  признаков опасности в системах безопасности,
  1.  Прогнозирование в реальном времени:
    •  погоды,
    •  курса акций  
    •  исхода лечения,
    •  политических событий (результатов выборов, международных отношений и др.),
  2.  Оптимизация — поиск наилучших вариантов:
  3.  Обработка сигналов при наличии больших шумов.
  4.  Телекоммуникационное мошенничество, его обнаружение и предотвращение с помощью нейросетевых технологий — по мнению некоторых специалистов являются одной из самых перспективных технологий в области защиты информации в телекоммуникационных сетях.
  5.  Информационная безопасность


  1.  Представление знаний и разработка систем, основанных на знаниях

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

Некоторые вопросы, которые возникают в представлении знаний с точки зрения ИИ:

  •  Как люди представляют знания?
  •  Какова природа знаний и как мы их представляем?
  •  Должна ли схема представления связываться с частной областью знаний, или она должна быть общецелевой?
  •  Насколько выразительна данная схема представления?
  •  Должна ли быть схема декларативной или процедурной?

Было очень немного обсуждения вопросов представления знаний и исследования в данной области. Есть хорошо известные проблемы, такие как "spreading activation, " (задача навигации в сети узлов) «категоризация» (это связано с выборочным наследованием; например вездеход можно считать специализацией (особым случаем) автомобиля, но он наследует только некоторые характеристики) и «классификация». Например, помидор можно считать как фруктом, так и овощем.

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

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

  1.  Разработка естественно-языковых интерфейсов и машинный перевод

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

Уже первая программа в области естественно-языковых (ЕЯ) интерфейсов — переводчик с английского на русский язык — продемонстрировала неэффективность первоначального подхода, основанного на пословном переводе. Однако еще долго разработчики пытались создать программы на основе морфологического анализа. Неплодотворность такого подхода связана с очевидным фактом: человек может перевести текст только на основе понимания его смысла и в контексте предшествующей информации, или контекста. Иначе появляются переводы в стиле «Моя дорогая Маша — my expensive Masha». В дальнейшем системы МП усложнялись и в настоящее время используется несколько более сложных моделей: 

• применение так называемых «языков-посредников» или языков смысла, в результате происходит дополнительная трансляция «исходный язык оригинала — язык смысла — язык перевода»; 

• ассоциативный поиск аналогичных фрагментов текста и их переводов в специальных текстовых репозиториях или базах данных; 

• структурный подход, включающий последовательный анализ и синтез естественно-языковых сообщений. Традиционно такой подход предполагает наличие нескольких фаз анализа: 

1. Морфологический анализ — анализ слов в тексте. 

2. Синтаксический анализ — разбор состава предложений и грамматических связей между словами. 

3. Семантический анализ — анализ смысла составных частей каждого предложения на основе некоторой предметно-ориентированной базы знаний. 

4. Прагматический анализ — анализ смысла предложений в реальном контексте на основе собственной базы знаний. 

  1.  Распознавание образов

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

Распознавание образов – это задача идентификации объекта или определения  каких-либо  его  свойств  по  его  изображению (оптическое  распознавание)  или  аудиозаписи (акустическое распознавание). В процессе биологической эволюции многие животные с помощью  зрительного  и  слухового  аппарата  решили  эту  задачу  достаточно  хорошо. Создание  искусственных  систем  с  функциями  распознавания  образов  остаётся  сложной технической проблемой.

В целом проблема распознавания образов (ПРО) состоит из двух частей: обучения и распознавания. Обучение осуществляется путем показа отдельных объектов с указанием их принадлежности  тому  или  другому  образу.  В  результате  обучения распознающая  система должна приобрести способность реагировать одинаковыми реакциями на все объекты одного образа и другими реакциями - на все объекты отличимых образов. Очень важно, что процесс обучения  должен  завершиться только  путем показов конечного числа объектов. В качестве объектов  обучения  могут  быть  либо  картинки (рис. 2.1), либо  другие  визуальные изображения (буквы, цифры). Важно, что в процессе обучения указываются только сами объекты и их принадлежность образу. За обучением следует процесс распознавания  новых объектов,  который  характеризует  действия  уже  обученной  системы.  Автоматизация этих процедур и составляет проблему обучения распознаванию образов. В том случае, когда человек  сам  разгадывает  или  придумывает,  а  затем  навязывает  машине  правило классификации,  проблема  распознавания  решается частично,  так  как  основную и главную часть проблемы (обучение) человек берет на себя.

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

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

  1.  Специальное программное обеспечение

К специальному программному обеспечению информационных и управляющих систем относятся

  •  программы (системы) управления базами данных;
  •  программы управления языком интерфейса информационных систем;
  •  программы сбора и предварительной обработки информации (в информационно-измерительных системах, например, бортовые системы).

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

Поэтому часто такие ПО относят к системному программному обеспечению.

  1.  Данные и знания; уровни обработки данных

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

При обработке на ЭВМ данные трансформируются, условно проходя следующие этапы:

1.     D1 - данные как результат измерений и наблюдений;

2.     D2 - данные на материальных носителях информации (таблицы, протоколы, справочники);

3.     D3 - модели (структуры) данных в виде диаграмм, графиков, функций;

4.     D4 - данные в компьютере на языке описания данных;

5.     D5 - базы данных на машинных носителях информации.

  1.  Данные и знания; уровни обработки знаний

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

При обработке на ЭВМ знания трансформируются аналогично данным.

1.     Z1 - знания в памяти человека как результат мышления;

2.     Z2 - материальные носители знаний (учебники, методические пособия);

3.     Z3 - поле знаний - условное описание основных объектов предметной области, их атрибутов и закономерностей, их связывающих;

4.     Z4 - знания, описанные на языках представления знаний (продукционные языки, семантические сети, фреймы - см. далее);

5.     Z5 - база знаний на машинных носителях информации.

  1.  Интенсионал и экстенсионал понятия

Интенсиональные знания — это знания о связях между атрибутами (признаками) объектов данной предметной области. Они оперируют абстрактными объектами, событиями и отношениями. 

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

  1.  Глубинные и поверхностные знания, их отличие

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

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

Отмечается, что большинство экспертных систем основано на применении поверхностных знаний. Это, однако, нередко не мешает достигать вполне удовлетворительных результатов. Вместе с тем, опора на глубинные представления помогает создавать более мощные, гибкие и интеллектуальные адаптивные системы. Наглядным примером может служить медицина. Здесь молодой и недостаточно опытный врач часто действует по поверхностной модели: «Если кашель — то пить таблетки от кашля, если ангина — то эритромицин» и т. п. В то же время опытный врач, основываясь на глубинных знаниях, способен порождать разнообразные способы лечения одной и той же болезни в зависимости от индивидуальных особенностей пациента, его состояния, наличия доступных лекарств в аптечной сети и т. д. 

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

  1.  Процедурные и декларативные знания

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

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

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

Наиболее важным аспектом знаний является их долговечность. Неизменные знания, такие как чаконы природы, не меняются со временем. Статичные знания, такие как политика бизнеса или его процедуры, статичны лишь какое-то время — рано или поздно их ждут перемены. Динамичные знания, такие как условия рынка или норма возврата инвестиций, изменяются от одного приложения к другому.

  1.  Модели представления знаний; продукционная модель

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

Продукционную систему можно определить на основе следующих категорий.

  1.  Набор продукционных правил. Их часто просто называют продукциями. Продукция — это пара "условие-действие", которая определяет одну порцию знаний, необходимых для решения задачи. Условная часть правила — это образец (шаблон), который определяет, когда это правило может быть применено для решения какого-либо этапа задачи. Часть действия определяет соответствующий шаг в решении задачи.
  2.  Рабочая память содержит описание текущего состояния мира в процессе рассуждений. Это описание является образцом, который сопоставляется с условной частью продукции с целью выбора соответствующих действий при решении задачи. Если условие некоторого правила соответствует содержимому рабочей памяти, то может выполняться действие, связанное с этим условием. Действия продукционных правил предназначены для изменения содержания рабочей памяти.
  3.  Цикл "распознавание-действие". Управляющая структура продукционной системы проста: рабочая память инициализируется начальным описанием задачи. Текущее состояние решения задачи представляется набором образцов в рабочей памяти. Эти образцы сопоставляются с условиями продукционных правил; что порождает подмножество правил вывода, называемое конфликтным множеством. Условия этих правил согласованы с образцами в рабочей памяти. Продукции, содержащиеся в конфликтном множестве, называют допустимыми. Выбирается и активизируется одна из продукций конфликтного множества (разрешение конфликта). Активизация правила означает выполнение его действия. При этом изменяется содержание рабочей памяти. После того как выбранное правило сработало, цикл управления повторяется для модифицированной рабочей памяти. Процесс заканчивается, если содержимое рабочей памяти не соответствует никаким условиям.

  1.  Модели представления знаний; семантическая сеть

Понятие семантической сети основано на древней и очень простой идее о том, что «память» формируется через ассоциации между понятиями.

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

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

  1.  является (is) 
  2.  имеет частью (has part)

Дуги обладают свойством транзитивности – устанавливают отношения иерархии наследования в сети (элементы низкого уровня наследуют свойства высокого)

В качестве простого примера семантической сети рассмотрим предположения:

«Студент Иванов является мужчиной»; «Мужчина является человеком»

Студент Иванов  мужчиной  человеком.

  1.  Модели представления знаний; фреймы

Фрейм – это агрегат, который представляет наиболее полное формирование описания понятия, это разновидность семантических сетей, только вместо вершин выступают фреймы

Фреймы имеют способность наследовать значения характеристик своих «родителей» , находящихся на более высоком уровне иерархий.

Два типа фреймов:1 фреймы – прототипы – хранятся в базе знаний 2. фреймы – экземпляры – представляют собой запрос пользователя к системе. Достоинства: Фреймы одна из наиболее используемых моделей знаний, используется любой язык программирования. Недостатки: относительна высокая сложность, что проявляется в снижении скорости работы механизма вывода.

  1.  Модели представления знаний; формальные логические модели

Формальные логические модели, основанные на классическом исчислении предикатов 1-гопорядка, когда предметная область или задача описываются в виде набора аксиом. Чаще всего эти логические модели строятся при помощи декларативных языков логического программирования, наиболее известным представителем которых является язык Пролог (Prolog). В настоящее время Пролог, несмотря на неоднократные пессимистические прогнозы, продолжает развиваться в разных странах и вбирает в себя новые технологии и концепции, а также парадигмы императивного программирования. Базовым принципом языка является равнозначность представления программы и данных (декларативность), отчего утверждения языка одновременно являются и записями, подобными записям в базах данных, и правилами, несущими в себе способы их обработки. Сочетание этих качеств приводит к тому, что по мере работы системы Пролога знания (и данные, и правила) накапливаются. Поэтому Пролог-системы считают естественной средой для накопления базы знаний

  1.  Предметные области для экспертных систем

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

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

Современные экспертные системы широко используются для тиражирования опытам знаний ведущих специалистов практически во всех сферах экономики. Традиционно знания существуют в двух видах - коллективный опыт и личный опыт.

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

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

  1.  Экспертная система, основные понятия

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

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

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

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

Экспертная система – является плодом совместной работы экспертов в данной предметной области, инженеров по знаниям и программистов.

Но стоит отметить, что встречаются случаи, когда программы пишутся самими экспертами в данной области.

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

  1.  Обобщенная структура экспертной системы

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

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

Определим основные термины в рамках данного модуля.

 

  1.  Экспертная система, основные функции ее разработчиков

В создании ЭС участвуют представители следующих специальностей.

1) Эксперт- профессионал в данной ППО, который с помощью инженера по знаниям осуществляет наполнение БЗ и контролирует правильность введения знаний в систему.

2) Инженер по знаниям (инженер знаний, аналитик, инженер-интерпретатор, когнитолог) - специалист в области проектирования и создания интеллектуальных систем, знающий ППО и являющийся буфером между экспертом и БЗ. Выполняет следующие основные функции:

  •  возглавляет и выполняет работы по проектированию и созданию ЭС, если она разрабатывается заново;
  •  устанавливает связи с экспертами и отвечает за извлечение, формализацию и структурирование знаний, вводимых в БЗ;
  •  совместно с программистом определяет способы (модели) представления знаний в БЗ, а также языки программирования и среду функционирования ЭС;
  •  отвечает за наполнение БЗ и поддержание ЭС в рабочем состоянии.

3) Программист определяет (выбирает) способы (модели) представления знаний в БЗ, языки программирования и среду функционирования ЭС. В настоящее время существуют сотни различных средств программирования и представления знаний. Выбор наиболее эффективных из них для данной ЭС является весьма трудоемкой задачей, которая и возлагается на программиста. От его профессиональных способностей во многом зависит работоспособность и эффективность создаваемой ЭС.

Программист выполняет следующие функции:

  •  определяет (выбирает) языки программирования и способы представления знаний в БЗ;
  •  осуществляет выбор инструментальных средств, которые наиболее подходят для разработки ЭС;
  •  осуществляет сопряжение ЭС с вычислительной средой, в которой она будет работать;
  •  определяет и программирует стандартные функции, которые будут выполняться программно-аппаратными устройствами системы и др.

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

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

  •  в правильности своего понимания основного эксперта;
  •  в совпадении взглядов различных экспертов относительно качества предлагаемых решений по созданию ЭС;
  •  в полноценности тестов, демонстрирующих особенности создаваемой ЭС и др.

  1.  Классификация экспертных систем по типу решаемых задач

Интерпретация данных. Это одна из традиционных задач для экспертных систем. Под интерпретацией понимается определение смысла данных, результаты которого должны быть согласованными и корректными. Обычно предусматривается многовариантный анализ данных.

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

Мониторинг. Основная задача мониторинга - непрерывная интерпретация данных в реальном масштабе времени и сигнализация о выходе тех или иных параметров за допустимые пределы. Главные проблемы - "пропуск" тревожной ситуации и инверсная задача "ложного" срабатывания. Сложность этих проблем в размытости симптомов тревожных ситуаций и необходимость учета временного контекста.

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

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

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

Обучение. Системы обучения диагностируют ошибки при изучении какой-либо дисциплины с помощью ЭВМ и подсказывают правильные решения. Они аккумулируют знания о гипотетическом "ученике" и его характерных ошибках, затем в работе способны диагностировать слабости в знаниях обучаемых и находить соответствующие средства для их ликвидации. Кроме того, они планируют акт общения с учеником в зависимости от успехов ученика с целью передачи знаний.

  1.  Классификация экспертных систем по типу ЭВМ

На сегодняшний день существуют:

  •  ЭС для уникальных стратегически важных задач на суперЭВМ (Эльбрус, CRA'.CONVEX и др.);
  •  ЭС на ЭВМ средней производительности (типа ЕС ЭВМ, mainframe);
  •  ЭС на символьных процессорах и рабочих станциях (SUN, APOLLO);
  •  ЭС на мини- и супермини-ЭВМ (VAX, micro-VAX и др.);
  •  ЭС на персональных компьютерах (IBM PC, MAC II и подобные).

  1.  Классификация экспертных систем по связи с реальным временем

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

Квазидинамические ЭС интерпретируют ситуацию, которая меняется с некоторым фиксированным интервалом времени.

Пример. Микробиологические ЭС, в которых снимаются лабораторные измерения с технологического процесса один раз в 4 - 5 (производство лизина, например) и анализируется динамика полученных показателей по отношению к предыдущему измерению.

Динамические ЭС работают в сопряжении с датчиками объектов в режиме реального времени с непрерывной интерпретацией поступаемых данных.

Управление гибкими производственными комплексами, мониторинга реанимационных палатах и т.д. Пример инструментария для разработки динамических систем - G2..

  1.  Классификация экспертных систем по степени интеграции с другими программами

Автономные ЭС работают непосредственно в режиме консультаций с пользователем для специфически "экспертных" задач, для решения которых не требуется привлекать традиционные методы обработки данных (расчеты, моделирование и т. д.).

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

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

  1.  Инструментальные средства построения экспертных систем, традиционные языки программирования

В эту группу инструментальных средств входят традиционные языки программирования (С, C++, Basic, SmallTalk, Fortran и т.д.), ориентированные в основном на численные алгоритмы и слабо подходящие для работы с символьными и логическими данными. Поэтому создание систем искусственного интеллекта на основе этих языков требует большой работы программистов. Однако большим достоинством этих языков является высокая эффективность, связанная с их близостью к традиционной машинной архитектуре. Кроме того, использование традиционных языков программирования позволяет включать интеллектуальные подсистемы (например, интегрированные экспертные системы) в крупные программные комплексы общего назначения. Среди традиционных языков наиболее удобными считаются объектно-ориентированные (SmallTalk, C++). Это связано с тем, что парадигма объектно-ориентированного программирования тесно связана с фреймовой моделью представления знаний. Кроме того, традиционные языки программирования используются для создания других классов инструментальных средств искусственного интеллекта.

  1.  Инструментальные средства построения экспертных систем, языки искусственного интеллекта

Это прежде всего Лисп (LISP) и Пролог (Prolog) [8] – наиболее распространенные языки, предназначенные для решения задач искусственного интеллекта. Есть и менее распространенные языки искусственного интеллекта, например РЕФАЛ, разработанный в России. Универсальность этих языков меньшая, нежели традиционных языков, но ее потерю языки искусственного интеллекта компенсируют богатыми возможностями по работе с символьными и логическими данными, что крайне важно для задач искусственного интеллекта. На основе языков искусственного интеллекта создаются специализированные компьютеры (например, Лисп-машины), предназначенные для решения задач искусственного интеллекта. Недостаток этих языков – неприменимость для создания гибридных экспертных систем.

  1.  Инструментальные средства построения экспертных систем, специальный программный инструментарий

В эту группу программных средств искусственного интеллекта входят специальные инструментарии общего назначения. Как правило, это библиотеки и надстройки над языком искусственного интеллекта Лисп: KEE (KnowledgeEngineeringEnvironment), FRL (FrameRepresentationLanguage), KRL (KnowledgeRepresantationLanguage), ARTS и др. [1,4,7,8,10], позволяющие пользователям работать с заготовками экспертных систем на более высоком уровне, нежели это возможно в обычных языках искусственного интеллекта.

  1.  Инструментальные средства построения экспертных систем, “оболочки”

Под "оболочками : (shells) понимают "пустые" версии существующих экспертных систем, т.е. готовые экспертные системы без базы знаний. Примером такой оболочки может служить EMYCIN (Empty MYCIN - пустой MYC1N) [8], которая представляет собой незаполненную экспертную систему MYCIN. Достоинство оболочек в том, что они вообще не требуют работы программистов для создания готовой экспертной системы. Требуется только специалисты) в предметной области для заполнения базы знаний. Однако если некоторая предметная область плохо укладывается в модель, используемую в некоторой оболочке, заполнить базу знаний в этом случае весьма не просто.

  1.  Технология разработки экспертных систем, этапы разработки

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

Использовать ЭС следует только тогда, когда разработка ЭС возможна, оправдана и методы инженерии знаний соответствуют решаемой задаче.

На этапе идентификации определяются задачи, которые подлежат решению, выявляются цели разработки, определяются эксперты и типы пользователей.

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

На этапе формализации выбираются ИС и определяются способы представления всех видов знаний, формализуются основные понятия, определяются способы интерпретации знаний, моделируется работа системы, оценивается адекватность целям системы зафиксированных понятий, методов решений, средств представления и манипулирования знаниями.

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

  1.  Технология разработки экспертных систем, выбор проблемы

Этот этап включает деятельность, предшествующую решению начать разрабатывать конкретную ЭС. Он включает:

- определение проблемной области и задачи;

- нахождение эксперта, желающего сотрудничать при решении проблемы, и назначение коллектива разработчиков;

- определение предварительного подхода к решению проблемы;

- анализ расходов и прибыли от разработки;

- подготовку подробного плана разработки.

Правильный выбор проблемы представляет, наверное, самую критическую часть разработки в целом. Если выбрать неподходящую проблему, можно очень быстро увязнуть в "болоте" проектирования задач, которые никто не знает, как решать. Неподходящая проблема может также привести к созданию экспертной системы, которая стоит намного больше, чем экономит. Дело будет обстоять еще хуже, если разработать систему, которая работает, но не приемлема для пользователей. Даже если разработка выполняется самой организацией для собственных целей, эта фаза является подходящим моментом для получения рекомендаций извне, чтобы гарантировать удачно выбранный и осуществимый с технической точки зрения первоначальный проект.

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

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

Приведем некоторые факты, свидетельствующие о необходимости разработки и внедрения экспертных систем:

- нехватка специалистов, расходующих значительное время для оказания помощи другим;

- потребность в многочисленном коллективе специалистов, поскольку ни один из них не обладает достаточным знанием;

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

- большое расхождение между решениями самых хороших и самых плохих исполнителей;

- наличие конкурентов, имеющих преимущество в том, что они лучше справляются с поставленной задачей.

  1.  Технология разработки экспертных систем, понятие прототипной системы

Прототипная система является усечённой версией экспертной системы, спроектированной для проверки правильности кодирования фактов, связей и стратегий рассуждения эксперта. Она также даёт возможность инженеру по знаниям привлечь эксперта к активному участию в разработке экспертной системы и, следовательно, к принятию им обязательства приложить все усилия для создания системы в полном объёме.

Объём прототипа - несколько десятков правил, фреймов или примеров. Выделяют шесть стадий разработки прототипа. Рассмотрим краткую характеристику каждой из стадий.

Сроки приведены условно, так как зависят от квалификации специалистов и особенностей задачи.

  1.  Технология разработки экспертных систем, стадии разработки прототипа экспертной системы

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

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

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

Формализация. Строится формализованное представление концепций предметной области на основе выбранного языка представления знаний (ЯПЗ). Традиционно на этом этапе используются: логические методы (исчисления предикатов I порядка и др.), продукционные модели (с прямым и обратным выводом), семантические сети, фреймы, объектно-ориентированные языки, основанные на иерархии классов, объектов и др.

Реализация. Создается прототип экспертной системы, включающий базу знаний и остальные блоки, при помощи одного из следующих способов: программирование на традиционных языках типа Паскаль, Си и др., программирование на специализированных языках, применяемых в задачах искусственного интеллекта: LISP , FRL , SmallTalk и др., использование инструментальных средств разработки ЭС типа СПЭИС, ПИЭС, использование "пустых" ЭС или "оболочек" типа ЭКСПЕРТ, ФИАКР и др.

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

  1.  Технология разработки экспертных систем, развитие прототипа до промышленной экспертной системы

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

Если первоначально выбранные объекты или свойства оказываются неподходящими, их необходимо изменить. Можно сделать оценку общего числа эвристических правил, необходимых для создания окончательного варианта экспертной системы. Иногда при разработке промышленной системы выделяют дополнительные этапы для перехода: демонстрационный прототип - исследовательский прототип - действующий прототип - промышленная система.

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

Понятие же коммерческой системы в нашей стране входит в понятие промышленный программный продукт, или промышленной экспертной системы в этой работе (табл. 1).

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

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

На этом этапе разработки большинство экспертов узнают достаточно о вводе правил и могут сами вводить в систему новые правила. Таким образом начинается процесс, во время которого инженер по знаниям передаёт право собственности и контроля за системой эксперту для уточнения, детальной разработки и обслуживания.

  1.  Технология разработки экспертных систем, оценка системы

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

- критерии пользователей (понятность и "прозрачность" работы системы, удобство интерфейсов и др.);

- критерии приглашенных экспертов (оценка советов-решений, предлагаемых системой, сравнение ее с собственными решениями, оценка подсистемы объяснений и др.);

- критерии коллектива разработчиков.

  1.  Технология разработки экспертных систем, стыковка экспертной системы

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

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

  1.  Технология разработки экспертных систем, поддержка системы

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

  1.  Понятие предиката. Применение логики предикатов.

Отношение в Прологе называется предикатом. Аргументы - это объекты, которые взываются этим отношением; в факте likes (bill, cindy) отношение likes - это предикат, а объекты bill и cindy - аргументы.

    Вот несколько примеров предикатов с различным числом аргументов:

   pred(integer,symbol)
 person(last,first,gender)
 run()
 birthday(firstName,lastName, date)

    В вышеприведенном примере показано, что предикаты могут вовсе не иметь аргументов, но использование таких предикатов ограничено. Чтобы выяснить имя Rosemont, можно применить запрос person (rosemont,Name,male). Но что делать с запросом без аргументов run? Выясним, есть ли в программе предложение run, и если run - это заголовок правила, то можно вычислить данное правило. В некоторых случаях это оказывается полезным - например, если бы вы захотели создать программу, работающую по-разному в зависимости от того, имеется ли предложение run.

  1.  Факты и правила. Предложения.

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

    Подробнее о фактах. Факт представляет либо свойство объекта, либо отношение между объектами. Факт самодостаточен. Прологу не требуется дополнительных сведений для подтверждения факта, и факт может быть использован как основа для логического вывода.

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

Примеры фактов:

person (john).

мужчина (виктор).

нравиться (джон, мери).

Примеры правил:

человек (Х) :- мужчина(Х).

твистик(Кто_то) if человечек(Кто_то),

любит_танцевать(Кто_то, твист).

  1.  Общие представления о переменных.

В Прологе переменные позволяют нам записывать общие факты и правила и задавать общие вопросы. В естественном языке вы пользуетесь переменными в предложениях постоянно. Обычное предложение на английском языке может быть таким:

    Bill likes the same thing as Kim. (Билл любит то же, что и Ким)

    Как мы говорили, при задании переменной в Прологе первый символ имени должен быть заглавной буквой или символом подчеркивания. Например, в следующей строке Thing - это переменная.

  likes(bill,Thing):-

     likes(kim,Thing).

    В предшествующем примере:

  likes(cindy,Something):-

     likes(bill,Something).

объект Something начинается с заглавной буквы, т.к. это переменная; он определяет что-то, что Билл любит. С таким же успехом этот объект мог бы называться x или Zorro.

    Объекты bill и cindy начинаются со строчной буквы, т.к. они не являются переменными - это идентификаторы, имеющие постоянное значение. Пролог может обрабатывать произвольные текстовые строки подобно тому, как мы оперировали символами, упомянутыми выше, если текст заключен в двойные кавычки. Следовательно, вместо bill вы могли бы также успешно написать "Bill".

  1.  Цели (запросы).

До сих пор мы, говоря о вопросах, задаваемых Прологу, употребляли слово "запрос". Далее мы будем использовать более общее слово "цель". Трактовка запросов как целей такова: когда вы даете Прологу запрос, в действительности вы даете ему цель для выполнения. ("Найди ответ на вопрос, если он существует: ...")

    Цели могут быть или простыми:

  likes(ellen,swimming).

  likes(bill,What).

или более сложными. Например цель из двух частей:

  likes (Person,reading),

  likes (Person,swimming).

    Цель, состоящая из двух и более частей, называется сложной целью, а каждая часть сложной цели называется под целью.

    Часто бывает нужно найти общее решение двух целей. Например, в предыдущем примере о родителях вы могли бы поинтересоваться, которые из родителей являются родителями мужского пола. Искать решение для такого запроса можно, задав сложную цель.

  1.  Размещение фактов, правил и запросов.

Предположим, у вас есть следующие факты и правила:

Быстрая машина - приятная. (A fast car is fun).
     Большая машина - красивая. (A big car is nice).
    
Маленькая машина - практичная. (A little car is practical).
    
Биллу нравится машина, если она приятная. (Bill likes a car if the car is fun).

Исследуя эти факты, вы можете сделать вывод, что Биллу нравится быстрый автомобиль. В большинстве случаевПролог придет к подобному решению. Если бы не было фактов о быстрых автомобилях, вы не смогли бы логически вывести, какие автомобили нравятся Биллу. Вы можете делать предположения о том, какой тип машин может быть крепким, но Пролог знает только то, что вы ему скажете; Пролог не строит предположений.

Вот пример, демонстрирующий, как Пролог использует правила для ответа на запросы.

  likes(ellen,tennis).

  likes(john,football).

    Последняя строка в программе является правилом:

  likes(bill,Activity):-  

     likes(torn,Activity).

    Это правило соответствует предложению естественного языка:

    Биллу нравится занятие, если Тому нравится это занятие. (Bill likes an activity if Tom likes that activity)

    В данном правиле заголовок - это likes (bill, Activity), а тело - likes (torn, Activity). Заметим, что в этом примере нет фактов о том, что Билл любит бейсбол. Чтобы выяснить, любит ли Билл бейсбол, можно дать Прологу такой запрос:

  Запустите Пролог, загрузите программу pro11_1.pro с помощью пункта меню File | Load или клавиши F3, запустите программу с помощью пункта Run или сочетания клавиш Alt+R и после запроса цель наберите: likes(bill,baseball).

    Пролог ответит:

  yes   (да)

    Попробуйте также следующий запрос:

  likes(bill,tennis).

    Пролог ответит:

  no   (нет)

    Пролог ответит по на последний запрос "Does Bill like tennis?" (Любит ли Билл теннис), поскольку:

  •  нет фактов, которые говорят, что Билл любит теннис;
  •  отношение Билла к теннису не может быть логически выведено с использованием данного правила и имеющихся в распоряжении фактов.

    Вполне возможно, что Билл любит теннис в реальной жизни, но ответ Пролога основан только на фактах и правилах, которые вы дали ему в тексте программы.

  1.  Сопоставление и унификация.

Рассмотрим программу с точки зрения того, как Пролог будет отыскивать все решения следующей цели:

  written_by(X,Y).

    Пытаясь выполнить целевое утверждение written_by(X,Y)Пролог должен проверить каждое предложение written_by в программе. Сопоставляя аргументы X и Y с аргументами каждого предложения written_byПролог выполняет поиск от начала программы до ее конца. Обнаружим предложение, соответствующее целевому утверждению,Пролог присваивает значения свободным переменным таким образом, что целевое утверждение и предложение становятся идентичными; говорят, что целевое утверждение унифицируется с предложением. Такая операция сопоставления называется унификацией.

  1.  Арифметические вычисления и сравнения.

Арифметические выражения

    Арифметические выражения состоят из операндов (чисел и переменных), операторов (+,-,/,*,div и mod) и скобок. Символы в правой части от знака равенства (который является предикатом =) составляют арифметическое выражение. Например:

    А=1+6/(11+3)*Z

    Шестнадцатеричные и восьмеричные числа начинаются с "0х" или "0о" соответственно. Например:

    OxFFF=4095
    86=0о112+12

    Значение выражения может быть вычислено, только если все переменные в момент вычисления определены. При этом вычисления производятся в порядке, определяемом приоритетом операции. Операции с высшим приоритетом выполняются первыми.

Операции

    Пролог может выполнять все четыре осноные арифметические операции (сложение, вычитание, умножение и деление) между целыми и вещественными числами. Тип результата приведен и таблице 1.

    В случае смешанной целочисленной арифметики, включающей и знаковые и безнаковые числа, результат знаковый. Размер результата будет равен большему из размеров двух операндов.

Порядок вычислений

    Арифметические операции вычисляются в следующем порядке:

  •  если выражение содержит подвыражение в скобках, подвыражение вычисляется первым;
  •  если выражение содержит операции умножения (*) или деления (/, div или mod), эти операции выполняются слева направо;
  •  если выражение содержит операции сложения (+) и вычитания (-), они выполняются также слева направо.

    В выражении A=1+6/(11+3)*Z, предположим, что Z имеет значение 4, ибо переменные должны быть связаны до вычисления. Вычислим это выражение:

  1.  (11+3) - первое вычисляемое подвыражеие, т. к. оно заключено в скобки, оно вычисляется как 14.
  2.  Затем вычисляется 6/14, т. к. / и * вычисляются слева направо. В результате получим 0.428571.
  3.  Далее 0.428571*4 дает 1.714285.
  4.  Наконец, вычисляя 1+1.714285, получаем значение выражения 2.714285.

    А получит значение 2.714285, которое принадлежит вещественному домену.

    Следует поупражняться в управлении вещественными числами. В большинстве случаев они не представлены точно, и маленькие ошибки могут накапливаться, выдавая непредсказуемые результаты.

  1.  Целочисленная и вещественная арифметика.

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

Функция mod/2

    Функция mod вычисляет остаток от деления X на Y (где X и Y - целые).

Функция div/2

    Функция div вычисляет целое частное от деления X ни Y (где X и Y - целые).

Функция abs/1

    Функция abs возвращает абсолютное значение своего аргумента.

Функция cos/1

    Функция cos возвращает значение косинуса своего аргумента.

Функция sin/1

    Функция sin возвращает значение синуса своего аргумента.

Функция tan/1

    Функция tan возвращает значение тангенса своего аргумента.

Функция arctan/1

    Функция arctan возвращает арктангенса от вещественного значения, с которым связано X.

Функция ехр/1

    Функция ехр возвращает значение е в степени значения, с которым связано X.

Функция ln/1

    Функция ln возвращает значение натурального логарифма от X (по основанию е).

Функция log/1

    Функция log возвращает значение логарифма по основанию 10 от X.

Функция sqrt/1

    Функция sqrt возвращает квадратный корень от X.

Функция round/1

    Функция round возвращает округленное значение X.

Функция trunc/1

    Функция trunc усекает X справа до десятичной точки, отбрасывая дробную часть.

  1.  Поиск с возвратом.

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

    Рассмотрим простой пример pro29_1.pro.

  predicates

     likes(symbol,symbol)

     tastes(symbol,symboI)

     food(symbol)

  clauses

     likes (bill,X):-

        food(X),

        tastes(X,good).

     tastes(pizza,good).

     tastes(brussels_sprouts,bad).

     food(brussels_sprouts).

     food(pizza).

    Эта маленькая программа составлена из двух множеств фактов и одного правила. Правило, представленное отношением likes, утверждает, что Билл любит вкусную пищу.

    Чтобы увидеть, как работает поиск с возвратом, дадим программе для решения следующее целевое утверждение:

  likes(bill,What).

    Замечание. Когда Пролог пытается произвести согласование целевого утверждения, он начинает поиск с вершины программы.

    В данном случае Пролог будет искать решение, производя с вершины программы поиск соответствия с подцелью

  likes (bill,What).

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

  1.  Прерывание поиска с возвратом: отсечение.

 Пролог предусматривает возможность отсечения, которая используется для прерывания поиска с возвратом; отсечение обозначается восклицательным знаком (!). Действует отсечение просто: через него невозможно совершить откат (поиск с возвратом).

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

    Существуют два основных случая применения отсечения.

  •  Если вы заранее знаете, что определенные посылки никогда не приведут к осмысленным решениям (поиск решений в этом случае будет лишней тратой времени), - примените отсечение, - программа станет быстрее и экономичнее. Такой прием называют зеленым отсечением.
  •  Если отсечения требует сама логика программы для исключения из рассмотрения альтернативных подцелей. Это - красное отсечение.

Использование отсечений

    На этом шаге даются примеры, показывающие, как следует использовать отсечение, рассматриваются несколько условных правил (r1, r2 и r3), которые определяют условный предикат r, а также несколько подцелей - а, b, с и т. д.

Предотвращение поиска с возвратом к предыдущей подцели в правиле

    rl:- 
              а, b,
              !,
             c.

    Такая запись является способом сообщить Прологу о том, что вас удовлетворит первое решение, найденное им для подцелей a и b. Имея возможность найти множественные решения при обращении к с путем поиска с возвратом, Прологпри этом не может произнести откат (поиск с возвратом) через отсечение и найти альтернативное решение для обращений а и b. Он также не может возвратиться к другому предложению, определяющему предикат r1.

  1.  Детерминизм и отсечение.

    В Прологе существует директива компилятора check_determ. Если вставить эту директиву в самое начало программы, то Пролог будет выдавать предупреждение в случае обнаружения недетерминированных предложений в процессе компиляции.

   Вы можете превратить недетерминированные предложения в детерминированные, вставляя отсечения в тело правил, определяющих данный предикат. Например, помещение отсечений в предложения, определяющие предикат friend, делает этот предикат детерминированным, поскольку в данном случае обращение к friend может возвратить одно и только одно решение.

  1.  Управление поиском решений.

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

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

Использование предиката fail

    Пролог начинает поиск с возвратом, когда вызов завершается неудачно. В определенных ситуациях бывает необходимо инициализировать выполнение поиска с возвратом, чтобы найти другие решения. Пролог поддерживает специальный предикат fail, вызывающий неуспешное завершение, и, следовательно, инициализирует возврат. Действие предиката fail равносильно эффекту от сравнения 2 = 3 или другой невозможной подцели.

    Пусть необходимо найти все решения цели father (X,Y). Цель можно записать как

  father (X,Y).

    Пролог найдет все решения цели father (X,Y) и отобразит значения всех переменных следующим образом:

  X=leonard,Y=katherine

  X=carl,Y=jason

  X=carl,Y=marilyn

  Нo если вы скомпилируете эту программу и запустите ее (командой меню Run), то Пролог найдет только первое подходящее решение для father (X,Y). После того как целевое утверждение, определенное в разделе goal, выполнено впервые, ничто не говорит Прологу о необходимости продолжения поиска с возвратом. Поэтому обращение к fatherприведет только к одному решению. Как же найти все возможные решения? Предикат everybody в программе использует fail для поддержки поиска с возвратом.

  1.  Рекурсия и рекурсивные объекты.

В Прологе список - это объект, который содержит конечное число других объектов. Списки можно грубо сравнить с массивами в других языках, но, в отличие от массивов, для списков нет необходимости заранее объявлять их размер.

Список, содержащий числа 1, 2 и 3, записывается так:

  [1,2,3]

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

  [dog,cat,canary]

Объявление списков

    Чтобы объявить домен для списка целых, надо использовать декларацию домена, такую как:

  domains

     integerlist=integer*

    Символ (*) означает "список чего-либо"; таким образом, integer* означает "список целых".

    Обратите внимание, что у слова "список" нет специального значения в Прологе. С тем же успехом можно назвать список "занзибаром". Именно обозначение * (а не название), говорит компилятору, что это список.

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

  elementlist=elements*

  % функторы здесь  i,r и s

  elements=i(integer); r(real); s(symbol)

Головы и хвосты

    Список является рекурсивным составным объектом. Он состоит из двух частей - головы, которая является первым элементом, и хвоста, который является списком, включающим все последующие элементы. Хвост списка - всегда список, голова списка - всегда элемент. Например:

  голова [а,b,с] есть а

  хвост [а,b,с] есть [b,с]

    Что происходит, когда вы доходите до одноэлементного списка? Ответ таков:

  голова[с] есть с

  хвост [с] есть [ ]

  1.  Работа со списками.

В Прологе есть способ явно отделить голову от хвоста. Вместо разделения элементов запятыми, это можно сделать вертикальной чертой "|". Например:

  [а,b,с] эквивалентно [а| [b,с]]

и, продолжая процесс,

  [а| [b,с]] эквивалентно [а | [b| [с]]], что эквивалентно [а| [b| [с| [] ]]]

    Можно использовать оба вида разделителей в одном и том же списке при условии, что вертикальная черта есть последний разделитель. При желании можно набрать [а,b,с,d] как [a,b| [c,d]]. В таблице 1 вы найдете другие примеры.

Таблица 1. Головы и хвосты списков

Список

Голова

Хвост

['a','b','с']

'a'

['b','с']

['a']

'a'

[] % пустой список

[ ]

Не определена

Не определен

[[1,2,3], [2,3,4],[ ]]

[1,2,3]

[[2,3,4],[ ]]

    В таблице 2 приведены несколько примеров на присвоение в списках.

Таблица 2. Присвоение в списках

Список 1

Список 2

Присвоение переменным

[X,Y,Z]

[эгберт, ест,мороженое]

Х=эгберг, У=ест, Z=мороженое

[7]

[X | Y]

Х=7,Y=[ ]

[1,2,3,4]

[X, Y | Z]

X=1, Y = 2, Z = [3,4]

[1,2]

[3|X]

fail % неудача

  1.  Использование списков.

Список является рекурсивной составной структурой данных, поэтому нужны алгоритмы для его обработки. Главный способ обработки списка - это просмотр и обработка каждого его элемента, пока не будет достигнут конец.

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

Печать списков

    Если нужно напечатать элементы списка, это делается так, как показано ниже.

  domains

     list  =  integer* % Или любой тип, какой вы хотите

  predicates

     write_a_list(list)

  clauses

     write_a_list([]). % Если список пустой - ничего не делать

     write_a_list([H |T]):- % Присвоить Н-голова,Т-хвост, затем...

     write(H),nl,

     write_a_list(T).

  goal

     write_a_list([1,2,3]).


    Вот два целевых утверждения write_a_list, описанные на обычном языке:

    Печатать пустой список - значит ничего не делать.
             Иначе, печатать список - означает печатать его голову (которая является одним элементом),  затем печатать его хвост (список).

Подсчет элементов списка

    Рассмотрим, как можно определить число элементов в списке. Что такое длина списка? Вот простое логическое определение:

  Длина [ ] - 0.

  Длина любого другого списка - 1 плюс длина его хвоста.

    Можно ли применить это? В Прологе - да. Для этого нужны два предложения.

  domains

     list = integer* % или любой другой тип

  predicates

     length_of(list,integer)

  clauses

     length_of([],0).

     length_of([_|T],L):-

        length_of(T,TailLength),

        L=TailLength + 1.

  1.  Основные предикаты управления строкой.

Предикаты, описываемые на этом шаге, являются основой обработки в Прологе; они служат для нескольких целей:

  •  разделение строки на подстроки и лексемы;
  •  построение строки из определенных подстрок и лексем;
  •  проверка, состоит ли строка из определенных подстрок или лексем;
  •  возврат лексемы или списка лексем из данной строки;
  •  проверка или определение длины строки;
  •  создание пустой строки определенной длины;
  •  проверка, является ли строка термином, определенным в Прологе;
  •  форматирование переменного числа аргументов в строковую переменную.

Предикат frontchar/3

    Предикат frontchar действует согласно равенству:

    String1 = объединение Char и String2

Предикат fronttoken/3

    Предикат fronttoken выполняет три взаимосвязанные функции, в зависимости от типа аргументов, который используется для обращения к нему.

  fronttoken(String1,Token,Rest) %(i,о,о) (i,i,о) (i,o,i) (i,i,i) (o,i,i)

Предикат frontstr/4

    Предикат frontstr расщепляет String1 на две части. Синтаксис предиката:

  frontstr(NumberOfChars,String1,StartStr,EndStr) % (i,i,o,o)

где StartStr содержит NumberOfChars первых символов из String1, a EndStr содержит остаток. При обращении кfrontstr первые два параметра должны быть связанными, а последние два - свободными.

Предикат concat/3

    Предикат concat устанавливает, что строка String3 является результатом сцепления String1 и String2. Он имеет форму:

  concat(String1,Sring2,String3) % (i,i,o), (i,o,i), (o,i,i), (i,i,i)

Предикат isname/1

    Предикат isname проверяет, является ли аргумент допустимым именем согласно синтаксису Пролога, и имеет формат:

  isname(String) % (i)

    Имя начинается с буквы алфавита или символа подчеркивания, за которым следует любое число букв, цифр и символов подчеркивания. Предыдущие и последующие пробелы игнорируются.

Предикат format/*

    Предикат format выполняет преобразования, аналогичные writef, но format выдает результат в виде строковой переменной.

  format(OutputString,FormatString,Arg1,Arg2,Arg3, ..., ArgN) %(o,i,i,i,...,i)

  1.  Преобразования типов.

На этом шаге мы рассмотрим стандартные предикаты, предназначенные для преобразования типов. Это предикатыchar_int, str_char, str_int, str_real, upper_lower.

Предикат char_int/2

    Предикат char_int преобразует символ в целое число или целое в символ и имеет формат:

  char_int(Char,Integer) % (i,o), (o,i), (i,i)

Предикат str_char/2

    Предикат str_char преобразует строку, содержащую один и только один символ, в символ или символ в строку из одного символа; предикат имеет формат:

  str_char(String,Char) % (i,o), (o,i), (i,i)

Предикат str_int/2

    Предикат str_int преобразует строку, содержащую целое число, в его текстовое представление и имеет формат:

  str_int(String,Integer) % (i,o), (o,i), (i,i)

Предикат str_real/2

    Предикат str_real преобразует строку в вещественное число или вещественное число в строку и имеет формат:

  str_real(String,Real) % (i,o), (o,i), (i,i)

Предикат upper_lower/2

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

  upper_lower(Upper,Lower) % (i,o), (o,i), (i,i)

  1.  Множества.

Список, который не содержит повторных вхождений элементов называется множеством.

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

Предикат будет реализован посредством рекурсии. Базисом рекурсии является очевидный факт: в пустом списке никакой элемент не встречается более одного раза.

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

Закодируем наши рассуждения.

list_set([],[]). /* пустой список является списком 

в нашем понимании */

list_set ([H|T],[H|T1]) :– 

delete_all(H,T,T2), 

/* T2 — результат удаления 

вхождений первого элемента 

исходного списка H из хвоста T */

list_set (T2,T1). 

/* T1 — результат удаления повторных вхождений элементов из списка T2*/ 

Например, если применить этот предикат к списку [1,2,1,2,3, 2,1], то результатом будет список [1,2,3]. 

Заметим, что в предикате, обратном только что записанному предикату list_set и переводящем множество в список, нет никакой необходимости по той причине, что наше множество уже является списком. 

  1.  Раздел предложений.

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

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

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

  1.  Раздел предикатов.

 Если в разделе clauses программы на Прологе вы описали собственный предикат, то вы обязаны объявить его в разделе predicates (предикатов); в противном случае Пролог не поймет, о чем вы ему "говорите". В результате объявления предиката вы сообщаете, к каким доменам (типам) принадлежат аргументы этого предиката.

    Предикаты задают факты и правила. В разделе же predicates все предикаты просто перечисляются с указанием типов (доменов) их аргументов. Эффективность работы Пролога значительно возрастает именно из-за того, что вы объявляете типы объектов (аргументов), с которыми работают ваши факты и правила.

Как объявить пользовательский предикат

    Объявление предиката начинается с имени этого предиката, за которым идет открывающая (левая) круглая скобка, после чего следует ноль или больше доменов (типов) аргументов предиката:

predicateName(argument_type1 OptionalName1,

  argument_type2 OptionalName2,..,

  argument_typeN OptionalNameN)

Имена предикатов

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

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

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

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

  1.  Раздел доменов.

 Домены позволяют задавать разные имена различным видам данных, которые, в противном случае, будут выглядеть абсолютно одинаково. В программах Пролога объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные вами специальные домены.

    Раздел domains служит двум полезным целям. Во-первых, вы можете задать доменам осмысленные имена, даже если внутренне эти домены аналогичны уже имеющимся стандартным. Во-вторых, объявление специальных доменов используется для описания структур данных, отсутствующих в стандартных доменах. Иногда очень полезно описать новый домен - особенно, когда вы хотите прояснить отдельные части раздела predicates. Объявление собственных доменов, благодаря присваиванию осмысленных имен типам аргументов, помогает документировать описываемые вами предикаты.

  1.  Раздел цели.

 Во существу, раздел goal (цели) аналогичен телу правила: это просто список подцелей. Цель отличается от правила лишь следующим:

  •  за ключевым словом goal не следует ":-";
  •  при запуске программы Пролог автоматически выполняет цель.

    Это происходит так, как будто Пролог вызывает goal, запуская тем самым программу, которая пытается разрешить тело правила goal. Если все подцели в разделе goal истинны, - программа завершается успешно. Если же какая-то подцель из дела goal ложна, то считается, что программа завершается неуспешно (хотя чисто внешне никакой разницы в этих случаях нет, - программа просто завершит свою работу).

  1.  Описание доменов.

Как в любом другом языке программирования, в Прологе все используемые конструкции должны быть предварительно описаны. Поэтому в описании предиката мы должны указать типы его аргументов.

    В Прологе имеется 6 встроенных типов доменов, решающих эту задачу. Кроме того, существует возможность создания новых типов доменов на базе стандартных.

   Перечислим основные способы создания новых доменов.

  1.  Создание псевдонимов (альтернативных имен) стандартных доменов. Эта операция осуществляется по следующей схеме:

    <новое имя домена> = <стандартное имя домена>.

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

  1.  Создание домена типа "список". Этот формат применяется при описании предикатов, осуществляющих обработку списков. Общий вид создания такого домена следующий:

    <домен типа "список"> = <тип элементов списка>*.

    Символ "*" (звездочка) "говорит" о том, что создаваемый домен является списком. Тип элементов списка может относиться как к стандартному типу, так и к доменам, определенным программистом. Например:

  list_int = integer* /*Домен типа списка целых чисел.*/

  list_char = char* /*Домен типа списка символов.*/

    Более детально мы рассмотрим описание доменов типа "список" в соответствующем разделе.

  1.  Создание домена типа "структура". Чаще всего этот формат применяется при организации баз данных. Его общий вид следующий:
  2.   <структура> =
  3.            <функтор1> (<домен11>,<домен12>, ...,<домен1N>);
  4.            <функтор2> (<домен21>,<домен22>, ...,<домен2N>)

    Объявление структуры (домена, состоящего из сложных и перекрывающихся объектов) состоит из имени структуры - функтора и доменов всех используемых компонент и подкомпонент данной структуры. Например, можно объявить домен "владелец" так:

 владелец = имеет(фамилия,книга)

и затем задавать его элементы в программе, например, так:

 имеет(Иванов,книга(Стругацкие,"Жук в муравейнике"))

  1.  Создание домена типа "файл". Этот домен применяется в том случае, когда в программе необходимо ссылаться на файлы с помощью файловых переменных (логических имен файлов). Формат создания такого домена следующий:
  2.    file = <имя1>;< имя1>; ...; < имяN> .

  1.  Задание типов аргументов при декларации предикатов. Арность (размерность).

  Объявление доменов аргументов в разделе predicates называется заданием типов аргументов. Предположим, имеется следующая связь объектов:

    Франк - мужчина, которому 45 лет.

    Факт Пролога, соответствующий этому предложению естественного языка, может быть следующим:

  person(frank,male,45).

    Здесь для всех трех аргументов использованы стандартные домены. Отныне всякий раз при работе с предикатом person, вы должны передавать ему три аргумента, причем первые два должны быть типа symbol, а третий – типа integer.

    Если в программе используются только стандартные домены, то нет необходимости использовать раздел domain; вы уже видели несколько программ такого типа.

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

  alphabet_position(Letter,Position)

Должна вернуть вам Position = 1, если Letter = a, Position = 2, если Letter = b и т. д. Предложения этого предиката могут выглядеть следующим образом:

Арность предиката - это количество аргументов, которые он принимает. Вы можете иметь два предиката с одним и тем же именем, но отличающейся арностью. В разделах predicates и clauses версии предикатов с одним именем и разной арностью должны собираться вместе; за исключением этого ограничения, различная арность всегда понимается как полное различие предикатов

  1.  Синтаксис правил.

Правила используются в Прологе в случае, когда какой-либо факт зависит от истинности другого факта или группы фактов. Как мы объясняли ранее в правиле Пролога есть две части: заголовок и тело. Ниже представлен обобщенный синтаксис правила в Прологе:

    HEAD:-<Subgoaд>,<Subgoal>,...,<Subgoal>. 
   
 Заголовок:- <Подцель>,<Подцель>,...,<Подцель>.

    Тело правила состоит из одной или более подцелей. Подцели разделяются запятыми, определяя конъюнкцию, а за последней подцелью правила следует точка. Каждая подцель выполняет вызов другого предиката Пролога, который может быть истинным или ложным. После того, как программа осуществила этот вызов, Пролог проверяет истинность вызванного предиката, и если это так, то работа продолжается, но уже со следующей подцелью. Если же в процессе такой работы была достигнута точка, то все правило считается истинным; если хоть одна из подцелей ложна, то все правило ложно.

    Для успешного разрешения правила Пролог должен разрешить все его подцели и создать последовательный список переменных, должным образом связав их. Если же одна из подцелей ложна. Пролог вернется назад для поиска альтернативы предыдущей подцели, а затем вновь двинется вперед, но уже с другими значениями переменных. Этот процесс называется поиском с возвратом. Подробное изложение данного процесса и того, как Пролог ищет решения, приводится на шаге 29.

    Как упоминалось выше, к качестве разделителя заголовка и тела правила Пролог использует знак :-, который читается как "если" (if). Однако if Пролога отличается от if в других языках, например в Pascal, где условие, содержащееся в оператре if, должно быть указано перед телом оператора if, который может быть выполнен. Другими словами:

    "if HEAD is true, then BODY is true (or then do BODY)"
   
 (если ЗАГОЛОВОК истинен, тогда ТЕЛО истинно (или: тогда выполнить ТЕЛО)

    Данный тип оператора известен как условный оператор если/тогда (if/then). Пролог же использует другую форму логики в таких правилах. Вывод об истинности заголовка правила Пролога делается, если (после того, как) тело этого правила истинно например, так:

    "HEAD is true if BODY is true (or: if BODY can be done)"
   
 ЗАГОЛОВОК истинен, если ТЕЛО - истинно (или: если ТЕЛО может быть выполнено)

    Учитывая вышесказанное, правило Пролога соответствует условной форме тогда/если, (then/if).

  1.  Автоматическое преобразование типов.

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

  •  между строками (string) и идентификаторами (symbol);
  •  между целыми, действительными и символами (char). При преобразовании символа в числовое значение этим значением является величина символа в коде ASCII.

    Аргумент из домена my_dom, который объявлен следующим образом:

  domains

     my_dom=<base  domain> %  <base  domain>- это стандартный домен 

может свободно смешиваться с аргументами из этого основного домена и с аргументами всех совместимых с ним стандартных доменов. Если основной домен - string, то с ним совместимы аргументы из домена symbol; если же основной домен integer, то с ним совместимы домены realcharword и др.

    Такое преобразование типов означает, например, что вы можете:

  •  вызвать предикат с аргументами типа string, задавая ему аргументы типа symbol, и наоборот;
  •  передавать предикату с аргументами типа real параметры типа integer;
  •  передавать предикату с аргументами типа char параметры типа integer;
  •  использовать в выражениях и сравнениях символы без необходимости получения их кодов в ASCII.

    Существует набор правил, определяющих, к какому домену принадлежит результат смешивания разных доменов.

  1.  Простые объекты данных.

Простой объект данных - это переменная или константа. Не путайте это значение слова "константа" с символьными константами, которые вы определяете в разделе constants программы. То, что мы здесь называем константой, это нечто, идентифицирующее объект, который нельзя изменять: символ (char), число (integer или real) или атом (symbol или string).

Переменные как объекты данных

    Названия переменных должны начинаться с заглавной буквы (A-Z) или с символа подчеркивания (_). Символ подчеркивания представляет анонимную переменную, которая используется в ситуации "неважно что". В Прологепеременная может связываться с любым допустимым аргументом Пролога или объектом данных.

    Переменные Пролога локальны, а не глобальны. Так, если два предложения содержат переменную, названную X, то это две различные переменные. Они могут быть связаны друг с другом, если совпадут во время унификации, но обычно они не оказывают влияния друг на друга.

Константы как объекты данных

    Константы включают символы, числа и атомы. Опять же, не путайте константы в данном контексте с символьными константами, определенными в разделе constants программы. Значение константы - это ее имя. Так константа 2 может соответствовать только числу 2, а константа abracadabra - только идентификатору abracadabra.

Символы

    Символы имеют тип char. Печатные символы (ASCII 32-127) - это цифры (0-9), прописные буквы A-Z, строчные буквы a-z, символы пунктуации и специальные символы.

    Символ-константа записывается в простых кавычках:

     'a' '3'

Числа

    Числа могут быть целыми (integer) или вещественными (real). Вещественные имеют значения от 1е-308 до 1е308 (от 10-308 до 10+308).

  1.  Составные объекты данных и функторы.

Составные объекты данных позволяют интерпретировать некоторые части информации как единое целое таким образом, чтобы затем можно было легко разделить их вновь. Возьмем, например, дату "октябрь 15, 1991". Она состоит из трех частей информации - месяц, день и год. Представим ее на рис. 1, как древовидную структypy.


Рис.1. Древовидная структура даты

    Вы можете сделать это, объявив домен, содержащий составной объект date:

  domains

    date_cmp = date(string,integer,integer)

а затем просто записать:

  D=date("October",15,1991).

    Такая запись выглядит как факт Пролога, но это не так - это объект данных, который вы можете обрабатывать наряду с символами и числами. Он начинается с имени, называемого функтором (в данном случае date), за которым следуют три аргумента.

    Аргументы составного объекта данных могут сами быть составными объектами. Например, вы можете рассматривать чей-нибудь день рождения (рис. 2), как информацию со следующей структурой:


Рис.2. Древовидная структура даты рождения

    На языке Пролог это выглядит следующим образом:

  birthday(person("Leo", "Jensen"),date("Apr ", 14 , 1991))

    У составного объекта birthday в этом примере есть две части: объект person ("Leo","Jensen") и объектdate("Apr",14,1900). Функторами для этих объектов будут person и date.

  1.  Объявление составных доменов.

Рассмотрим, как определяются составные домены. После компиляции программы, которая содержит следующие отношения:

  owns(john,book("From Here to Eternity","James  Jones")).

и

  owns(john,horse(blacky)).

вы должны послать системе запрос в следующем виде:

  owns(john,X).

    Переменная X может быть связана с различными типами объектов: книга, лошадь и, возможно, другими объектами, которые вы определите. Отметим, что теперь вы не можете более использовать старое определение предиката owns:

  owns(symbol,symbol)

    Второй элемент более не является объектом типа symbol. Вместо этого вы можете дать новое определение этого предиката:

  owns(name,articles)

    Домен articles в разделе domains можно описать так:

  domains

     articles=book(title,author);

     horse(name)% Articles - это books или horses

     title,author,name=symbol

    Точка с запятой читается как "или". В этом случае возможны два варианта: книга будет определяться своим заглавием и автором, а лошадь будет распознаваться своим именем. Домены title, author и name имеют стандартный тип symbol.

  1.  Декларативная семантика программ.

Декларативная семантика определяет, что должно быть результатом работы про- граммы, не вдаваясь в подробности, как это достигается.

Пусть задано P:-Q, R.

где P, Q, R -термы.

Тогда с точки зрения декларативного смысла это предложение читается:" P-истиино, если Q R истинны." Или " Из Q и R cледует Р." Т.е. определяются логические связи между головой предложения и целями в его теле.

Таким образом , декларативный смысл программы определяет, является ли данная цель истинной (достижимой), и если - да, то при каких значениях переменных она достигается.

Конкретизацией I предложения С называется результат подстановки в него на место каждой переменной некоторого терма.

Заметим , что это отличается от конкретизации переменной.

Пример:

haschild( X ):-parent( X ,Y).


  1.  Процедурный смысл программ.

Процедурная семантика (процедурный смысл) пролог-программы определяет, как пролог-программа отвечает на вопросы.

Ответить на вопрос - это значит удовлетворить цели.

Поэтому процедурная семантика пролога -это процедура вычисления списка целей с учетом программы.

  1.  Взаимосвязь между декларативным и процедурным смыслами программ.

Создавая пролог программы всегда надо помнить о процедурном и декларативном смысле.

Декларативный смысл касается отношений , определенных в программе. Т.е. декларативный смысл определяет, что должно быть результатом программы.

С другой стороны, процедурный смысл определяет , как этот результат может быть достигнут, т.е., как реально отношения обрабатываются прологом.

  1.  Изменение процедурного смысла путем изменения порядка следования предложений и целей.

  1.  Внутренняя база фактов.

    Внутренняя база фактов состоит из фактов, которые вы можете непосредственно добавлять и удалять из вашей программы на Прологе во время ее исполнения. Вы можете объявлять предикаты, описывающие внутреннюю базу данных в разделе database программы и применять эти предикаты таким же образом, как используются предикаты, описанные в разделе predicates.

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

Объявление внутренней базы фактов

    Ключевое слово database определяет начало объявления раздела database. Раздел database состоит из последовательности объявлений предикатов, описывающих соответствующую внутреннюю базу фактов. Во время выполнения можно с помощью предикатов assert и assertz добавлять факты (но не правила) в базу фактов. Или, вызвав стандартный предикат consult, вы можете извлечь добавляемые факты из файла на диске. Раздел database может выглядеть так, как в следующем примере:

  domains

     name,address=string

     age=integer

     gender=male; female

  database

     person(name,address,age,gender)

  predicates

     male(name,address,age)

     female(name,address,age)

     child(name,age,gender)

  clauses

     male(Name,Address,Age):-

        person(Name,Address,Age,male).

        ...

  1.  Использование внутренних баз фактов.

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

Доступ к внутренней базе фактов

    Предикаты, принадлежащие внутренней базе фактов, доступны точно так же, как и другие предикаты. Единственное видимое различие состоит в том, что объявления таких предикатов расположены в разделе database вместо разделаpredicates. В следующем примере:

  domains

     name=string

     sex=char

  database

     person(name,sex)

  clauses

     person("Helen",'F').

     person ("Maggie",'F').

     person("Suzanne",'F').

     person("Per",'M').

вы можете вызвать person с целью person (Name,'F') для нахождения всех женщин, или person ("Maggie",'F') для проверки того, что женщина по имени Maggie существует в вашей базе данных.

    По своей природе предикаты в разделе database всегда недетерминированные. Так как факты могут быть добавлены в любой момент во время выполнения программы, компилятор всегда должен учитывать, что существует возможность найти альтернативные решения в ходе поиска с возвратом.

  1.  Организация ввода-вывода данных различных типов.

readln(StringVariable)

(string) – (o)

Считывает строку с текущего устройства ввода и связывает ее с заданной переменной StringVariable. Обычно чтение производится с клавиатуры. В качестве конца строки используется символ возврата каретки. Readln считывает до 150 символов в строке при вводе с клавиатуры и до 64К при вводе с других устройств.

readint(IntgVariable)

(integer) – (o)

Читает целое число с текущего устройства ввода и связывает его с заданной переменной.

readreal(RealVariable)

(real) – (o)

Читает действительное число с текущего устройства чтения и связывает его с заданной переменной RealVariable. Обычно чтение производится с клавиатуры.

readchar(CharVariable)

(char) – (o)

Читает символ с текущего устройства ввода и связывает его с заданной переменной CharVariable. В отличие от inkey устанавливает режим ожидания ввода.

inkey(CharVariable)

(Char) – (o)

Читает символ со стандартного устройства ввода. В отличие от предиката readchar выполнение программы не прерывается. Поэтому inkey применяют главным образом для организации циклов ожидания.

keypressed

Выполняется успешно, если нажата некоторая клавиша. В отличие от предиката inkey с помощью keypressed можно установить, нажата ли клавиша, не читая при этом введенный с клавиатуры символ.

write( Variable|Constant * )

Запись заданных значений переменных и констант в заданное активное окно на текущем устройстве вывода.

nl

Вызывает возврат каретки и перевод строки.

  1.  Прямая и обратная цепочки рассуждений.

CLIPS представляет собой систему, в которой строится прямая цепочка рассуждений, а порождающие правила в системе MYCIN используются в большинстве случаев для построения обратной цепочки рассуждений. В CLIPS всегда сопоставляются состояние рабочей памяти и левые части правил, а затем выполняются действия, предусмотренные правой частью выбранного правила. А в MYCIN ведущей в рассуждениях является правая часть правила. Если мы задались целью установить природу некоторого микроорганизма, то отбираются все правила, в правой части которых дается соответствующее заключение, и затем анализируется, предпосылки какого из них удовлетворяются текущими данными.

Проще всего представить отличие между прямой и обратной цепочками рассуждений в терминах грамматических правил, аналогичных представленным в разделе 5.1. Как было показано, набор правил:

  •  (Р1) $ › а$а
  •  (Р2) $ › b$b
  •  (РЗ) $ › с$с




1. Тема урока- Dns l ville
2. История творчества группы Ари
3. протогазета под названием Куранты выходила еще в начале 1600х гг
4. х годов начал заниматься исследовательской деятельностью и на сегодняшний день подготовил более 200 книг бол
5. тема и государственное устройство Италии Выполнил- студент гр
6. Тема- Растворы
7. Курсовая работа- Общая характеристика правоохранительных органов
8. а Ён уваскрос Ён дзесь між намі Ён там дзе ў срэбным пыле лоз У сіняй смузе над палямі Вісіць вясна
9. Новый план счетов
10. Авиабилетов страховых полисов ваучеров справки на вывоз наличной валюты при необходимости водитель.html
11. 1100 где m порядковый номер члена ранжированного ряда n число лет наблюдений
12. Строительство профиль 270800
13. Организационная культура как фактор развития организации
14. Типы стран по уровню социально-экономического развития
15. ВАРИАНТОВОсновные понятия
16. Грейс Феллоушип г
17. Лутаенко Часть первая Древняя страна Тересс обретала всё новые и новые свои границы
18. Был обычный день декабря но знайте то что наступила зима еще не верилось но хотелось поверить в чудо
19. это по сути электродвигатель в корпусе позволяющем подключать и приводить в движение несколько различных
20. Роль и функции валютного рынка и валютного регулирования в современной российской экономике