Эвристические знания


Одним из основных методов представления знаний в CLIPS являются пра­вила. Правила используются для представления эвристик или эмпирических правил, определяющих действия, которые необходимо выполнить в случае возникновения некоторой ситуации. Разработчик экспертной системы соз­дает набор правил, которые, работая вместе, решают поставленную задачу. Правила состоят из предпосылок и следствия. Предпосылки называются так­же ЕСЛИ-частью правила или LHS правила (left-hand side). Следствие на­зываются ТО-частью правила или RHS правила (right-hand side).

Предпосылки правила представляют собой набор условий (или условных эле­ментов), которые должны удовлетвориться, для того чтобы правило выпол­нилось. Предпосылки правил удовлетворяются в зависимости от наличия или отсутствия некоторых заданных фактов в списке фактов или некоторых созданных объектов, являющихся экземплярами классов, определенных пользователем. Один из наиболее распространенных типов условных выра­жений в CLIPS — образцы (patterns). Образцы состоят из набора ограниче­ний, которые используются для определения того, удовлетворяет ли некото­рый факт или объект условному элементу. Другими словами, образец задает некоторую маску для фактов или объектов. Процесс сопоставления образ­цов фактам или объектам называется сопоставлением образцов (pattern-matching). CLIPS предоставляет механизм, называемый механизмом логиче­ского вывода (inference engine), который автоматически сопоставляет образ­цы с текущим списком фактов и определенными объектами и ищет прави­ла, которые применимы в настоящий момент.

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

В большинстве случаев правила CLIPS можно представить в виде операторов if-then, используемых в процедурных языках программирования, например, таких как Ada или С. Однако условные выражения if-then в процедурных языках проверяются только тогда, когда поток управления программы непо­средственно попадает на данное выражение путем последовательного перебора выражений и операторов, составляющих программу. В CLIPS, в отли­чие от этого, механизм логического вывода создает и постоянно модифици­рует список правил, условия которых в данный момент удовлетворены. Эти правила запускаются на выполнение механизмом логического вывода. С этой стороны правила похожи на обработчики сообщений, присутствую­щие в таких языках, как, например, Ada или Smalltalk.

Процедурные знания

Помимо эвристической, CLIPS поддерживает и процедурную парадигму пред­ставления знаний, используемую в большинстве языков программирования. Конструкторы deffunction и defgeneric позволяют пользователю определять новые выполняемые конструкции непосредственно в среде CLIPS, возвра­щающие некоторые значения или выполняющие какие-то полезные дейст­вия. Вызов этих новых функций ничем не отличается от вызова встроенных функций CLIPS. Обработчики сообщений позволяют пользователю опреде­лять поведение объектов, с помощью задания той или иной реакции на со­общения. Функции, родовые функции и обработчики сообщений представ­ляют собой отрезки кода, заданного пользователем и выполняемого, в случае необходимости, интерпретатором CLIPS. Кроме того, механизм модулей (конструктор defmodule, см. гл. 12) позволяет разбивать базу знаний CLIPS на отдельные смысловые части.

Функции

Конструктор deffunction позволяет создавать новые функции непосредст­венно в CLIPS. Более ранние версии CLIPS позволяли использовать только внешние пользовательские функции, написанные на каком-нибудь языке программирования (чаще всего Си) и присоединенные к среде CLIPS.

Тело функции, определенной с помощью конструктора deffunction, пред­ставляет собой последовательность действий, подобную используемой в правой части правил. Заданные пользователем действия выполняются при вызове соответствующей функции. Значение, возвращаемое функцией, яв­ляется результатом вычисления последнего действия. Подробно тема функ­ций освящена в гл. 7.

Родовые функции

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

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



Дата добавления: 2021-12-14; просмотров: 320;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.