Методологические основы программирования экспертных систем
Методология программирования экспертных систем отличается от методологии программирования алгоритмических систем. Это вполне объясняет существование функциональной различия между языками экспертных систем и алгоритмическими языками. Суть различия заключается в том, что положено в основу представления.
Алгоритмические языки программирования нацелены на обеспечение поддержки гибких и надежных методов представления данных. Например, они позволяют легко создавать, а также манипулировать такими структурами данных, как: массивы, записи, связанные списки, стеки, очереди, деревья.
Современные языки, такие как Java и С , разработанные для оказания программисту существенной помощи в достижении абстракции данных. Для этого предусмотрены структуры, обеспечивающие инкапсуляцию данных - объекты. Тем самым достигается необходимый уровень абстракции, который затем реализуется в программе. Данные и методы манипулирования ими тесно переплетаются в объектах.
Разработчики языков экспертных систем сосредоточивают свое внимание на поддержке гибких и надежных способов представления знаний.
Подход к программированию экспертных систем предусматривает применение двух уровней абстракции - абстракции данных и абстракции знаний. В языках экспертных систем специально предусмотрено отделение данных от методов манипулирования ими. Примером подобного обособления является применение фактов (абстракции данных) и правила (абстракции знаний) в языках экспертных систем, ориентированных на применение правил.
Этот пример наглядно иллюстрирует аналогия, с классическим выражением, которое обнародовал Дональд Кнут в своей книге по программированию алгоритмических задач:
Программа = Структура данных + Алгоритмы
Относительно экспертных систем это выражение выглядит следующим образом:
Экспертная система = Знание + Логический вывод
Сформулированная отличие в направленности между языками двух типов объясняет разницу в методологиях программирования. С одной стороны, в алгоритмических языках данные и знания тесно переплетаются, поэтому программисты обязаны тщательно описывать последовательность выполнения операторов программы.
Кроме того, в языках экспертных систем данные явно отделены от знаний, чем нивелируется необходимость жесткого контроля над последовательностью выполнения кода программы.
Как правило, для применения знаний относительно данных, используется полностью отделен компонент экспертной системы - машина логического вывода. Такое разделение знаний и данных способствует достижению высокого уровня распараллеливания и модульности вычислений.
Язык экспертных систем
Таким образом, в виде общего определения, язык экспертных систем представляет собой совокупность команд, записанных с применением определенного синтаксиса и машины логического вывода, предназначенной для их выполнения. В зависимости от реализации, машина логического вывода может обеспечивать прямой логический вывод, обратный логический вывод или оба варианта разработки выводов.
Прямой логический вывод является методом формирования рассуждений в направлении от фактов к выводам, которые выходят из этих фактов. Например, если перед выходом из дома окажется, что идет дождь (факт), то вы должны взять с собой зонтик (заключение).
Обратный логический вывод предполагает формирование рассуждений в обратном направлении - от гипотезы (потенциального выводу, который должен быть доведен) до фактов, подтверждающих гипотезу.
Например, если не выглянуть в окно, но увидеть, что кто вошел в дом с влажными ботинками и зонтиком, то можно создать гипотезу, что идет дождь. Чтобы подтвердить эту гипотезу, достаточно спросить этого человека, идет дождь. В случае положительного ответа будет доказано, что гипотеза истинна, поэтому она становится фактом.
При применении обратного логического вывода, гипотеза может рассматриваться как факт, истинность которого вызывает сомнение, и должна быть установлена. В таком случае подтверждения гипотезы (или ее опровержение) может интерпретироваться, как цель, которая должна быть достигнута.
Следует заметить, что создавать экспертные системы можно также на языках программирования, которые, по приведенному определению, не относятся к языкам экспертных систем, например: С + +, Паскаль и даже ассемблер.
Целесообразность использования того или иного языка программирования зависит от таких показателей, как время разработки, удобство эксплуатации, удобство сопровождения, эффективность и быстродействие.
Для разработки систем искусственного интеллекта были созданы специализированные языки, ориентированные на работу со знаниями: LISP, PROLOG, FRL, KRL, SMALLTALK, OPS5, PLANNER, QA4, MACSYMA, REDUCE, CLIPS. Дальнейшая их эволюция привела к возможности применения идеологии объектно-ориентированного подхода к программированию экспертных систем.
Сочетание языка программирования и связанных с ним вспомогательных программ (утилит), позволяющие упростить разработку, отладку и доставку пользователю программных продуктов, образует инструментальное средство.
Современные инструментальные средства разработки экспертных систем допускают использование в одной разработке различных подходов, включая прямой и обратный логический выводы. Инструментальное средство экспертных систем специального назначения, требует от разработчика
Лишь представление базы знаний, называется командным интерпретатором. Командный интерпретатор предоставляет возможность повторного использования в экспертных системах таких программных компонентов, как машина логического вывода и пользовательский интерфейс. Технологии командных интерпретаторов избавляют от необходимости создавать экспертную систему для каждой предметной области, начиная «с нуля».