Exxlog. Руководство пользователя

Научно-производственная фирма «Семантикс Рисеч»

Инструментальный комплекс для создания машины логического вывода экспертных систем Exxlog
Руководство пользователя
(1.02)

2016


1. Назначение
Система «Exxlog» предназначена для построения системы логического вывода продукционных экспертных систем. В результате работы создается автономный ЕХЕ-модуль с файловым интерфейсом. Такой модуль вляется основой, ядром экспертной системы. Универсальный файловый интерфейс позволяет создавать полноценную прикладную систему из одного или нескольких ЕХЕ-модулей, интегрируя их со средствами внешних программ, например диалогового интерфейса и прикладной базой данных.
Система «Exxlog» разработана научно-производственной фирмой «Semantics Research». (http//exlog.ru)
2.Введение

Центральной подсистемой всякой экспертной системы является система логического вывода, производящая поиск решения прикладной задачи на основе базы знаний (правил логического вывода) в соответствии с исходными данными задачи.
С помощью инструментальной системы Exxlog пользователь может создать одно или несколько приложений — ЕХЕ-файлов, выполняющих поиск решения на основе логического вывода. Такую программу называют «машина логического вывода» или «движок» экспертной системы.
Полученные автономные программы можно связать с другими компонентами прикладной системы, например, с диалоговым интерфейсом, через интерфейсные файлы, в которые записываются исходные и результирующие файлы для решения задачи.
Система Exxlog содержит редактор правил, редактор задач, компилятор правил, компоновщик проекта, средства анализа и представления результатов.
Для представления правил и задач предоставляется язык представления знаний EXPL, представляющий собой модификацию языка логического программирования Prolog. С помощью этого языка пользователь записывает правила логического вывода и спецификацию прикладной задачи в виде набора бинарных предикатов.
Универсальность представления данных в виде бинарных предикатов в языке EXPL позволяет строить системы достаточной сложности для создания коммерческих интеллектуальных прикладных систем.
EXPL можно рассматривать как модификацию языка логического программирования PROLOG, придающую ему ряд дополнительных свойств, необходимых для создания системы логического вывода, а именно следующих:
· запрет повторного вызова цели с теми же аргументами (защита от зацикливания);
· защита от повторного вывода однажды выведенных целей;
· сохранение созданного логического вывода;
· возможность работать с большими объемами правил;
· сохранение трассы просмотра пространства поиска;
· управление объемом вычислений для защиты от излишних неэффективных поисков при наличии ошибки или отсутствии решения;
· построение объяснения полученного решения;
· интеграция с процедурными языками программирования;
· интеграция со средствами операционной системы;
· эффективность кода;
· возможность создания автономных программ.
Текст на языке EXPL обрабатывается специальным компилятором, транслирующим его в текст на стандартном языке Prolog, после чего создается ЕХЕ-файл средствами системы Arity/Prolog. Такой подход обеспечивает высокую производительность созданной программы, сравнимую с производительностью компилированных программ на стандартном языке ПРОЛОГ.
Средства защиты от зацикливания гарантируют, что вычисление всегда завершится, даже при наличии ошибок в правилах. При этом обеспечивается полный обход пространства поиска. Если имеется ошибка и доказательство невозможно, то вычисления остановятся при завершении полного обхода пространства поиска.
Для ограничения объема вычислений пользователь может задать два параметра – лимит глубины и длины поиска.
Текст на языке EXPL может включать, при необходимости, вызовы предикатов на чистом PROLOG.
Работа с проектом ЭС в системе Exxlog состоит из следующих этапов:
· концептуализация предметной области;
· создание базы правил;
· создание машины логического вывода ЭС;
· спецификация задач;
· тестирование и отладка.

3. Создание проекта

Первый этап создания проекта информационной системы – концептуализация, т.е. определение средств формализации объектов и отношений предметной области.
Для работы с проектом необходимо создать соответствующую папку и включить в нее файл проекта. Все файлы проекта будут создаваться в папке проекта. Для создания проекта необходимо использовать пункт NEW в меню PROJECT.
Пример: Предметная область – решение задач по планиметрии. Представление основных типов объектов может быть таким:
· seg(A,B) – отрезок с концевыми точками A и B;
· tri(A,B,C) – треугольник с вершинами А, В, С;
· length(seg(A,B),L) – длина отрезка;
· equal(tri(A,B,C),tri(X,Y,Z)) – равенство треугольников.
·
Выбранные способы представления объектов предметной области должны применяться в правилах вывода, в спецификации задач и представлении результатов решения.
Созданный файл правил компилируется для обнаружения синтаксических ошибок с последующим редактированием в соответствующей вкладке при необходимости.

4. Как работать с системой Exxlog

После того, как основные принципы концептуализации, в первую очередь, способы представления объектов предметной области, сформированы, можно приступить к работе с системой Exxlog.
Типовая последовательность операций может быть следующей:
— создать проект и папку проекта;
— создать и откомпилировать файл базы знаний;
— создать и откомпилировать файл процедур на языке PROLOG, если это необходимо;
— скомпилировать исполнительную программу (движок) проекта:
— создать файл (файлы) тестовых задач;
— провести отладку исполнительной программы;
— перейти к построению прикладной системы на основе полученного «движка» без средств Exxlog.

4.1. Создание проекта

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

4.2. Создание базы знаний

Создание базы знаний выполняется с использованием меню «БЗ» и одноименной вкладки. Текст базы знаний на языке EXPL можно создать, пользуясь произвольным текстовым редактором или непосредственно во вкладке «БЗ», которая тоже обеспечена возможностью редактирования текста.
Для создания базы знаний с нуля можно набрать текст в пустой панели вкладки, затем создать новый файл, пользуясь пунктом меню «Сохранить как».
Компиляция базы знаний выполняется через меню «Проект». После исправления синтаксических ошибок выполнить компиляцию проекта, создав при этом исполнительную программу для отладки. Если применяются пользовательские предикаты, их необходимо включить в файл triproc.ari и добавить имена входных предикатов в список, который размещен в файле параметров espar.ari.

4.4. Создание исполнительной программы проекта

Компилированный файл базы знаний составляет основу «движка» — машины логического вывода создаваемой ЭС. Компиляция проекта запускается соответствующей кнопкой в меню ПРОЕКТ. В результате компиляции проекта будет создан файл cgtfn.exe.

4.5. Создание тестовых задач

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

4.6. Отладка исполнительной программы

Прогон полного набора тестовых задач составляет основу тестирования и отладки построенной базы знаний.
Результат каждого запуска решения (ВЫПОЛНИТЬ — меню «ПРОЕКТ») будет виден во вкладках ВЫПОЛНЕНИЕ, БД, ТРАССА, ДЛВ.
При запуске во вкладке ВЫПОЛНЕНИЕ появятся исходный текст решаемой задачи и набор результирующих параметров. В том случае, если решение задачи не будет получено, в строке результат появится слово failed.
По результатам можно будет видеть объем произведенных вычислений, полученных результатов и время, затраченное на решение.
Одной из возможных причин неудачного исполнения может быть неправильный подбор параметров глубины и длины вычислений.
Файл базы данных sdb.sdb в папке проекта является основным результатом решения задачи. Этот файл можно использовать как интерфейсный для использования результатов в создаваемой экспертной системе. Это файл отображается в папке «БД». Последняя строка в базе данных задачи содержит результат вычисления заданной цели.
Трасса проведенного вычисления, отображаемая в одноименной папке, позволяет видеть весь объем произведенных вычислений при прогоне задачи. Анализ трассы позволяет найти логические ошибки и неточности в базе знаний. При анализе трассы необходимо учитывать наличие бэктрекинга.
Вкладка «ДЛВ» содержит дерево логического вывода — все утверждения, использованные для получения результирующего утверждения с указанием их взаимосвязей.

4.7. Применение исполнительной программы

Исполнительная программа – cgtfn.exe после отладки может использоваться независимо от системы Exxlog. Управление программой проводится через файл espar.ari. Результат вычисления будет находиться в файле sdb.sdb.
Файл results.txt будет содержать параметры последнего проведенного вычисления.
Файл ersexp.ari будет содержать текстовое представление построенного логического вывода. Это файл можно использовать для построения объяснения пользователю полученного решения.
Трасса проведенного вычисления размещается в файле prestrac.ari.

5. База знаний

База знаний (правил) создается в виде одного текстового файла на языке EXPL с расширением “rul”, например – ‘planim.rul’. Этот файл необходимо разместить в папке, выбранной для файлов проекта.
Для работы с базой правил предназначено меню «rules» и одноименная папка.
Текст правила EXPL состоит из спецификации типа правила и спецификации вариантов.
Для освоения языка EXPL желательно знание синтаксиса языка PROLOG.
Спецификация типа правила состоит из заголовка правила в качестве аргумента одноарного предиката “type”.
Пример: type(length(seg(X,Y),L)).
Тело правила может иметь несколько вариантов, все они должны быть пронумерованы целыми числами. Правило состоит из заголовка и списка целей. Все они должны быть размещены в разных строках текста. Правило всегда является бинарным предикатом, поэтому заголовок правила всегда имеет три аргумента. Если аргументов больше, можно разместить их в виде списка, а если меньше – необходимо задать произвольную переменную, не совпадающую ни с одним именем в правиле.
Пример 1: Правило вычисления длины отрезка, являющегося стороной треугольника, через высоту и площадь этого треугольника.

length(1,seg(X,Y),L):-
height(seg(X,Y),tri(P,X,R)),
area(tri(P,X,R),Ar),
length(seg(P,R),L1),
L is 2*(Ar/L1).

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

length(2,seg(X,Y),L):-
equal(seg(X,Y),seg(R,T)),
length(seg(R,T),L).

Каждый тип объекта, применяемый в описании задач, должен быть специфицирован в предикате type, даже если для него нет правил (такие типы объектов используются в описании исходных данных задачи).
6. Спецификация задачи
Для спецификации каждой решаемой задачи создается отдельный текстовый файл с расширением “tsk”.
Для примера рассмотрим класс задач по планиметрии «Вычисление длины отрезка в треугольнике», использованный в демо-примере.
В равнобедренном треугольнике проведена высота и вершины, находящейся между равными сторонами. Во внутреннем треугольнике также проведена высота, затем во вновь образованном треугольнике также проводится высота, таким образом последовательно построены 10 высот. Класс задач – определение длины для каждой стороны любого из внутренних треугольников.
Для спецификации исходных данных конкретной задачи необходимо указать свойства каждого известного элемента и искомое свойство. В нашем примере это равнобедренный треугольник, длины его сторон и описание расположения высот. Вся информация формулируется в виде бинарных предикатов. Для упорядочения, каждый бинарный предикат заключается внутрь двухарного предиката s/2, первым аргументом которого является порядковый номер.

Рис.1 Равнобедренный треугольник с высотами
.
Пример. Описание задачи, соответствующей рис.1.
s(1,exist(d,tri(a,b,c))).
s(2,height(seg(b,d),tri(a,b,c))).
s(3,height(seg(d,e),tri(b,c,d))).
s(4,height(seg(f,e),tri(b,e,d))).
s(5,height(seg(f,g),tri(f,e,d))).
s(6,height(seg(h,g),tri(f,g,e))).
s(7,height(seg(h,i),tri(g,h,e))).
s(8,height(seg(i,k),tri(h,i,e))).
s(9,height(seg(k,l),tri(i,k,e))).
s(10,height(seg(l,m),tri(l,k,e))).
s(11,height(seg(m,n),tri(m,l,e))).
s(12,equal(seg(a,b),seg(b,c))).
s(13,length(seg(a,b),10)).
s(14,length(seg(a,c),16)).
s(15,length(seg(d,e),x)).

Искомая величина должны быть записана в последней строке задачи с признаком «х» в качестве аргумента.
Данное описание задачи должно храниться в текстовом файле с расширением «tsk» в папке проекта. В папке демо-проекта «demo» он хранится под именем “Tri7.tsk”.
Файл описания задачи может быть создан в любом редакторе. Можно использовать вкладку “task” и соответствующее меню.
Текст задачи может содержать строки комментариев. Признак комментариев – “%” в начале строки.
7. База данных задачи

База данных задачи (БД) содержит все результаты задачи – исходные, промежуточные и результирующие утверждения – выполненные предикаты.
Начальное состояние БД устанавливается после загрузки исходных данных задачи. Все промежуточные результаты, полученные в результате логического вывода, заносятся в базу данных только один раз – повторный поиск не проводится, если результат есть в базе данных.
База данных сохраняется в файле sdb.sdb и является основным интерфейсным файлом системы. Этот файл можно использовать для задания исходных данных для решения задач и для получения результатов проведенных вычислений.
8. Компиляция проекта
После выполнения компиляции базы правил, можно перейти к компиляции проекта, которая выполняется запуском соответствующего пункта меню “Project”.
В результате компиляции, в папке Exxlog будет создан EXE-файл, который может использоваться независимо от инструментальной среды.
На этапе отладки и тестирования проекта целесообразнее не выходить из инструментальной среды, поскольку в ней обеспечиваются удобные средства поддержки разработки.
9. Запуск логического вывода

Для решения конкретной прикладной задачи необходимо открыть файл со спецификацией этой задачи через меню “Task”. Содержимое файла отобразится в соответствующей вкладке. После этого можно запустить логический вывод для решения заданной задачи.
Перед запуском логического вывода необходимо установить два параметра – максимальную длину и максимальную глубину логического вывода. Эти параметры необходимы для того, чтобы ограничить объем поиска в случае отсутствия решения. Необходимо устанавливать достаточную величину этих значений, поскольку малые значения не позволят получить решение задачи.
В случае удачного завершения – если решение будет найдено, во второй части вкладки “Run” будут отображены параметры выполненного логического вывода в виде списка из 13 значений.
Результаты проведенного вычисления будут также отображаться в следующих вкладках:
— task – список предикатов спецификации задачи;
— database – состояние базы данных вычисления после выполнения;
— trace – трасса – список целей, использованных в процессе поиска логического вывода;
— tree – дерево логического вывода – список целей, использованных для доказательства полученного предиката.
Параметры логического вывода.
Date – дата выполнения вычисления.
Задача – имя файла решаемой задачи.
Проект – адрес папки проекта
Цель – цель решения в виде предиката. Если решение не найдено, вместо значения будет слово “failed”.
Длина вывода – количество строк в построенном логическом выводе.
Объем базы данных задачи – длина списка предикатов, составляющих текущее состояние базы данных задачи после проведения вычислений.
Объем поиска – количество пройденных целей.
Глубина поиска – максимальное значение глубины поиска, достигнутое в процессе решения задачи.
Количество целей – максимальный номер цели, построенной в процессе логического вывода.
Время начала – время запуска системы на решение данной задачи.
Время завершения — время завершения вычисления системой при решении данной задачи.
Длительность – разность времени завершения вычислений и времени начала с точностью до сотых долей секунды. Если длительность меньше 0,01 сек, значение этого параметра будет равно нулю.
Скорость поиска – количество проходимых целей в секунду, при проведении данного решения.
Пример: Представление результатов логического вывода
date(2016,2,6)
Задача:Tri8.tsk
Проект:C:\amod\Exxlog\ExxTri\
Цель: length(seg(l,m),0.2239488)
Длина вывода = 25
Объем базы данных задачи = 138
Объем поиска = 4257
Глубина поиска = 17
Количество целей = 1643
Время начала = time(7,22,52,34)
Время завершения = time(7,22,52,43)
Длительность = 0.09
Скорость поиска = 47300
10. Дерево логического вывода

Дерево логического вывода (ДЛВ) можно видеть ПРОЛОГ в специальной вкладке “Tree”. ДЛВ представляет собой последовательный список утверждений, составляющих доказательство полученного решения.
Утверждения, составляющие логический вывод полученного результата перечисляются снизу вверх – от самых элементарных, до последнего, завершающего утверждения.
Каждая строка ДЛВ имеет следующий синтаксис:
<порядковый номер>.<номер цели><предикат><список использованных целей>
Номер цели – каждая цель в процессе поиска вывода получает очередной номер. Поскольку не все появляющиеся цели ведут к результату, в ДЛВ попадают не все номера целей. Третий элемент строки ДЛВ – выполненная цель – утверждение, выведенное в процессе поиска решения.
Четвертый элемент строки ДЛВ – список номеров целей (утверждений), использованных в правиле, использованном для доказательства полученного результата.
Пример. Дерево логического вывода для задачи Tri7.
1. (78) hypot(tri(d,b,c),seg(b,c)) [79]
2. (45) exist_rect(tri(d,b,c),seg(d,b)) [2]
3. (46) length(seg(d,c),8) [14,47]
4. (66) length(seg(b,c),10) [13,12]
5. (77) pif_length([seg(d,b),6],[[seg(d,c),8],[seg(b,c),10]]) [78]
6. (47) median(tri(a,b,c),seg(b,d)) [2,48]
7. (333) rectangle(tri(c,d,b),_2F28) [2]
8. (334) catets(tri(c,d,b),[seg(b,d),seg(d,c)]) [78]
9. (44) length(seg(d,b),6) [77,66,46,45]
10. (46) length(seg(d,c),8) [14,47]
11. (332) area(tri(c,d,b),24) [46,44,334,333]
12. (66) length(seg(b,c),10) [13,12]
13. (331) length(seg(d,e),4.8) [66,332,3]
Приведем текстовую интерпретацию полученного решения.
1)Для вычисления длины отрезка seg(d,e) (331) использовано правило: если искомый отрезок является высотой в треугольнике, то его длина равна площади треугольника деленной на основание и умноженной на два. Аргументы для этого правила получены из целей с номерами 66,332,3,
Площадь треугольника cdb равна 24 – цель 332. Длина основания bc равна 10 – цель 66. Искомая длина равна 2*(24/10) = 4.8. Отрезок de является высотой треугольника cdb – цель 3 (исходные данные).
2)Длина отрезка bc (66) вычислена из правила – если искомый отрезок равен другому отрезку с известной длиной, то искомая длина равна длина равного отрезка.
В нашем случае искомый отрезок bc равен отрезку ab – это задано в исходных данных – цель 12, длина отрезка ab задана в утверждении 13.
3) Площадь треугольника cdb (332) вычисляется по правилу для прямоугольных треугольников по длинам катетов, аргументы заданы целями 46,44, 333, 334.
Прямоугольность треугольника cdb (333) следует из того, что отрезок bd является высотой в треугольнике abc (2). Отсюда следует определение отрезков, которые являются катетами в этом треугольнике – bd и dc (334). Далее следует вычисление длин катетов (44) и (46).
4)Длина катета db (44) вычисляется через прямоугольный треугольник bdc из целей с номерами 77,66,46,45.
Цель 77 – применение теоремы Пифагора для вычисления отрезка db. Цель 66 – вычисление длины отрезка bc. Цель 46 – длина отрезка dc. Цель 45- наличие прямоугольного треугольника dbс с искомым отрезком db.
5)Длина катета dc (46) вычисляется из целей 14, 47 по правилу отрезка при медиане треугольника. Цель 14 задана в исходных данных – длина отрезка ac, на который опущена медиана bd (47).

Рис.2 Дерево логического вывода для задачи Tri7.
Рассмотренное нами дерево в графическом виде приведено на рис.2. Как можно видеть из рисунка, все терминальные вершины дерева – утверждения из исходных данных.
11. Трассировка логического вывода
Трасса логического вывода представляет все шаги, выполненные системой в процессе решения задачи. Трасса содержит полную информацию о действиях программы.
Трасса состоит из двух типов описаний – выдвинутая цель(или гипотеза), выполненная цель (или утверждение). Эти описания различаются только одним элементом – направлением стрелки. Выдвинутая цель обозначается с использованием стрелки вправо – «->», а выполненная – с использованием стрелки влево — «<<-».
Синтаксис представления трассы логического вывода следующий:

<описание цели> ::= <уровень вывода> “-“ <номер варианта правила> “,”<вызывающая цель><тип цели><номер цели><Предикат><список целей-аргументов>

Как видно из приведенного примера, углубление в процессе вывода обозначается увеличением номера уровня – первое число и сдвигом вправо на соответствующее количество пробелов.
Трасса логического вывода является источником для построения описания дерева логического вывода.
Пример. Начальный фрагмент трассы логического вывода для задачи Tri7.

1-1,0->16 length(seg(d,e),_337C) []
2-1,16->17 median(tri(_33C0,_33C4,e),seg(_33C4,d)) []
3-1,17->18 equal_side(seg(_33C4,_33C8),seg(_33C8,e)) []
3-1,17->19 equal_side(seg(e,_33C8),seg(_33C8,_33C8)) []
3-1,17->20 equal_side(seg(e,e),seg(e,_33D8)) []
2-1,16->21 median(tri(_33C0,_33C4,d),seg(_33C4,e)) []
3-1,21->22 equal_side(seg(_33C4,_33C8),seg(_33C8,d)) []
3-1,21->23 equal_side(seg(d,_33C8),seg(_33C8,_33C8)) []
3-1,21->24 equal_side(seg(d,d),seg(d,_33D8)) []
2-1,16->25 median(tri(_33C0,_33C4,e),seg(_33C4,d)) []
3-1,25->26 equal_side(seg(_33C4,_33C8),seg(_33C8,e)) []
3-1,25->27 equal_side(seg(e,_33C8),seg(_33C8,_33C8)) []
3-1,25->28 equal_side(seg(e,e),seg(e,_33D8)) []
1-2,0->29 length(seg(d,e),_337C) []
2-1,29->30 exist_rect(tri(d,e,_33CC),seg(d,e)) []
3-1,30->3 height(seg(d,e),tri(d,b,c)) []
3-1,30<-3 height(seg(d,e),tri(d,b,c)) [3]
2-1,29<-30 exist_rect(tri(d,e,b),seg(d,e)) [3]
2-1,29->31 length(seg(d,b),_337C) []
3-1,31->32 median(tri(_33C0,_33C4,b),seg(_33C4,d)) []
4-1,32->33 equal_side(seg(_33C4,_33C8),seg(_33C8,b)) []
4-1,32->34 equal_side(seg(b,_33C8),seg(_33C8,_33C8)) []
4-1,32->35 equal_side(seg(b,b),seg(b,_33D8)) []
3-1,31->36 median(tri(_33C0,_33C4,d),seg(_33C4,b)) []
4-1,36->37 equal_side(seg(_33C4,_33C8),seg(_33C8,d)) []
4-1,36->38 equal_side(seg(d,_33C8),seg(_33C8,_33C8)) []
4-1,36->39 equal_side(seg(d,d),seg(d,_33D8)) []
3-1,31->40 median(tri(_33C0,_33C4,b),seg(_33C4,d)) []
4-1,40->41 equal_side(seg(_33C4,_33C8),seg(_33C8,b)) []
4-1,40->42 equal_side(seg(b,_33C8),seg(_33C8,_33C8)) []
4-1,40->43 equal_side(seg(b,b),seg(b,_33D8)) []
2-2,29->44 length(seg(d,b),_337C) []

Из приведенного фрагмента трассы поиска видно, что работа начинается с выполнения заданной цели length(seg(d,e),x), на первом уровне делается попытка выполнить цель через первое правило для length – вычисление длины через медиану треугольника.

1-1,0->16 length (seg(d,e),_337C) []

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

1-2,0->29 length(seg(d,e),_337C) []

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

2-1,29->30 exist_rect(tri(d,e,_33CC),seg(d,e)) []
3-1,30->3 height(seg(d,e),tri(d,b,c)) []
3-1,30<-3 height(seg(d,e),tri(d,b,c)) [3]
2-1,29<-30 exist_rect(tri(d,e,b),seg(d,e)) [3]

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

2-1,29->31 length(seg(d,b),_337C) []

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

2-2,29->44 length(seg(d,b),_337C) []

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

12. Подключение процедур

В случае использования пользовательских процедур на языке PROLOG, необходимо их добавить в существующий файл triproc.ari, и выполнить его компиляцию средствами Aruty/Prolog32. В результате компиляции будет получен файл triproc.obj, который будет включен в создаваемый ЕХЕ-файл с именем cgtfn.exe.
Все предикаты PROLOG, которые могут быть вызваны из базы знаний необходимо специфицировать как внешние точки в файле triproc.ari. Кроме того, имена этих предикатов, без указания арности, должны быть перечислены в списке PROCEDURES в файле estrpar.ari, который должен находиться в папке проекта.

13. Отладка

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

14. Описание языка EXPL 1.0
Язык представления знаний EXPL предназначен для описания задач и правил базы знаний в системе Exxlog. EXPL является модификацией языка PROLOG и использует сходный синтаксис описания предикатов. Понятие предиката является центральным для языка EXPL также, как и для языка PROLOG

<текст EXPL>::=<спецификация задачи> | <база знаний>

14.1. Спецификация задачи

Спецификация задачи состоит из описания условий (данных) и цели решения задачи. Задача должна содержать не менее одного условия и одну и только одну цель решения. Аргументом предиката данных должна быть бинарная структура – только с двумя аргументами.
Отличием цели от данных является применение зарезервированного аргумента “x” (малая буква латинского алфавита.
Предикаты спецификации задачи не должны содержать переменных. Если какой-то аргумент не используется, применять символ подчеркивания.
Все предикаты спецификации задачи должны быть пронумерованы (первый аргумент) в порядке следования.

<описание задачи> ::=<данные> <цель>
<данные>::=<предикат данных>…
<предикат данных>::= s(<целое>, <имя> (<аргумент> , < аргумент >)).
< аргумент > ::= <имя> | <структура> | <число> | <список>
< структура > ::= <имя> (<аргумент> ,… < аргумент >)
< имя > ::= <малая буква> | <малая буква><продолжение>
< продолжение > ::= < буква> | < буква><продолжение> | < цифра> | < цифра><продолжение>
< малая буква > ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
< буква > ::=< малая буква > |< большая буква>
< большая буква > ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
< цель>::= s(<целое>, <имя> (<аргумент> , x)). | s(<целое>, <имя> (x , < аргумент >)).

14.2. База знаний

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

<база знаний>::= <правило> …
<правило> ::= <заголовок правила> <предикат правила> …
<заголовок правила>::= type(<имя правила> (<аргумент правила> ,< аргумент правила >)).
< аргумент правила >::= <имя переменной> | <имя> | <структура> | <число> | <список>
<предикат правила>::= < заголовок правила> :- < тело правила >.
<заголовок правила>::= <имя правила> (<порядковый номер>,<аргумент правила> ,< аргумент правила> ).
<порядковый номер>::= <целое>
< тело правила >:-<цель правила>,…
<цель правила>::= <вызов правила> | <вызов предиката> | <выражение>
<выражение>::= <терм > <оператор> <терм>.

15. Диалоговый интерфейс системы Exxlog
Диалоговый интерфейс инструментальной системы Exxlog состоит из пяти меню, панели параметров и панели вкладок.

Меню ПРОЕКТ
Открыть проект – открывается диалоговое окно для выбора файла проекта. Имя выбранного файла отображается в соответствующем поле в панели параметров.
Компиляция БЗ – запуск компиляции БЗ. Поле БЗ в панели параметров должно быть заполнено.
Компиляция проекта – запуск компиляции проекта.
Новый проект – создать новый проект в новой папке.
Выполнить – запуск решения задачи в текущем проекте.
Выход – завершение работы.

Меню ЗАДАЧА
Открыть – выбор и открытие в папке проекта текущего файла задачи для решения, а также для просмотра и редактирования. Файл должен иметь расширение ‘tsk’. Содержимое файла отображается во вкладке ЗАДАЧА. Имя выбранного файла отображается в соответствующем поле в панели параметров.
Закрыть – очистка панели во вкладке ЗАДАЧА.
Сохранить – сохранение содержимого панели в текущем файле задачи.
Сохранить как — сохранение содержимого панели в файле задачи с другим именем.

Меню БЗ
Открыть – выбор и открытие в папке проекта текущего файла базы знаний для решения, а также для просмотра и редактирования. Файл должен иметь расширение ‘rul’. Содержимое файла отображается во вкладке БЗ. Имя выбранного файла отображается в соответствующем поле в панели параметров.
Закрыть – очистка панели во вкладке БЗ.
Сохранить – сохранение содержимого панели в текущем файле базы знаний.
Сохранить как — сохранение содержимого панели в файле базы знаний с другим именем.

Меню ТЕКСТ
Открыть – выбор и открытие произвольного текстового файла задачи для просмотра и редактирования. Содержимое файла отображается во вкладке ТЕКСТ.
Закрыть – очистка панели во вкладке ТЕКСТ.
Сохранить – сохранение содержимого панели в текущем файле текста.
Сохранить как — сохранение содержимого панели в файле текста с другим именем.

Меню СПРАВКА
Справка — открытие файла справочной информации о программе Exxlog.
О программе – открытие панели с информацией о версии программы.

Панель параметров
Содержимое полей ПРОЕКТ, ЗАДАЧА, БЗ устанавливается через одноименные меню.
Поле ГЛУБИНА – должно содержать максимальное допустимое значение уровня вложенности правил при выполнении поиска логического вывода. Поле не должно быть пустым при запуске выполнения 0 решения задачи. При превышении поиска выполнение правила прекращается с возвратом к другой ветви пространства поиска. Выполнение решения задачи продолжается.
Поле РАЗМЕР – должно содержать величину максимального количества целей, порождаемого в процессе выполнения решения. Поле не может быть пустым. При превышении указанного значения решение задачи прекращается.
Вкладки
Компиляция – во вкладке отображается результат компиляции файла базы знаний или проекта при выполнении соответствующей операции.
Выполнение – во вкладке отображается текст задачи и результат ее решения после запуска выполнения решения.
Задача – вкладка для редактирования и просмотра текста задачи.
БЗ — вкладка для редактирования и просмотра текста базы знаний.
БД – содержимое вкладки отображает содержимое базы данных задачи после выполнения решения.
Трасса — содержимое вкладки отображает трассу выполнения поиска вывода после выполнения решения.
ДЛВ — содержимое вкладки отображает дерево логического вывода после выполнения решения.
Текст — вкладка для редактирования и просмотра произвольного текстового файла.

Один комментарий на “Exxlog. Руководство пользователя

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *