Модули представления знаний в экспертной системе

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

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

Типичными моделями представления знаний являются:

q логическая модель;

q модель, основанная на использовании правил (продукционная модель);

q модель, основанная на использовании фреймов;

q модель семантической сети.

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

Логическая модель представления знаний

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

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

ЛЮБОВЬ(Виктор, Ирина): Виктор любит Ирину

СТОЛИЦА(Москва): Москва — столица

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

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

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

Здесь знания представлены совокупностью правил вида “ЕСЛИ-ТО”. Эти системы бывают двух диаметрально противоположных типов — с прямыми и обратными выводами.

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

При прямом выводе отправной точкой служат предоставленные данные, а процесс оценки соответствуюет самому верхнему уровню дерева.

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

В двунаправленных выводах оценивается небольшой объем данных и выбирается гипотеза. Затем данные, необходимые для принятия решения о пригодности данной гипотезы.

ИТ программирования

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

Различают машинно-ориентированные (ассемблеры) и алгоритмические языки.

У ассемблера каждая инструкция жестко привязана к конкретному микропроцессору. Различают одноадресные, двухадресные и трехадресные ассемблеры. У одноадресных ассемблеров в каждой команде может задаваться только один адрес ячейки оперативной памяти. Остальными, помимо адреса ячейки аргументами одноадресного ассемблера являются регистры процессора. Чаще всего результат выполнения инструкций помещается на единственный выходной регистр. Например, по команде ADD 7,A1 осуществляется сложение двух чисел с 7-го регистра и ячейки памяти, зарезервированной идентификатором А1.

Любая инструкция одноадресного ассемблера соответствует по числу бит разрядности микропроцессора. Биты микропроцессора здесь делятся на две группы: биты команды и биты адреса аргумента. Число бит команды определяет зарезервированное для данного микропроцессора максимальное число команд. Так, если число бит команд равно 5, то максимальное число команд будет равно 32. Число бит адресной части команды определяет максимальный прямой адрес ячейки, который можно указать. У современных микропроцессоров помимо прямого адреса можно указать косвенный, более длинный адрес в специальной промежуточной ячейке памяти. Так, например, по команде ADD 7,&А1 осуществляется извлечение числа из ячейки памяти, адрес которой указан в ячейке А1 (косвенная адресация). Недостатком одноадресных ассемблеров является их более низкое быстродействие в сравнении с другими ассемблерами. Чаще всего полное завершение операции здесь выполняется тремя командами:

MOV А,7

ADD 7,А1

MOV В

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

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

Самыми быстрыми являются трехадресные ассемблеры. У них в явном виде задаются сразу три адреса ячеек памяти в одной команде. Трехадресные ассемблеры используются в некоторых суперЭВМ.

У алгоритмических языков команды являются логическими инструкциями и не привязаны к конкретному типу микропроцессора. Типичными командами алгоритмического языка являются команда условного ветвления и команда организации цикла.

Так по команде ветвления:

if (A<=5) then

X=A+A;

else

X=A*A;

end if

в начале осуществляется проверка условия А<=5. Если значение переменной А окажется меньше либо равно 5, то выполняется инструкция Х = А + А. В противном случае выполняется инструкция Х = А * А.

По команде цикла

For (i=0;i<5;i=i+1) S=S+i;

в начале переменной i присваивается значение 0. После этого проверяется условие i<5, если это условие выполняется, то исполняется инструкция S = S + i, после которой значение i увеличится на 1. Далее опять проверяется условие i<5. Не выполнение этого условия приводит к окончанию цикла.

Чаще всего перед написанием программы на алгоритмическом языке создается блок–схема алгоритма. Блок-схема содержит в себе набор стандартных блоков, реализующих все возможные варианты алгоритмов.

В состав блок-схемы могут входить следующие блоки.

Блок ветвления(рис. 1.9) реализует ветвление по условию. Если условие выполняется, то осуществляется переход на ветвь именуемую «да». В противном случаи — на ветвь «нет».

Модули представления знаний в экспертной системе - student2.ru

Рис. 1.9. Блок ветвления

Блок множественного ветвления (рис. 1.10). В зависимости от значения переменной i осуществляется переход на ветвь, помеченную соответствующим значением или условием (например 1≤i≤5).

Модули представления знаний в экспертной системе - student2.ru

Рис. 1.10.Блок множественного ветвления

Блок цикла. (рис. 1.11). Позволяет циклически выполнить «Операторы 1» при изменении переменной i от начального значения (на рис. 1.11 это 1) до конечного значения (на рис. 1.11 это 4) с заданным шагом (на рис. 1.11 это 2).

Модули представления знаний в экспертной системе - student2.ru

Рис. 1.11. Блок цикла

В блоке рис. 1.12 выполняется набор линейных вычислений и инструкций (в данном примере Х = А * 2).

Модули представления знаний в экспертной системе - student2.ru

Рис. 1.12. Блок линейного алгоритма

Блок рис. 1.13 позволяет вызвать обособленный алгоритм, поименованный идентификатором RKGS. Это вызов процедур языка.

Модули представления знаний в экспертной системе - student2.ru

Рис. 1.13. Блок вызова процедуры

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

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

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

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

Достоинством интерпретатора является возможность создания более гибкого алгоритма.

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

Недостатком интерпретатора является невозможность скрыть программный код.

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

Сразу же после Algol в 1968 году появился язык Fortran, долгое время остававшимся лидером среди языков программирования. Несмотря на более совершенные современные языки программирования Fortran до сих пор используется при программировании задач математической физики, где необходимо очень высокое быстродействие. Это связано с тем, что компиляторы Fortran обеспечивают наиболее полно оптимизацию ассемблерного кода по быстродействию. Так простейшая операция последовательного умножения 100000 элементов массива выполняется на Fortran примерно на 15 раз быстрее, чем на С++.

Параллельно с языком Fortran появился язык PL/1, который изначально был ориентирован на создание файловых баз данных. Язык содержит очень хороший сервис работы с файловой системой. Этот язык используется до настоящего времени при работе с ранее созданными базами данных. Недостатком PL/1 является наличие свободного синтаксиса в написании операторов. Такое отсутствие стандартов в операторах затрудняет написание программы и, что еще более важно, чтение этой программы даже самим разработчиком спустя некоторое время.

С целью наиболее полной стандартизации операторов и структур языка Виртом был создан язык Pascal. Язык Pascal содержит более стандартизированный, чем в Fortran и PL/1, набор операторов. Это позволяет очень быстро его освоить и создавать прозрачные для чтения алгоритмы. С 2006 года фирмами Pascal уже не поддерживается, кроме, конечно же, созданных ранее программных макетов.

На базе идеологии Pascal чуть позже был создан язык С и позднее С++. Язык С отличается логически от Pascal только иным синтаксисом операторов. Язык С до сих пор является наиболее используемым программистами профессионалами. Очень многие последующие языки являются С- подобными.

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

Алгоритмический язык Basic изначально был создан для получения начальных навыков в программировании. Он появился почти одновременно с Fortran и PL/1 и имеет те же недостатки, что и PL/1 — возможность свободного синтаксиса операторов. Профессионалы редко используют Basic. В настоящее время язык Basic в объективно-ориентированной интерпретации является основой создания макросов в приложениях MS Office. Этот язык является интерпретатором и называется VBA (Visual Basic for Application).

Алгоритмические языки JavaScript и PHP являются модификациями С и используются при обработке Web- приложений.

Наши рекомендации