Будь умным!


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

современное средство разработки экспертных систем ЭС ориентиро ванное на решение сложных задач в режи

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


                  

    ЛОТА ПЛЮС- современное средство разработки экспертных систем (ЭС),

ориентиро- ванное на решение сложных задач в режиме интеллектуального

диалога.

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

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

самый лучший способ избежать при этом многочисленных консультаций, бесконеч-

ного листания справочников и проведения рутинных расчетов - создать эксперт-

ную систему, ориентированную на Вашу деятельность. Разработка таких систем

на основе ЛОТА ПЛЮС сэкономит время и позволит достичь высокого качества

экспертизы:

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

 сложности, в том числе неполные и неточные;

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

 создание базы знаний и позволят постоянно свершенствовать Вашу  систему без

 дополнительного программирования;

   - широкий  и простой доступ к базам данных (в том числе в стандарте dBase)

 обеспечит информационную поддержку экспертизы;

   - открытая архитектура  системы позволит использовать в ней любые Ваши мо-

 дели и расчетные процедуры;

    - оригинальный  математический  аппарат  способен гарантировать логичекую

 корректность выводов системы и непротиворечивость базы знаний;

    -  использование  окон, меню, графических средств, гипертекстов, работа с

 "мышью" сделают общение с Вашей системой удобным.

   ЛОТА ПЛЮС - это новая версия системы Лота, которая успешно

 эксплуатируется многими советскими и зарубежными пользователями. Основные

 улучшения по сравнению с последней версией Лоты (1.62):

- добавлена возможность интерактивной настройки цветов окна меню и

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

- в стандартную поставку версии Professional включена библиотека

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

появились новые разделы: - поддержка механизма "обратного логического

вывода", средства поиска "ближайшего прецедента", утилита сжатия информации

в прецедентах, поддержка типа значения *ANY*, поддержка интерфейса с сетевой

системой доступа к файлам BTRIEVE, функции поддержки текстового редактора.

Полностью изменена работа с мышью.

- добавлены новые утилиты:

(ADD-LIBRARY <file-name>) - генерирует новые версии LOTA.SYS и LOTA.EXE, с

добавленными функциями, которые содержатся в файле <file-name>;

(COMPRESS <file-name>) - производит сжатие файла гипертекста <file-name>.

- во встроенный редактор БЗ добавлена возможность создавать/редактировать

комментарии к объектам БЗ.

                                                                          

- добавлены табличные операции load-table, convert, новый тип полей в

таблицах - поле даты (D). Функции работы с базой данных полностью

переписаны, что значительно улучшило их надежность и эффективность.

Обеспечена поддержка формата DBF, используемая пятой версией Clipper. Все

операции (кроме интерактивного редактирования) теперь позволяют работать с

файлами DBF произвольного размера.

- написана инсталляционная прогрмма INSTALL.EXE.

- переписан модуль диагностики ошибок для подробного вывода на экран тех

синтаксических конструкций, в которых найдены ошибки.

- улучшен редактор Баз знаний и интерактивный редактор таблиц

- пререписаны функции гиертекста для повышения эффективности и добавления

новых возможностей.

- изменена структура документации, добавлены новые главы.


                  СОДЕРЖАНИЕ

Глава 1. Введение

  1.1. Структура документации

  1.2. Дистрибутивные дискеты

  1.3. Требование к аппаратному и программному обеспечению

  1.4. Инсталляция и запуск системы

  1.5. Принятые обозначения

Глава 2. Консультация

  2.1. Запуск консультации

  2.2. Параметры и правила

  2.3. Ситуации

  2.4. Управление ходом логического вывода

  2.5. Использование прецедентов

  2.6. Накопление опыта

  2.7. Заключение

Глава 3. Создание базы знаний

  3.1. Описание ситуации

  3.2. Описание параметров

  3.3. Установка перемнных среды

  3.4. Накопление опыта

  3.5. Описание правил

  3.6. Уточнение значений параметра

  3.7. Описание подцели

Глава 4. Основные концепции

  4.1. Параметры

  4.2. Правила

  4.3. Ситуации

  4.4. Механизм логического вывода

  4.5. Прецеденты и рассуждения по аналогии

  4.6. Комбинированный логический вывод

  4.7. Объяснения

  

Глава 5. Система меню

  5.1. Главное меню

  5.2. "Консультация"

  5.3. "Редактор БЗ"

     5.3.1. Списки объектов базы знаний

     5.3.2. Редактирование описаний объектов

     5.3.3. "Файлы"

  5.4. "Редактор Таблиц"

     5.4.1. Редактирование записей таблицы

     5.4.2. Определение новой таблицы

  5.5. "Конфигурация"

     5.5.1. "Редактор"

     5.5.2. "Окна меню"

     5.5.3. "Справочные окна"

     5.5.4. "Окно Прецедентов"

     5.5.5. "Трассировка"

     5.5.6. "Сохранение среды"

  5.6. "Интерпретатор"

  5.7. "Помощь"

  5.8. Функциональные клавиши

Глава 6. Язык представления знаний

  6.1. Константы

  6.2. Выражения

     6.2.1. Элементарные выражения

     6.2.2. Множественные выражения

     6.2.3. Описание окон

  6.3. Операции

     6.3.1. Базовые операции

     6.3.2. Операции над интервалами

     6.3.3. Конструкторы

     6.3.4. Операции базы данных

     6.3.5. Агрегатные операции

     6.3.6. Использование LISP фунций

  6.4. Логические выражения (Предикаты)

     6.4.1. Базовые предикаты

     6.4.2. AD-HOC предикаты

     6.4.3. Предикаты снятия модальности

     6.4.4. Специальные предикаты

     6.4.5. Операции модальной логики

     6.4.6. LISP функции как предикаты

  6.5. Действия

     6.5.1. Действия изменеия значений параметров

     6.5.2. Действия управления ситуацией

     6.5.3. Мета-действия

     6.5.4. Организация пользовательского интерфейса

     6.5.5. Составные действия

     6.5.6. Расширение базы знаний

     6.5.7. Объяснения, комментарии и помощь

     6.5.8. Системные действия

     6.5.9. Использование LISP функций

Глава 7. Утилиты

  7.1. Создание и использование гипертекста

  7.2. Пользовательская помощь

  7.3. Компилятор баз знаний

  7.4. Пакет деловой графики

  7.5. Библиотекарь дополнительных функций

  7.6. Сжатие гипертекстов

Глава 8. Библиотека  дополнительных функций

  8.1. Поддержка значений типа *ANY*

  8.2. Дополнительные строковые функции

  8.3. Неструктурированнный (текстовый) редактор

  8.4. Поддержка мыши

  8.5. Интенсионал

  8.6. Кванторы

  8.7. Интерфейс с Novell BTRIEVE (tm)

  8.8. Логический вывод, управляемый целью (двунаправленный)

  8.9. Компрессия прецедентов

  8.10.Поиск ближайшего прецедента

  8.11.Интерфейс с пакетом деловой графики

  8.12.Использование собственных дополнительных функций

Приложения

  Приложение 1. Алфавитный список операций и действий

  Приложение 2. Внутренние переменные

  Приложение 3. Кодировка цветов, шаблонов заполнения и типов шрифтов

  Приложение 4. Список описаний стандартных окон


   1. ВВЕДЕНИЕ

    1.2. Состав поставляемых средств

В зависимости от того, какой вариант Вы приобрели, поставочный комплект

содержит 1 (Personal), 3 (Professional) или 4 (Developer) дискеты.

Диск 1 (Personal System Disk)

-----------------------------

    install.exe - инсталляционная процедура;

    lota.exe    - основной исполняемый файл;

    color.env, herc.env,

    mono.env    - файлы настройки Лоты для различных типов ПК и адаптеров;

    lota.hlp,

    lota.lhi    - файлы, содержащие системную помощь и подсказки;

    vacat.lht,vacat.lhi,vacat.ltb,med.lht, med1.lkb, med2.lkb

    med3.lkb    - файлы демонстрационных баз знаний.

    read.me     - файл добавлений к документации и описания инсталляции

Диск2 (Professional System Disk)

---------------------------------

    lota.sys     - версия разработчика, исполняемая под управлением интерпре-

                   татора muLisp87;

    lcomp.exe    - компилятор баз знаний Лоты для изготовления отчуждаемых

                   ("stand alone") версий баз знаний (EXE файлов);

    lotalib.lsp  - библиотека дополнительных Лисп-функций

Диск3 (Professional Utility Disk)

---------------------------------

lotabtv.exe - интерфейс к BTRIEVE (tm);

lgraph.exe  - утилиты деловой графики;

pie.shb,

bar3.shb    - примеры файлов шаблонов для деловой графики;

nicXXX.fnt  - кириллические шрифты для деловой графики.

Кроме того, эта дискета содержит ряд файлов описания графических драйверов и

графических шрифтов фирмы Borland (tm).

Диск4 (Developer Source Code Disk)

--------------------------------

compgen.lsp     -  генератор компилятора баз знаний;

lotacmp.lsp     -  исходный текст компилятора баз знаний;

lotacnsl.lsp    -  модуль логического вывода;

lotact.lsp      -  модуль реализации действий;

lotadbi.lsp     -  модуль интерактивного интерфейса с базами данных;

lotadbo.lsp     -  функции работы с базами данных;

lotaedi.lsp     -  интерфейс редактора баз знаний;

lotaedt.lsp     -  функции реадтирования структурированных текстов;

lotagen.lsp     -  генратор оболочки;

lotaht.lsp      -  функции поддержки режима гипертекста;

lotakrl.lsp     -  модуль языка представления знаний;

lotamain.lsp    -  главное меню;

lotamnu.lsp     -  функции системы меню

lotamisc.lsp    -  разное;

lotamsg.lsp     -  файл сообщений;

lotapars.lsp    -  синтаксический анализатор;

lotaset.lsp     -  модуль установки среды;

lotawind.lsp    -  модуль низкоуровневой поддержки интерфейса;

addlib.lsp      -  модуль для подключения дополнительных функций;

lotgen.bat,

compgen.bat      - BATCH-файлы, управляющие процессом генерации системы и

                  компилятора соответственно,

   По Вашему желанию все дискеты могут быть сархивированы на одной. Тогда

эта дискета содержит файлы:

       read.me

       color.env

       herc.env

       mono.env

       install.exe

       lota#1.zip,

для варианта Professional дополнительно:  

       lota#2.zip,

       lota#3.zip,

для варианта разработчика дополнительно:

       lota#4.zip

    При поставке версии разработчика предполагается, что пользователь имеет

систему программирования muLisp87 (c) Soft Warehouse,Inc, или, по крайней ме-

ре, файлы mulisp.com и comtoexe.com из этого пакета. Они должны размещаться

в той же директории, что и все файлы Лоты.


    1.3. Требования к техническому и программному обеспечению

    Система работает на IBM/PC XT,AT или совместимых с ними машинах; мини-

мальная конфигурация - 1 дисковод (360 Кб), 256 Кб оперативной памяти; для

ускорения работы желателен твердый диск.

    Операционная система - MS DOS, PC DOS версии 2.0 или старше.

    1.4. Инсталляция и запуск системы

Мы советуем провести "честную" инсталляцию, хотя, на самом деле, файлы

можно просто скопировать с дискет на винчестер. Для инсталляции:

 - вставьте инсталляцилнную дискету в накопитель;

 - сделайте этот накопитель текущим;

 - наберите INSTALL.

Система выведет на экран параметры инсталляции и их текущие значения.

<Enter> - инсталляция с текущими значениями параметров, <Esc> - отмена

инсталляции. Для изменеия  значения параметра наберите его номер.

Программа выдаст Вам понятное приглашение для ввода нового значения.

После инсталляции можно запустить систему:

    C:\LOTA> lota

Для запуска учебного примера выберите в главном меню опцию "Консультация", а

затем выберите из представленного каталога файлов едиснтвенный - VACAT.LKB.

Если Вы приобрели проверссиональный вариант и желаете дорабатывать систему,

то для этого необходимо запустить Лоту под управлением интерпретатора

muLisp:

C:\LOTA> mulisp lota


    1.5. Принятая нотация

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

    При описании синтаксических конструкций слова, записанные латинскими

буквами и не заключенные в угловые скобки <>, надо воспринимать как

ключевые слова Лоты. При этом регистр (строчные или заглавные буквы) не имеет

значения.

    Текст, заключенный в угловые скобки,- это тип синтаксического выражения,

которое должно располагаться на месте данной пары скобок.

    Заключение операнда в квадратные скобки [] означает, что данный операнд

не обязателен.

    Троеточие ... после какого-либо слова означает, что слово может повторять

ся любое число раз или отсутствовать.

    Используются стандартные обозначения выделенных клавиш клавиатуры IBM

 PC: F1-F10, <Enter>, <Esc>, <Ins>, <Del> и т.д.

    В примерах выражений на языке представления знаний справа от знака ==>

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

    1.1. Структура документации

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

следующие части:

- главы 2-3 содержат неформальное введение в основные понятия ЛОТЫ и первые

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

примерно то, что в англоязычной документации называется "Getting started";

- главы 4-5 описывают на более строгом уровне основные конструкции базы

знаний, принципы работы системы и подробно описывают систему меню - они

аналогичны "User's Guide" в англоязычных пакетах;

- главы 6-8 детально описывают все конструкции языка представления знаний,

утилиты и дополнительные функции, поставляемые в исходных кодах - это то,

что в англоязычной документации принято называть "Reference Manual".

В приложениях содержится справочная и табличная информация.

_

              2. КОНСУЛЬТАЦИЯ

   2.1. Запуск консультации

     Подобно большинству "оболочек", ЛОТА ПЛЮС содержит как средства для

формализации знаний (язык представления знаний, ЯПЗ), их хранения и

корректировки, так и механизм логического вывода. Работа по созданию ЭС

начинается с создания базы знаний - если угодно, особой программы на языке

представления знаний. Примером БЗ может служить база знаний по выбору места

отдыха - VACAT.LKB, поставляемая в качестве контрольного примера.

    Создав и отладив такую программу, можно загрузить ее в систему и начать

консультацию с ЭС. Для этого выберем в главном меню (оно возникает на

экране сразу после запуска системы) опцию "Консультация". Система

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

"Иной" (файл). Выберем в этом меню vacat.lkb. ЛОТА ПЛЮС загрузит базу

знаний и начнет консультацию.

    2.2. Параметры и правила

    Стиль консультации ЛОТА ПЛЮС сильно отличается от вопросно-ответного

стиля традиционных оболочек ЭС. Предполагая, что Вы способны на большее,

чем тупо отвечать "да" или "нет" на непредсказуемую последовательность

вопросов, ЛОТА ПЛЮС лишь задает тему и термины на данном этапе диалога и

ожидает от Вас утверждений по существу проблемы. Рассмотрим первый экран,

появившийся перед Вами после загрузки базы знаний. В левом нижнем углу

указана текущая тема диалога, в терминах ЛОТА ПЛЮС - текущая СИТУАЦИЯ

("Общие_советы").

    Слева на экране "в столбик" перечислены объекты, называемые ПАРА-

МЕТРАМИ, которые описывают данную ситуацию. При этом среди них могут быть

как искомые (параметр "варианты"), так и те, которые, по мнению разработчи-

ка БЗ, влияют на выбор их значений ("вид_отпуска", "сумма", "компания",

"время_года").

    В нашем диалоге возможны различные действия, и меню в верхней части экра-

на позволяет выбрать наиболее подходящее в данный момент. При входе в новую

ситуацию система автоматически устанавливает опцию "Параметры", но стоит

только нажать на клавиатуре одну из горизонтальных стрелок, как она перейдет

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

просматривать и изменять значения параметров ситуации и ожидаем от системы

при этом некоторых "ответных действий" такого же плана.

    Выберем курсором любой из представленных в списке параметров, например,

"время_года". Нажав <Enter>, мы увидим в правой части экрана список всех воз-

можных значений параметра - в данном случае "лето","зима","межсезонье".

Здесь самое время сказать о том, как ЛОТА ПЛЮС трактует процесс "узнавания"

параметра.  Для всех параметров задаются области возможных значений. В

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

параметров становится уже, а наши знания о них - определенней. Сузить

диапазон может пользователь, а может и сама система, использовав записанные

в базе знаний ПРАВИЛА, которые связывают между собой значения различных

параметров. Для иллюстрации этого сначала вернемся к меню параметров

(нажмите <Esc>), и перейдем к параметру "вид_отпуска". Теперь отберем среди

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

отметим нажатием клавиши <Ins> эти позиции, а затем нажмем <Enter> - так

же, как в хорошо известном пакете Нортона.

     Просмотрим теперь снова параметр "время_года". Как видите, осталось

только одно возможное значение - "лето". Два других система исключила на ос-

нове имеющихся в базе знаний правил. Действительно, в базе знаний имеется

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

     ЕСЛИ отпуск проводится у моря или на даче,

     ТО провести его можно только летом.

В формализованном виде в базе знаний это правило выглядит так:

    (Rule r1-2 (вид_отпуска)

       (вид_отпуска only '(у_моря на_даче)) -->

       (время_года is-only лето))

    2.3. Ситуации

     Сужение диапазона параметров - не единственная возможная реакция систе-

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

познакомимся чуть детальнее с понятием СИТУАЦИИ.

     Если задача, решаемая ЭС, достаточно сложна, то указать сразу все пара-

метры и описать все возможные их взаимосвязи становится затруднительно. Еще

труднее будет пользователю разобраться во множестве разнообразных параметров,

оценить все возможные варианты. Естественный путь преодоления таких сложнос-

тей - разбиение задачи на подзадачи. Именно таким подзадачам и соответствуют

ситуации. В каждой ситуации имеется свой набор параметров и правил,

связывающих их значения. Кроме того, в базе знаний имеются правила, управля-

ющие сменой текущей ситуации: переход к рассмотрению более узкой задачи (си-

туации-подзадачи) и возврат после нахождения решения подзадачи к рассмот-

рению более общей задачи.

     Проиллюстрируем это примером работы нашей небольшой базы знаний. Для

этого выберем параметр "компания" и отметим в нем как возможное только одно

значение - "с_детьми". Как только Вы нажмете <Enter>, на экране появится

запрос:

     Укажите возраст детей:

        от:  1

        до:  14

Что же произошло? ЛОТА ПЛЮС использовала правило, согласно которому

     ЕСЛИ Вы решили проводить отпуск с детьми,

     ТО необходимо перейти к более частной ситуации - "Отпуск_с_детьми".

     В этой ситуации существует новый параметр - "возраст_детей", и есть ука-

зание на то, что область его допустимых значений должен установить пользова-

тель в диалоге. Что мы и сделаем: укажем, что возраст ребенка - между 2 и 3

годами.

     Затем перед нами появится экран, аналогичный первому, но набор парамет-

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

тельствовать о том, что Вы находитесь уже в другой ситуации - "Отпуск_с_деть-

ми". Обратите внимание на то, что параметр "возраст_детей" нам все еще

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

возраст можно задавать не только целыми числами, и решаем уточнить возраст

ребенка - от 2.2 до 2.5 лет. Как только мы введем этот более узкий диапазон, на

экране появится сообщение:

     РЕКОМЕНДАЦИИ:

        Место        Основное_занятие  Сезон

        Подмосковье  дачная жизнь      лето

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

     сначала она отбросила все варианты, кроме выезда на дачу в Подмосковье,

так как ребенок слишком мал;

     затем, обнаружив, что остался только один вариант, она посчитала данную

ситуацию завершенной, то есть подзадачу "Отпуск_с_детьми" решенной. В случае,

когда подзадача завершена, Лота+ возвращается к более общей задаче

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

правила этой общей ситуации, в нашем случае ситуации "Общие_советы".

Использовав имеющееся здесь правило о том, что если какая-либо подзадача

решена, то необходимо вывести на дисплей найденные (т.е. оставшиеся

возможными) варианты и ждать нажатия любой клавиши, система и вывела на

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

решения любой из подзадач можно считать нашу цель достигнутой и

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

Лота+ вернется в Главное меню. В демонстрационном варианте консультация

"закольцована", и поэтому мы снова окажемся в начале консультации. Как

только это Вам надоест, нажмите клавишу F10 (прерывание) и наберите либо S

(system, для выхода в ОС), либо M (Main menu, для возврата к Главному меню

ЛОТА ПЛЮС).

    2.4. Управление ходом логического вывода

     Чтобы продемонстрировать еще одну группу возможностей ЛОТА ПЛЮС, снова

начнем консультацию с той же базой знаний. Покажем, как можно перейти к реше-

нию более частной задачи самому, не ожидая решения системы. Выберем в меню

ситуации опцию "Вызов" (просто нажав стрелку "вправо"). На экране появится

окно, в котором перечислены все ситуации, которые в данный момент можно выз-

вать из текущей. Выберем подзадачу "Спокойный_отдых". Эта ситуация станет те-

кущей, что и отразится на экране - мы окажемся в меню ситуации "Спокойный_от-

дых". Как видите, мы сами заставили систему перейти к решению нужной нам под-

задачи.

     Теперь в меню параметров этой ситуации сразу примем решение: выберем

параметр "варианты" и отберем как единственно возможный вариант "Юрмала".

Кстати, обратите внимание на то, что этот параметр имеет сложную структуру и

является примером использования реляционных таблиц (таких, как в dBase, Foxbase

или Paradox) в качестве параметра. Снова сработает правило, аналогичное тем,

что использовались в предыдущих случаях. Однако на этот раз ЛОТА ПЛЮС

предоставляет возможность "одуматься", задавая вопрос:

  "Завершение ситуации. Успешно?"

   Предположим, Вы решили, что по нынешним временам ехать в Юрмалу не

стоит. Ответив "Нет", мы сообщим о необходимости отменить все принятые в

текущей ситуации решения. Система возвратится в ситуацию "Общие_советы".

Можете просмотреть параметр "варианты" - как видите, восстановлены все

возможные значения. Теперь снова, использовав опцию "Вызов", перейдем к

ситуации "Спокойный_отдых", войдем в меню параметров и сразу выберем в

параметре "варианты" другое значение - "Южный_Крым". На этот раз принятое

решение нас вполне устраивает, и на вопрос системы ответим "Да" (успешное

завершение ситуации). Произойдет возврат к вызывавшей ситуации с

сохранением принятых решений, и, как и в первом случае, ЛОТА ПЛЮС

напечатает отобранный вариант на дисплее и окончит консультацию.  "Ручной"

переход от ситуации к ситуации (опции "Вызов" и "Управление") обеспечивает

очень широкие возможности воздействия на ход вывода, "перехвата инициативы"

в любой момент.

    2.5. Работа с прецедентами

        Все это замечательно, но Вы еще не знакомы с главным достоинством

системы - использованием ПРЕЦЕДЕНТОВ. Для того, чтобы познакомиться с ним,

снова начнем консультацию с той же базой знаний, но на этот раз сначала

установим значение параметра "время_года" - "зима", а затем "вид_отпуска" -

"спорт-туризм". Этого достаточно, чтобы Лота+ автоматически перешла к

ситуации "Активный_отдых". Однако появившаяся на экране картинка отличается

от виденных нами ранее - в правой части экрана появилось окно прецедентов,

то есть список результатов ранее принятых решений по выбору варианта

активного отдыха.

   Выберем в меню ситуации опцию "Прецеденты" (два раза нажмем стрелку

"вправо", и окно прецедентов станет активным). Установив курсор на любой из

них (скажем, Славское) и нажав <F3>, мы увидим на экране значения всех

параметров этого прецедента.

      Можно просмотреть  и описания прецедентов, для этого необходимо

нажать клавишу F2, и в нижней половине экрана появиться текстовое описание

прецедента (комментарий). Вы, на верное, обратили внимание на то, что все

прецеденты - "зимние", хотя, разумеется, активный отдых возможен и летом, и в

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

что система постоянно проверяет реальную доступность прецедентов, то есть

возможность на данный момент выбрать такие же, как в прецеденте, значения

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

"зима", были отброшены все "летние" прецеденты.

     Просмотрев прецеденты и выбрав для себя наиболее подходящий (то же Слав-

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

данный прецедент и нажмем клавишу <Enter>, а затем подтвердим, в ответ на

запрос системы, наше желание провести аналогию. Система перенесет значения

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

один возможный вариант, ЛОТА ПЛЮС использует правила, аналогичные

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

(комментарий) для найденного варианта и окончит консультацию.

    2.6. Накопление опыта

    В предыдущем пункте мы познакомились с использованием прецедентов, однако

пока неясно, откуда они берутся. На самом деле они создаются системой автома-

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

ностями, снова войдем в ситуацию "Общие_советы", перейдем к опции "Выбор" в ме-

ню ситуации и вызовем ситуацию "Развлечения". На экране появятся прецеденты для

этой ситуации (Феодосия,Сочи,Ялта,Париж). Предположим, что Вы отлично провели

отпуск в Судаке, но такого  прецедента нет. Как же сохранить Ваш опыт? Для

этого сначала опишем это место, т.е. установим все значения параметров:

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

оцениваете требуемую сумму от 300 до 450 рублей, компания - вдвоем, время года

- только лето, основное занятие - светская жизнь. Установив все эти значения,

перейдем в меню ситуации к режиму "Управление" и выберем опцию "Сохранение

опыта". Как только Вы нажмете <Enter>, система запросит имя создаваемого

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

система сохранит Ваш выбор в качестве нового прецедента. Теперь выберем в

этом же меню опцию "Успех",и система завершит консультацию. Если Вы снова

вызовете ситуацию "Развлечения", то увидите, что среди известных

прецедентов появился новый - тот, который Вы описали и сохранили в

предыдущий раз.

    Конечно, это - довольно примитивное использование средства накопления

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

описаны в главе 3.

    2.7. Заключение

    Конечно, возможности ЛОТА ПЛЮС не исчерпываются теми примерами, которые

рассмотрены в этой главе. С ее можно создавать ЭС разнообразного характера,

в том числе и "вопросно-ответного". Разработчик базы знаний может управлять

степенью свободы пользователя, проектировать свой собственный интерфейс.

_

   Глава 3. СОЗДАНИЕ БАЗЫ ЗНАНИЙ

 

 Цель этого текста, заключается в том, чтобы дать первоначальные навыки

создания Баз Знаний и прикладных экспертных систем с помощью Лоты.

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

комплектации системы.

  Предположим, что мы хотим построить небольшую экспертную систему "в

помощь домашнему врачу" - для определения вероятного диагноза приболевшего

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

проявления болезни (кашель, насморк и т.п.), мы осмотрели горло и померили

температуру.

  Самый простой путь построить экспертную систему  в таком случае -

использовать прецеденты: большую часть работы система сделает за нас

автоматически. Но сначала необходимо все же "поработать руками".

Придется составить небольшой первоначальный файл Базы знаний, который

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

ASCII-файл, и для его создания можно воспользоваться любым текстовым

редактором. Однако встроеннный редактор все же удобнее - он будет напоминать

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

давайте в главном меню ЛОТА ПЛЮС выберем опцию "Редактор БЗ", отметим, что

мы хотим редактировать новый файл (т.е. выберем опцию "Иной", введем имя

файла, например  med1.lkb, и ответим "Да" на запрос системы о создании

нового файла).

   3.1. Описание ситуаций

  При входе в Редактор в верхней строке экрана появится меню, в котором

указаны различные компоненты Базы знаний - Ситуации, Правила, Параметры и

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

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

Для этого выберем опцию "РедСитуаций" - перед нами появится меню, не

содержащее ни одной строки, т.к. в нашей системе еще нет ситуаций. Для

создания новой ситуации нажмем "Ins", введем имя ситуации (например,

"Диаг1"). Система откроет большое окно, в котором нам предстоит создать

описание ситуации (работая, как в обычном текстовом редакторе). Что оно в

себя включает?

 Во-первых, описание любого элемента Базы знаний ЛОТА ПЛЮС должно быть

заключно в круглые скобки, и поэтому редактор автоматически поставит

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

ними. Само описание включает в себя различные слоты (описание свойств),

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

которым следует сначала точка (пробел до и после нее обязателен), а потом

само описание слота. В нашем простейшем случае нам потребуется всего один

слот - "params", указывающий, какие параметры внешнего мира будут

использоваться в нашей консультации. Перечислим их, т.е.вставим в описание

ситуации такую строку:

  (params . (Жалобы Насморк Кашель Горло Температура))

  В нашем случае описание ситуации закончено, можно нажать <Esc> -

запомнить его в Базе знаний.

     3.2. Описание параметров     

  Теперь необходимо описать все указанные Параметры. Описание параметров

обязательно должно содержать указание первоначальной области значений -

ДОМЕНА, где перечисляются все возможные значения, которые может принимать

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

использовать не будем. Итак, перейдем в главном меню Редактора к опции

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

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

 (domain . (list "Нет" "Головная боль" "Болит горло" "Ломота" "Слабость"))

параметр Насморк:

 (domain . (list "Нет" "Небольшой" "Сильный"))

Кашель:

 (domain . (list "Нет" "Небольшой" "Сухой" "Влажный"))

Горло:

 (domain . (list "Нормальное" "Краснота" "Очень красное" "Налеты"))

Параметр Температура зададим не списком, а интервалом числовых значений:

 (domain . (cons 35.5 41.0))

    3.3. Установка переменных среды

  К сожалению, для полного описания Базы знаний придется еще установить

некоторые стандатрные переменные системы. Перейдем в режим "РедОпций" и

зададим цель (имя целевой ситуации) - "Диагностика". В принципе это не

обязательно, так как ситуация у нас одна, но лучше явно объявить цель.  Для

описания симптомов каждого заболевания мы создадим прецедент, и подходящие

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

так, зададим условие видимости прецедентов в этом же меню - T, или ON.  Все.

База данных готова, запишем ее в файл на диске. Этот файл должен

соответствовать имеющемуся у Вас демнострационному файлу MED1.LKB.

   3.4. Накопление опыта

   Конечно, чтобы система диагностировала заболевания, ее еще надо обучить,

к чему мы сейчас и приступим. Выберем в главном меню опцию "Консультация" и

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

меню слева, содержащее список параметров, а справа - пустое окно, где должны

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

диагнозы. Что ж, начнем обучение. Оно заключается в установлении значений

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

качестве прецедентов. Учтите, что, согласно логике ЛОТА ПЛЮС, для того,

чтобы рассматриваемый случай подходил под некоторый прецедент, необходимо,

чтобы ДЛЯ ВСЕХ ПАРАМЕТРОВ текущей ситуации хотя бы одно из текущих возможных

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

прецедента ОРЗ значение параметра Кашель ("Нет" "Слабый"), мы указываем, что

при ОРЗ кашля нет ИЛИ он слабый.  Опишем типичный случай ОРЗ. Установим

следующие значения параметров:

 Жалобы: Слабость Нет

 Насморк:  Сильный Небольшой Нет Кашель: Небольшой Нет

 Горло: "Очень красное" Краснота

 Температура: 36.8 - 38.5

После этого перейдем в окно "Управление" и выберем опцию "Сохранить опыт".

Система сразу запросит имя прцедента - естественно назвать его "ОРЗ". После

сохранения выберем опцию "Повторить" - консультация начнется сначала, но в

окне прецедентов уже появился первый диагноз - ОРЗ.

 Теперь опишем прецедент, соответствующий типичному гриппозному состоянию:

Жалобы: Слабость Ломота |Головная боль|

Насморк: Сильный Небольшой Нет

Кашель: Небольшой Нет

Горло: Краснота Нормальное

Температура: 37.1 - 40

 и снова сохраним опыт, назвав новый прецедент "Грипп". Продолжим обучение.

При третьей консультации в окне прецедентов будут уже два значения - "Грипп"

и "ОРЗ".

  Опишем теперь ангину:

Жалобы: |Болит горло|

Насморк: Небольшой Нет

Кашель: Небольшой Нет

Горло: Налеты

Температура 38 - 41

  Обратите внимание, что как только мы указали, что имеются жалобы на боль

в горле, диагнозы "ОРЗ" и "Грипп" в окне прецедентов исчезли -

действительно, для этих болезней это не характерно и мы такихъ жалоб не

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

 Опишем бронхит:

Жалобы: Слабость |Болит горло| Ломота Нет

Насморк: Небольшой Нет

Кашель: Влажный Сухой

Горло |Очень красное| Краснота Нормальное

Температура 36.6 - 38.5

   и снова сохраним опыт в Базе знаний.

   Будем считать, что наша система уже готова к консультации: при входе в

систему в окне прецедентов представлены все возможные диагнозы, и по мере

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

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

других - наша система не может поставить никакого - ведь она "знает" всего

четыре болезни и оперирует очень небольшим множеством симптомов. Разумеется,

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

диагнозов. Можно "разбить" достаточно общий диагноз "ОРЗ" на ряд более

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

    3.5. Описание правил

   Работа с прецеднтами позволяет построить достаточно сложные и

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

больше инициативы, например, не позволяля упустить важные симптомы и в

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

достаточно. Более глубокие знания представляются с помощью ПРАВИЛ.

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

удостовериться в отсутствии воспаления легких: для этого необходимо провести

перкуссию (простукивание пальцами через ладонь) грудной клетки. Если

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

внимательного прослушивания не обойтись - срочно нужно вызывать врача. Если

звук везде звонкий, то, скорее всего, в легких ничего нет. Для описания

такой возможности введем правило. Правила в системе ЛОТА ПЛЮС имеют вид так

назваемых продукций, т.е. выражений типа ЕСЛИ (условие) ТО (заключение).

Описание правила, даже самого простого, несколько сложнее, чем те

конструкции, которые мы до сих пор создавали. Правило должно иметь имя -

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

имена параметров), от которых зависит истинность условия. В нашем случае

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

само условие, истинность которого надо проверить. В синтаксисе ЛОТА ПЛЮС

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

сейчас их разбирать, а просто укажем, что интересующее нас условие

записывается так:

    (Кашель только "Сухой")

Затем, после знака "следует" (в ЛОТА ПЛЮС для него используется обозначение

-->), записывается то действие, которое нужно произвести при выполнении

условий. Давайте сначала просто потребуем в этом случае вывести на экран

сообщение о необходимости проведения перкуссии. Вывод на экран

осуществляется действием DISPLAY, которое имеет два аргумента - выводимый

текст и описание окна вывода. Формат описания окна Вы можете посмотреть в

гл.6 документации:

   (display "Необходимо провести перкуссию грудной клектки"

             (list 0 7 7 0 10 10 5 50 "") T)

Третий аргумент действия DISPLAY - T означает, что система будет ожидать

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

Окончательно в Базе знаний правило будет иметь вид:

 (Rule Rul1 (Кашель)

    (Кашель только "Сухой") -->

    (display "Необходимо провести перкуссию грудной клектки"

              (list 0 7 7 0 10 10 5 50 "" T) ) )

Для того, чтобы это правило использовалось системой, необходимо внести его в

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

ситуации "Диагностика" новый слот:

   (rules . (rul1))

Запустим нашу систему снова и укажем, что у пациента сухой кашель. Наше

сообщение немедленно появится на экране.

       3.6. Уточнение значений параметра

   Для того, чтобы полностью отразить все требуемые действия, нам придется

ввести дополнительный параметр - Перкуссия с несколько более сложным

описанием:

 (Parameter Перкуссия

    (domain . (list "Есть глухой звук" "Всюду звонкий стук"))

    (prompt . " Проведите перкуссию (простукивание

пальцами через ладонь) грудной клетки.

   Сообщите результаты:" )

    (prompt-window . (7 0 7 0 1 0 21 26 "")) )

Слоты prompt, prompt-window описывают текст, который должен быть выведен на

экран в момент определения значения параметра, и окно, в котором этот текст

выводится. Разумеется, необходимо расширить слот params нашей ситуации,

включив в него Перкуссию. Теперь перепишем наше правило rul1:

 (Rule Rul1 (Кашель)

    (Кашель только "Сухой") -->

    (revise Перкуссия) )

- если кашель сухой, то необходимо предоставить для коррекции (revise)

параметр Перкуссия. Затем введем дополнительное правило:

 (Rule Rul2 (Перкуссия)

    (Перкуссия только "Есть глухой звук") -->

    (display "Необходимо срочно вызывать врача! "

              (list 0 7 7 0 10 10 5 50 "") T) )

и расширим список правил в нашей ситуации. Обратите внимание на то, что Вам

нет необходимости забоититься о порядке проверки и исполнения правил -

природа логического программирования сама обеспечивает и правильную

последовательность, и однократность использования правил.

  Итак, в результате нашей работы создана База знаний, котрая вполне может

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

дискете в файле MED2.LKB.

   

   3.7. Описание подцели

 Однако вид этой базы вызывает некоторую неудовлетворенность - в ситуации

присутствует параметр Перкуссия, который в большинстве случаев не нуже

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

одной ситуации Диагностика объединена Диагностика всех заболеваний на основе

"поверхностного" осмотра и несколько более серьезное исследование -

проведение перкуссии. Естественным решением, преодолевающим указанные

недостатки, служит создание особой ситуации, отвечающей проведеию перкуссии.

Для этого необходимо создать такую ситуацию в нашей базе знаний:

(situation Пров_перкуссии

 (rules . (rul2 rul3))

 (params . (Перкуссия)) )

 Едиснтвенный интересующий нас в этой ситуации параметр - Перкуссия.

Разумеется, его упоминание можно теперь удалить из списка параметров

ситуации Диаг1 (слота params). Правил в новой ситуации будет немного

больше: одно - на положительный результат перкуссии (звук везде звонкий),

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

больше у системы узнать не сможем, разумно после вывода сообщений прекратить

консультацию. Итак, в базе знаний появятся такие правила:

 (Rule Rul2 (Перкуссия)

    (Перкуссия только "Есть глухой звук") -->

    (Progn

      (display "Необходимо срочно вызывать врача! "

                (list 0 7 7 0 10 10 5 50 "") T )

      (stop) ) )

 (Rule Rul3 (Перкуссия)

    (Перкуссия только "Всюду звонкий звук") -->

    (progn

       (display "В легких чисто "

                 (list 0 7 7 0 10 10 5 50 "") T)

       (stop) ) )

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

но для этого нужно использовать операторные скобки - сложное действие:

  (progn <действие> ...)

Обратим также внимание на то, что действие STOP прекращает всю консультацию

вне зависимости от того, в какой ситуации мы находимся. Разумеется, для

того, чтобы эти правила работали, нужно внести их в список правил ситуаци

Пров_перкуссии, а прапвило rul2 удалить из списка правил ситуации Диаг1.

Измениться должно и правило rul1, которое теперь должно просто вызывать

ситуацию Пров_перкуссии:

 (Rule Rul1 (Кашель)

    (Кашель только "Сухой") -->

    (call Пров_перкуссии) )

Кроме того, в описании ситуации Диаг1 должен появиться еще один новый слот

-  GOALS, описывающий подцели(ситуации), которые могут быть вызваны из

данной:

  (goals . (Пров_перкуссии))

 Теперь обратим внимание на то, что в данной ситуации всегда следует задать

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

этого изменим описание параметра Перкуссия: пусть его домен сразу образуется

в диалоге с помощью выбора одного значения из меню:

 (Parameter Перкуссия

    (domain . (ask-from-menu (list "Есть глухой звук" "Всюду звонкий стук")

                             (list 1 7 7 1 1 26 21 26 "")

"

Проведите перкуссию

(простукивание пальцами

через ладонь)

грудной клетки.  

Сообщите результаты:"

                             (list 7 0 7 0 1 0 21 26 "") ) ) )

  Как видите, действие ASK-FROM-MENU позволяет описать в качестве своего

третьего и четвертого аргумента текст "приглашения" и окно, в котором оно

будет выводиться.

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

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

прецедент в ситуацйии Диаг1 не подходит. В этом случае естественно запросить

пользователя о сохранении такой ситуации в качестве нового прецедента

(нового диагноза) и при необходимости сохранить его на диске. Эти действия

вполне могут быть осуществлены с помощью правила rul4:

 (Rule rul4 (cprecedents)

   (and: (empty cprecedents)

         (ask-y/n "Сохранить текущую ситуацию как новый диагноз?") ) -->

   (save-prec) )

 Обратите внимание на использование логической связки И в условии правила и

на использовании действия ASK-Y/N в качестве логического выражения - это

очень распространенный прием.

  Наконец, внесем это правило в список правил ситуации Диаг1, которая  в

результате всех наших операций будет иметь следующее описание:

(situation Диаг1

 (rules . (rul1 rul4))

 (goals . (Пров_перкуссии))

 (params . (Жалобы Кашель Насморк Горло Температура)) )

Такой вид базы - наиболее полное представление нашего примера - также

имеется у Вас на дискете - файл MED3.LKB. Конечно, все описанное выше -

несложные примеры создания условных баз знаний. Но они отражают основные

приемы, используемые при построении Баз знаний, и мы надеемся, что они будут

полезными образцами для вашей дальнейшей работы.

_

        Глава 4. ОСНОВНЫЕ КОНЦЕПЦИИ

    Для описания проблемной области ЛОТА ПЛЮС использует параметры,

ситуации и правила. Совокупность их описаний образует Базу знаний, которая

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

консультации. Важной чертой ЛОТА ПЛЮС является использование так называемой

модальной логики, то есть логики с тремя значениями истинности:

       НЕОБХОДИМО, ВОЗМОЖНО, НЕВОЗМОЖНО.

Такой подход позволяет логически строго учесть возможную неполноту и неточ-

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

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

                  4.1. Параметры

    С помощью параметров описываются как исходные данные, так и цели кон-

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

(домен). Считается, что параметр может принимать одновременно одно или нес-

колько значений из этой области. В каждый момент консультации известно

множество значений, которые параметр может принимать (т.н. область возможных

значений), а также множество значений, которые параметр заведомо не принимает

(дополнение этого множества до всей области определения параметра). Полная

неизвестность или точное знание всех значений параметра являются лишь

частными случаями этой общей ситуации. В ходе консультации наши знания о

параметре уточняются за счет отбрасывания из области возможных значений тех,

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

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

    Допустимы следующие типы параметров: символьный, интервальный, диск-

ретный и табличный.

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

нечного множества строк символов - области определения параметра.

    Параметры двух типов определены на множестве действительных чисел: интер-

вальные и дискретные. Различие между ними в том, что текущие множества значе-

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

списками чисел.

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

виде реляционных таблиц. Для определения табличного параметра необходимо оп-

ределить имя, длину и тип столбцов таблицы - атрибутов. Каждый атрибут имеет

тип - символьный, числовой или "произвольный". Текущие множества значений

табличного параметра представляются в виде множества строк таблицы, или

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

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

     Тип параметра определяется системой автоматически, на основании значения

домена. Параметры описываются в базе знаний следующим образом:

      (Parameter <имя-параметра>

          (domain . <S-exp>)

         [(prompt . "<текст приглашения>")]

         [(prompt-window . <w-descr>)]

         [(revise . <action>)]

         [(comments . "<текст комментария>")])

       ИМЯ-ПАРАМЕТРА подчиняется тем же правилам, что и имена переменных в

обычных языках: оно должно быть уникальным, начинаться с буквы (можно с

русской) и иметь длину не более 15 символов. Имя может содержать любые

символы, кроме пробела и управляющих символов.

       Слот DOMAIN определяет домен параметра, совпадающий с вычисленным зна-

чением выражения <S-exp>. Пользователю следует самому обеспечивать определен-

ность всех частей выражения к МОМЕНТУ ОПРЕДЕЛЕНИЯ ПАРАМЕТРА. Моментом опреде-

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

этот момент система устанавливает область возможных значений равной

значению выражения <S-exp>.

     Слоты PROMPT и PROMPT-WINDOW содержат текст приглашения, выводимый в мо-

мент просмотра и коррекции диапазона параметра, и описание окна, в котором

текст будет выводиться.

     Слот REVISE также не обязательный, определяет метод просмтора/коррекции

диапазона возможных значений параметра. Если слот отсутствует, используется

стандартный метод - выбор из меню.

     Слот COMMENTS содержит текст, комментирующий название параметра.

Поскольку стандартно этот текст появляется в виде "бегущей строки" коммента-

риев при работе в Меню параметров, он не должен превосходить 80 символов и не

должен содержать символов перевода строк.

    Помимо содержательных параметров, о которых до сих пор шла речь, ЛОТА

ПЛЮС использует служебные параметры, отображающие состояние консультации.

Их определение строится автоматически при входе в ситуацию, однако

пользователь может ссылаться на них и использовать их в посылках правил.

Подробнее об этих параметрах говорится в разделе 3.3 при описании слота

 GOALS.

 Пример:

(Parameter Мощность_ЯПЗ

    (comments .

    " Возможность описать сложные логические конструкции БЗ средствами ЯПЗ")

    (prompt .

" 1 - слабая; 2 - удовлетворит.;

3 - хорошая; 4 - очень хорошая;

       5 - блестящая ")

    (prompt-window . (0 7 0 7 10 25 10 25))

          4.2. Правила

    Знания о проблемной области, на основании которых ЭС проводит консульта-

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

ности т.н. продукционных правил:

     Посылка --> Заключение,

смысл которых в том, что при истинности посылки должны быть выполнены дей-

ствия, входящие в заключение.

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

(Rule <имя> (<список-параметров>)

<посылка> --> <заключение>

[<ключевые-слова>]

[(comments . "<текст-комментария>")])

      ИМЯ правила служит для идентификации правила в базе знаний и подчиняется

тем же ограничениям, что и имя параметра.

      СПИСОК-ПАРАМЕТРОВ - перечисление параметров, от которых зависит истин-

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

несением правила в стек вывода: правило заносится в стек тогда и только тог-

да, когда произошло изменение хотя бы одного из параметров, входящих в этот

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

посылке параметрам, что дает дополнительные возможности управления ходом

вывода.

      ПОСЫЛКА - представляет собой логическое выражение (<L-exp>). На каждом

шаге вывода система проверяет истинность посылки для правила, лежащего

"наверху" стека вывода. В том случае, если значение <L-exp> - НЕОБХОДИМО

(истина), то выполняется действие правила. Посылка будет считаться истинной

до окончания консультации и больше проверяться не будет (т.е. с этого

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

наверху стека вывода). Если же значение <L-exp> - НЕВОЗМОЖНО (ложь), то

посылка считается ложной впредь до окончания консультации и данное правило

"выжигается", т.е. далее не рассматривается. Если же значение <L-exp> -

ВОЗМОЖНО, то действие правила не выполняется, но ни посылка, ни само

правило не "выжигаются". Такой подход использует свойство логической

монотонности вывода. Все основные предикаты и действия ЛОТА ПЛЮС сохраняют

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

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

модальности. Для того, чтобы обеспечить логически корректную работу

механизма вывода в этих правилах, необходимо указать ключевое слово RETRY,

которое подавляет "выжигание" как посылки, так и самого правила.

     ЗАКЛЮЧЕНИЕ -  представляет собой последовательность действий по изменению

состояния консультации. Дейстия <action> производятся только в том случае,

когда значение логического выражения посылки правила НЕОБХОДИМО. Содержанием

дейстия может быть:

  изменение области возможных значений какого-либо параметра;

  завершение текущей ситуации и переход к некотрой другой;

  изменение режима консультации, в частонсти, ее завершение;

  вывод каких-либо сообщений на экран;

  обращение к пользователю за каким-либо его действием;

  выполнение процедур, написанных пользователем.

Полное описание всех возможных действий приводится в главе 6.

     КЛЮЧЕВЫЕ-СЛОВА - необязательный элемент описания правила. Они несут ин-

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

нестандартным образом. Допустимы три ключевых слова - fire, retry, whenever,

они могут появляться в любой комбинации.

FIRE указывает, что правило может быть применено только один раз;

RETRY указывает, что посылка должна вновь проверяться каждый раз, когда

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

истинной посылки, так и правила с ложной посылкой;

WHENEVER указывает, что попытка активизировать правило должна осуществляться

после любого изменения состояния системы, вне зависимости от того, затрагива-

ет ли это изменение параметры, используемые в посылке правила.

     СOMMENTS - текст, комментирующий правило и используемый в режиме объяс-

нений.

       Пример:

(Rule r4-1 (любимые_занятия)

T --> ( варианты are-such

        ((варианты -> Основное_занятие) входит-в  любимые_занятия) )

     whenever )

     4.3. Ситуации

    Представление базы знаний в виде совокупности внешне независимых правил

приводит к тому, что при значительном числе правил утрачивается представление

об общей структуре проблемной области, снижается качество консультации и

эффективность работы механизма вывода.

    Для преодоления этой трудности введено понятие СИТУАЦИИ. Ситуацию

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

этап консультации. В ситуации доступно лишь подмножество всех параметров

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

ситуации может осуществляться как в результате срабатывания правил

(автоматически), так и по непосредственному казанию пользователя в диалоге.

Нет ограничений на повторный или рекурсивный  вызов ситуаций, на их

взаимодействие, однако множемтво ситуаций, к которым возможно перейти из

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

пользователь имеет возможность указать условия, необходимые для ее

активизации, особые действия, производимые при "входе" в ситуацию, описать

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

    Важное свойство ситуаций - возможность для пользователя вернуться назад

по ходу консультации, отказавшись от каких-то предпринятых им действий

(откатка): это происходит, если ситуация окончена неудачно (Failed).

    Строго  говоря,  можно  различать  ПРОТОТИП СИТУАЦИИ (ее описание в базе

данных) и собственно СИТУАЦИЮ (т.е. текущий на данном этапе консультации

список доступных параметров и их значений, список доступных правил со

значениями истинности их посылок, а также список доступных в данный  момент

ситуаций  с  учетом  истинности  их "стражей"). Однако, поскольку в контексте

эти различия не играют роли, мы далее будем употреблять слова СИТУАЦИЯ и

ПРОТОТИП как синонимы.

   Структура описания ситуации следующая (порядок слотов не существен):

     (Situation  <имя-ситуации>

      [(Procedure  . <action>)]

       (Pattern  . <L-exp>)

       (Params .  <список-имен-параметров>)

      [(Dark .  <список-имен-параметров>)]

       (Rules  . <список-имен-правил>)

      [(Inference . <action>)]

      [(Screen . <action>)]

      [(Activity . <action>)]

       (Goals . <список-имен-прототипов>))

      ИМЯ_СИТУАЦИИ образуется так же, как и имя параметра.

      Слот PROCEDURE содержит описание действия (возможно, составного), вы-

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

водится ПОСЛЕ построения диапазона параметров, и поэтому здесь вполне можно

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

    Слот PATTERN содержит условие активизации ситуации <L-exp>. При любой

попытке активизации прототип (действием Call или по прямому указанию в меню

Целей "старшей" ситуации) система производит проверку истинности <L-exp>. Если

значение <L-exp> - не НЕОБХОДИМО, то ситуация не активизируется. Проверка

выполняется ПЕРЕД всеми другими действиями ситуации и поэтому не должна

использовать параметры, которые впервые определяются в ней. Если значение

<L-exp> для вызываемой ситуации типа не НЕОБХОДИМО, то соответствующий ему в

старшей ситуации специальный параметр НЕ МЕНЯЕТ значения. Cлот PATTERN не

является "выжигаемым" и не предполагает монотонности. Вычисление <L-exp>

производится при каждой попытке вызвать ситуацию и не оказывает влияния на

последующие попытки. Если этот слот не определен, то предполагается, что

его значение - всегда ИСТИНА, и ситуация ввсегда доступна.

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

изменены в описываемой ситуации. Этот список будет представлен в меню

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

представлены все доступные в текущей ситуации параметры. Для этой цели

используется слот DARK.

     В слоте DARK указывается список параметров, доступных для изменения в

ситуации, но не выводимых в меню параметров и потому недоступных для "ручно-

го" изменения пользователем. Этот список обязательно должен быть подмножест-

вом списка слота PARAMS.

     Слот RULES содержит списки используемых в ситуации правил.

     Слот GOALS задает список подцелей, т.е. ситуаций, которые можно попытаться

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

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

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

истинности. НЕОБХОДИМО (Т) означает, что последний вызов ситуации закончился

успешно, НЕВОЗМОЖНО (NIL) - что мы потерпели неудачу (т.е. ситуация была

вызвана и завершилась неудачей), ВОЗМОЖНО (TF) - что подцель ни разу не была

активизирована в текущей ситуации.

    Слот INFERENCE может содержать определенную пользователем процедуру

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

механизма логического вывода в данной ситуации.

    Слот SCREEN может содержать определенную пользователем процедуру

ппостроения диалогового экрана в данной ситуации. Если этот слот отсутствует,

используется стандартное "pull-down" меню ситуации (см. п.3.12).

Использование этих двух слотов допустимо только в версии разработчика.

     Слот COMMENTS содержит комментарии, разъясняющие назначение ситуации.

Поскольку стандартно этот текст появляется в виде "бегущей строки" коммента-

риев при работе в Меню целей, он не должен содержать символ перевода строк,

а по длине - превосходить 80 символов.

     Слот ACTIVITY может содержать определенную пользователем процедуру

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

стандартное "выпадающее" меню.

Пример:

(Situation Начало

 (pattern . T)

 (Params . (Счетчик))

 (Rules . (r0-0))

 (dark . (Счетчик))

 (goals . (Регистрация)) )

 При вызове ситуации система производит следующие действия:

 - проверяется  истинность слота PATTERN; все дальнейшие действия производятся

 только в том случае, если значение истинности - НЕОБХОДИМО;

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

 вывода (если она не была ранее создана);

 - подготавливаются значения парамтеров ситуации (те парамтеры, которые ранеее

 не использовались, получают первоначальные значения);

 - выполняется начальная процедура ситуации (слот PROCEDURE), если она задана;

 - запускается механизм вывода ситуации (его действие можно переопределить в

 слоте INFERENCE);

  - после ококнчания вывода на экране появляется меню ситуации (стандартное,

 если оно не переопределено в слоте SCREEN).

 Работа стандартного механизма вывода рассматривается в следующем пункте;

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

 функций LOTALIB.

     4.4.Механизм логического вывода

    Особенности механизма вывода ЛОТА ПЛЮС определяются не совсем обычными

представлениями о роли пользователя при работе с ЭС. Традиционно

пользователю отводится крайне пассивная роль: он должен отвечать на

вопросы, которые задает ему ЭС. Своеобразие подготовки того или иного

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

или объяснений, что не влияет по сути на ход консультации. Цель

консультации считается зафиксированной раз и навсегда.

   Мы, напротив, исходили из предположения, что пользователь сам является

специалистом в предметной области, и обладает существенными знаниями, возмож-

но, не известными системе. Поэтому ЛОТА ПЛЮС стремится превратить

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

зависимости от своей подготовки и целей, которые пользователь ставит перед

собой в данном сеансе консультации, он может многократно менять степень и

направление своей активности, добиваясь необходимой степени уточнения

значений тех или иных искомых параметров.

    Основные действия, доступные системе и пользователю, суть одни и те же:

уточнить значение параметра, завершить текущую ситуацию, вызвать ситуацию-

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

этого, может в любой момент потребовать объяснения или справиться о текущих

значениях параметров.

    Цикл работы системы состоит в следующем. Пользователь предпринимает ка-

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

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

выводы из сообщенных пользователем сведений и изменяя в свою очередь состоя-

ние консультации. Затем инициатива вновь возвращается к пользователю. Если в

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

рассмотрению, инициировав новый цикл вывода. По завершении ситуации управле-

ние возвращается в цикл вывода вызывающей ситуации.

    Разработчик прикладной ЭС имеет возможность ограничивать активность

пользователя или допускать разную степень ее на разных этапах кон-

сультации. В частности, базу знаний можно составить таким образом, что

первая же передача управления системе будет форсировать консультацию в

традиционном духе. Однако такое использование ЛОТА ПЛЮС вряд ли стоит

рекомендовать.

    Для поддержания описанного выше рабочего цикла механизм вывода пост-

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

этой схеме имеющиеся данные (в нашем случае - значения параметров) определя-

ют, какие правила базы данных будут активизированы.

    Очередные шаги пользователя меняют значения параметров, что позволяет ме-

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

этими параметрами, и изменить значения других параметров. Это, в свою оче-

редь, дает основания для активизации новых правил, и процесс распространяет-

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

заний пользователя.

    Теперь становится понятной роль списка параметров в правиле: считается,

что правило надо активизировать тогда, когда произошло изменение значения ка-

кого-то параметра из списка (естественно, при условии истинности посылки).

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

    - параметр А входит в логическое выражение посылки правила;

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

скажем, В, а в выражение для вычисления В входит параметр А.

      В обоих случаях А следует включить в список параметров, активизирующих

правило. Однако синтаксис не требует, чтобы разработчик действовал всегда

таким и только таким образом. Это позволяет добиваться с помощью списка

параметров разнообразных эффектов.

  Консультация начинается с анализа т.н. целевой (или начальной) ситуации.

Имя этой ситуации хранится в служебной переменной Лоты *first-proto*. Если

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

в базе знаний ситуация.

    Дальнейший текст этого пункта посвящен некоторым тонкостям механизма вы-

вода Лоты, понимание которых помогает при разработке эффективных приложений.

     Лота использует прямой механизм вывода с прохождением дерева вывода по

дисциплине "сначала в глубину". За один рабочий цикл (от действия, предприня-

того пользователем, до затухания вызванной им волны вывода) может возникать

многократная активизация одного и того же правила. Лота стремится по возмож-

ности уменьшить число таких повторов, не допуская присутствия в стеке вывода

двух экземпляров одного и того же правила.

   При выводе используется предположение о монотонности, согласно которому со

временем знания о параметрах могут лишь уточняться и никогда не происходит

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

правил, т.е. посылка правила, оказавшаяся истинной на некотором этапе, оста-

ется таковой до конца консультации и потому может больше не проверяться. Если

посылка ложна - она останется такой до конца, и поэтому можно "выжечь" прави-

ло - оно никогда не будет использовано. Большинство действий и логических ус-

ловий, используемых Лотой, удовлетворяет этому предположению. Исключение сос-

тавляет случай возврата пользователя к началу обработки текущей ситуации для

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

станавливаются к состоянию, которое они имели на момент входа в ситуацию. "На

всякий случай" в Лоте имеются средства для указания интерпретатору, что дан-

ное правило и его посылка "выжиганию" не подлежат (см. п.3.2).

    В отличие от большинства ЭС, где вся консультация управляется одним рабо-

чим циклом механизма вывода, в Лоте после окончания работы механизма вывода

активность возвращается к пользователю. Временная передача инициативы пользо-

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

если выполняется заключение правила, содержащее действие, передающее инициа-

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

ханизм вывода и действует свое распределение активности между системой и

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

получает инициативу один из партнеров по диалогу, но в сложных случаях отлад-

ки такое знание может оказаться полезным. Впрочем, система трассировки вывода

Лоты выдает достаточно сообщений на этот счет.

     4.5. Прецеденты и вывод по аналогии

    В этом режиме моделируется способность человека накапливать опыт и в

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

    В любой момент времени пользователь может сохранить набор параметров

текущей ситуации с их текущими значениями - так называемый ПРЕЦЕДЕНТ.  Имя

файла, где сохраняются прецеденты (он называется БАЗОЙ ОПЫТА), совпадает со

значением переменной *EXP-BASE*. Если она не установлена, то по умолчанию

предполагается, что в качестве базы опыта используется файл текущей базы

знаний. Впоследствие база опыта может быть загружена и опыт будет доступен в

последующих консультациях.

   Для сохранения опыта можно воспользоваться меню ситуации: перейти в режим

"Управление" и выбрать опцию "Сохранить опыт". После этого ситсема запросит имя

прецедента и сохранит прецедент, содержащий текущие значения параметров

ситуации Этой же цели служит и действие save-prec, которое может стоять в

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

файла базы опыта, имя создаваемого прецедента, а также список имен параметров,

чьи значения будут сохранены в прецеденте (см. гл.6).

    В процессе логического вывода доступны прецеденты загруженной базы

опыта, соответствующие прототипу текущей ситуации.  При этом система

производит отбор среди прецедентов, оставляя только те, значения параметров

которых не противоречат "сложившемуся положению". Это означает, что значения

всех параметров в допустимом прецеденте пересекаются с множествами текущих

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

прецедентов осуществляется в процессе логического вывода. Каждая ситуация

имеет специальный внутренний параметр CPRECEDENTS, значением которого

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

    Использование уже существующих прецедентов (просмотр, проведение аналогий)

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

осуществлен либо из меню ситуации, либо с помощью выполнения действия

retrieve-prec (гл.6) в заключении правила или начальной процедуре

ситуации. В меню прецедентов представлены все доступные на текущий момент

прецеденты. Пользователь имеет возможность просмотреть значения параметров в

любом прецеденте, отобрать те прецеденты, которые кажутся ему наиболее

подоходящими в данной консультации. Отбор осуществляется с помощью клавиши

<Ins>. После окончания отбора имеется возможность "провести аналогию" с

отобранным множеством прецедентов. Проведение аналогии означает, что из

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

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

проведения аналогии необходимо нажать <Enter>. Выход из меню прецедентов без

проведения аналогий осуществляется по клавише <Esc> или стрелками вправо-влево.

    Прецеденты сохраняются на диске в текстовой форме, что дает возможность

редактировать сохраненные прецеденты и создавать новые "вручную" - на

основании своего личного опыта или по литературе.

Описание прецедента имеет следующую структуру:

     (Precedent <имя-прецедента>

        (proto . <имя-ситуации>)

        (<имя-параметра> . <значение-параметра>) ...

        [(parent . <имя-прецедента-родителя>]

     )

     ИМЯ-ПРЕЦЕДЕНТА может быть любым.

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

Возможно указание в этом слоте списка имен ситуаций, и тогда прецедент будет

доступен в любой из них.

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

образования прецедента.

      Слот PARENT содержит имя прецедента "старшей" ситуации, и позволяет

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

      4.6. Комбинированный логический вывод

Система  ЛОТА ПЛЮС обладает еще одним встроеным механизмом вывода,

объединяющем свойства прямого вывода и вывода по аналогии. Он называется

"precedent-driven inference" и действует по следующему алгоритму.

1) выполнить прямой вывод (см.п.4.4);

2) удалить прецеденты, не удовлетворяющие текущему состоянию;

3) ограничить области возможных значений всех параметров, удалив значения,

   не содержащиеся ни в одном текущем прецеденте;

4) если шаги 2 и 3 не привели к каким-либо изменениям, остановиться;

   иначе - перейти к шагу 1.

Для использования этого механизма вывода, слот "INFERENCE" ситуации должен

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

    (inference . (prec-driven))

Разумеется, можно определить и другие механизмы вывода. Пример еще одного

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

8.8)

      4.7. Объяснения

    Способность системы к объяснению своих действий рассматривают в качестве

одного из принципиальных свойств ЭС. Объяснение не следует смешивать с трас-

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

прикладной ЭС для отладки базы знаний. В отличие от нее объяснение прово-

дится, в основном,в терминах пользователя и не требует понимания внутренних

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

    Режим объяснений может быть задан для конкретного параметра или для

текущей ситуации в целом.

    В первом случае дается ответ на вопрос, каким образом установлено теку-

щее множество значений параметра. Система указывает все правила, на основа-

нии которых сужалась область допустимых значений параметра. Пользователь мо-

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

комментарий правила, а при его отсутствии - внутренняя форма представления

правила в системе. Несомненно, такое объяснение не является исчерпывающим:

может быть интересно, каким образом оказалась истинной посылка показанного

правила, т.е. как установлены значения параметров, входящих в посылку. Для

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

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

    Во втором случае система в хронологическом порядке выводит все правила,

примененные в текущей ситуации, а также имена вызывавшихся ситуаций-подце-

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

вило, и тогда в дальнейшем объяснения происходят точно так же, как и в первом

случае. Если же выбрана ситуация-подцель, то будет выведен список правил и

подцелей уже для этой ситуации.

_

       Глава 5. СИСТЕМА МЕНЮ

       5.1. Главное меню

        

     Интерфейс ЛОТА ПЛЮС основан на системе меню.  После загрузки системы

на экране появляется Главное меню, содержащее следующие опции:

    - Консультация (средства проведения консультации с подготовленной Ба-

зой знания);

    - Редактор-БЗ (специальный редактор, предназначенный для создания Базы

знаний);

    - Редактор-таблиц (средства работы с реляционными таблицами);

    - Конфигурация (средства установки и изменения конфигурации системы);

    - Интерпретатор (интерпретатор команд, в котором можно выполнять лю-

бые функции ЛОТА ПЛЮС или Лиспа);

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

    Познакомимся теперь с пунктами этого меню подробнее.

      5.2. "Консультация"

    В процессе консультации диалог также ведется посредством меню, наиболее

важным из которых является меню ситуации. В меню ситуации доступны следующие

опции (окна):

    "Параметры"- управление значениями параметров. Пользователь может выбрать

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

диапазон его возможных значений.

    "Вызов" - управление переходом к другим ситуациям. Пользователь имеет

возможность в явном виде вызвать необходимую ему в данный момент по тем или

иным соображениям ситуацию. Система начнет ее обработку, а по завершении вер-

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

    "Прецеденты" - управление выводом по аналогии. Пользователь может затре-

бовать имеющиеся прецеденты и, если имеются прецеденты, не противоречащие

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

ранным подмножеством прецедентов и текущей ситуацией.

    "Объяснения" - вызов подсистемы объяснений;

    "Управление"- управление состоянием ситуации. В любой момент пользователь

может:

- сохранить текущие значения параметров в виде прецедента ("Сохранить

опыт");

- явным образом установить состояние текущей ситуации по своему усмотрению

("Успех","Неудача") и тем самым вызвать процедуру завершения ситуации и

возврата к предыдущей ("более общей");

- повторить консультацию в текущей ситуации сначала ("Повторить");

- аварийным образом окончить консультацию и возвратиться в главное меню

("Конец сеанса");

- выйти в операционную систему ("Выход в ДОС").

 

  При входе в меню ситуации текущим становится окно Параметров.  Переход от

окна к окну осуществляется клавишами "влево","вправо", движение внутри окна

- "вверх","вниз".

     5.3. Редактор баз знаний

    Встроеннный редактор баз знаний предназначен исключительно для

редактирования баз знаний ЛОТА ПЛЮС. Другие текстовые файлы им редактировать

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

сооответствующие объектам  базы знаний - параметрам, ситуациям, правилам и

прецедентам.

  При входе в редактор необходимо задать имя редактируемого файла. По

умолчанию предполагается расширение LKB. Если такого файла не существует, то

редактор предложит создать новый. После загрузки файла на экране появляется

Главное меню редактора. Оно содержит следующие режимы:

Ред(актирование)Ситуаций

Ред(актирование)Параметров

Ред(актирование)Правил

Ред(актирование)Прецедентов

Ред(актирование)Опций

Файлы.

  Четыре первых режима предназначены для редактирования описаний объектов в

базе знаний и подробно рассматриваются в следующем разделе, "Редактирование

опций" позволяет установить имя первой (целевой) ситуации в базе знаний,

видимость окна прецедентов на экране, пункт "Файлы" рассматривается в

разделах 5.3.3.

    5.3.1. Списки объеков базы знаний

   При работе в режиме редактирования объектов базы знаний на экране

представлено меню, содержащее имена всех объектов данного типа в текущей базе

знаний.  Доступны следующие возможности:

Enter - редактирование описания объекта. Это - вызов основного режима редактора,

       в котором создаются и корректируются описания объектов (см. след.

       пункт);

Ins   - добавление нового объекта соответствующего типа (ситуации, правила и

       т.п.). Редактор создает новую строку в меню, устанавливает на нее курсор

       и ожидает ввода имени нового объекта. После ввода имени система

       переходит к созданию (редактированию) описания созданного объекта. При

       входе в режим редактирования описаний это описание состоит из "пустой

       строки", окаймленной двумя скобками;

Del   - удаление текущего объекта. После подтверждения система удаляет

       из базы знаний описание объекта и исключает его из списка объектов

       данного типа;

F2    - создание или редактирование комментариев (пользовательской помощи)

       для данного объекта. Система предоставляет для редакции окно, в

       котром содержится текст комментария этого объекта. В случае

       отсутствия такового, это окно первоначально пусто. Пользоваетль

       может создавать и редактировать текст, пользуясь теми же функциями и

       клавишами, что и при редактировании описаний объектов (см. след.

       пункт), за исключением "специальных функций". Созданный комментарий

       размещается в тексте с тем же именем, что и редактируемая база

       знаний, но с расширением LHT (Lota HyperText). В дальнейшем при

       консультации этот комментарий может использоваться в качестве

       пользовательской системы помощи - он будет возникать на экране

       всякий раз, когда курсор стоит на данном объекте (в любом меню) и

       нажата клавиша F2.

     5.3.2. Редактирование описаний объектов

   Основной режим работы редактора. При вызове этого режима система

анализирует описание объекта в базе знаний, превращает его в набор строк

(текст) и выводит на экран для редактирования. Первым символом текста

обязательно должна быть левая скобка, последним - правая. В таком виде

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

выделяет строки таким образом, чтобы они, по возможности, полностью

умещались на экране, автоматически создает отступы, соответствующие уровню

вложенности скобок.  Функции перемещения курсора - стрелки, смена страниц

(PgUp,PgDn), перехода к началу и концу текущей строки (Home,End) работают

точно так же, как и в обыкновенных текстовых редакторах.  Кроме того,

имеются следующие группы команд.

 Помощь:

F1       - системная помощь (справка о командах редактора);

Ctrl F1  - контекстная помощь; выдается экран системной или определенной

пользователем помощи для первого слова СПРАВА от курсора. Например, для

получения справки по действию includes курсор должен быть расположен в

положении 1 или 2 на рисунке, но не в положении 3.

 (a  includes b) -->

   | |  |

   1 2  3

Если выделенное таким образом слово - ключевое, то выдается соответствующий

экран системной помощи; если это слово - определенное пользователем имя,

прокомментированное в соответствующем файле гипертекста (см.п.3.12), то на

экран выводится этот комментарий.

  Работа со строками:

F9      - удаление текущей строки;

Ctrl F9 - восстановление последней удаленной строки после текущей;

Alt F9  - слияние текущей строки со следующей.

   Работа с блоками:

F7       - триггер отметки блока; если уже было отмечено начало блока (режим

 отметки блока был включен), то текущая строка определяет конец блока и режим

 отметки выключается; если режим отметки был выключен, то текущая строка

 отмечается как начало блока и включается режим отметки блока;

Ctrl F7  - удаление отмеченного блока из текста;

Shift F7 - снятие отметки блока;

Alt F7   - запись отмеченного блока в буфер.

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

    Работа с буфером:

  Так как редактор работает с большим количеством окон (по числу элементов в

Базе знаний), функции обмена текстом между окнами совершенно необходимы. Для

этой цели используется буфер. Буфер - один для всей базы знаний, его

содержимое может быть вставлено в редактируемое описание любого объекта, и в

него может быть помещен фрагмент текста из любого описания объекта.

F4        - вставить текст буфера после текущей строки;

Ctrl F4   - очистить буфер;

Alt F4    - переход к редактированию буфера. Содержимое буфера появляется в

 специальном окне (т.н. окно буфера) и становится доступным для

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

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

   Специальные команды редактора:

F6         - переход к редактированию по контексту; если первое слово справа

 от курсора - имя объекта в Базе знаний, то происходит переход к

 редактированию описания этого объекта. Редактирования происходит в окне

 буфера. При редактировании этого описания доступны ВСЕ команды редактора, в

 том числе - переход к редактированию по контексту на следующем "уровне

 вложенности";

Ctrl F6    - таблица ссылок. Если первое слово справа от курсора - имя объекта

 в Базе знаний, то в окне буфера на экране появляется меню, содержащее имена

 всех объектов Базы знаний, в описании которых упомянут объект ссылки. Выбрав

 из этого меню интересующий объект, возможно (нажав <-) перейти к его

 редактированию.

Alt F6     -  поиск парной скобки. Если текущий символ под курсором - левая

 или правая скобка, курсор перемещается на соответствующую ей парную скобку.

 Если парная скобка не найдена, выдается сообщение об ошибке.

   Выход из редактора:

Esc  - нормальный выход с запоминанием изменений. При выходе проверяется

  парность скобок в описании объекта, а также наличие левой скобки в первой

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

  экране появляется сообщение об ошибке и система возращается к

  редактированию описания;

F3    - выход со сбросом изменений. Восстанавливается описание объекта,

  существовавшее на момент входа в режим редактирования описания.

         5.3.3. "РедОпций"

Это окно содержит следующие пункты:

"Цель"             - служит для задания имени целевой (начальной) ситуации,

                     сохраняемой во внутренней переменной *first-proto*.  

"Окно Прецедентов" - управление видимостью окна прецедентов в процессе

                     консультации. Если указано значение "ON", список

                     текущих прецедентов постоянно представлен в правом

                     углу экрана. Для изменеия значения используются

                     клавиши:                                              

                     __        - смена "ON"/"OFF";                                  

                     Enter     - сохранение значения;                                  

                     Esc       - отмена изменений.                                  

                     Значение сохраняется в Базе знаний.

    5.3.4. "Файлы"

  Режим "Файлы", в свою очередь, представляет собой меню со следующими

пунктами:

Загрузить

Сохранить

Проверить

Конец

   Загрузить - дополнительную базу знаний или опыта. Эта база будет

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

   Сохранить - текущую базу знаний в файле на диске, имя которого будет

запрошено.

   Проверить - текущую базу знаний. Проверка включает синтаксический анализ

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

создается файл с тем же именем, но с расширением LCK.Такой файл в дальнейшем

можно использовать точно так же, как  файл с расширением LKB. Работа с файлами

LCK гарантирует Вас от синтаксических ошибок и ускоряет процесс загрузки и

консультации с базой знаний. Если в базе знаний есть ситуации с большим числом

парметров (50 и более), то процесс вывода здесь может быть ускорен в два или

три раза. При нахождении ошибок файл LCK не создается.

    5.4. "Редактор таблиц"

   ЛОТА ПЛЮС использует реляционные таблицы своего собственного формата,

однако допускается работа с файлами в формате DBF. Кроме того, для

небольших таблиц допускается их хранение целиком в оперативной памяти

(т.н.виртуальные таблицы).

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

меню, в котором перечислены файлы с расширением LTB в текущей директории, а

также опция "Иной" - для ввода имени файла вручную.  Таблицы ЛОТА ПЛЮС по

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

редактировать таблицу dBase, необходимо в явном виде указать расширение DBF.

    5.4.1. Редактирование записей таблицы

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

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

существующие. Все эти операции производятся в режиме полноэкранного

редактирования. По окончании редактирования, если таблица изменялась,

система предлагает сохранить изменения.

  В верхней части экрана представлен заголовок, состоящий из имен полей

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

сдлиной записи, а каждое поле занимает столько колонок, сколько байтов ему

отведено в описании таблицы. Редактор поддерживает горизонтальный и

вертикальный скроллинг экрана и использует следующие клавиши:

_,_       - переход к предыдущей/следующей записи;

-->, <--  - переход к предыдущему/следующему полю;

Ins       - вставка новой записи после текущей;

Del       - удаление ткеущей записи;

Home      - первое поле текущей записи;

End       - последнее поле текущей записи;

Enter     - редактирование текущего поля;

Esc       - окончание редактирования;

F1        - помощь;

F2        - сохранение таблицы на диске;

При нажатии любой алфавитно-цифровой клавиши, редактор автоматически

переходит к редактированию текущего поля и вставляет соответствующий символ

в начало строки значения поля. Редактор обеспечивает автоматическую проверку

типа вводимого поля.

  

     5.4.2.Определение новой таблицы

   Если вызванная для редактирования таблица не существует, система

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

диалоге последовательно описания полей таблицы. Все изменения

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

сначала имя (NAME), затем длина (LENGTH), и, наконец, тип (TYPE). ИМЯ поля

подчиняется тем же прпавилам, что и остальные индентиыикаторы ЛОТА ПЛЮС;

ДЛИНА поля указывает число байт, занимаемое полем и оперделяет число

колонок, отводимое для вывода поля на экран при редактировании таблицы;

ТИП поля опеределяет метод его храения и редактирования. Поддерживаются

следующие типы:

  C - символьное;

  D - дата ( в формате ДД.ММ.ГГ);

  N - числовое (допустимы десятичная точка и знак "-");

  L - произвольное (с автоматическим распознаванием строк символов, чисел

      или списков).

При редактировании описания используются следующие клавиши:

_,_     - переход к предыдущему/следующему описанию;

-->,<-- - переход к следующему/предыдущему элементу описания поля;

Ins     - добавление нового описания поля;

Del     - удаление описания текущего поля;

<-      - редактирование текущего элемента описания;

<Esc>   - окончание редактирования описания.

При окончании описания система проверяет его корректность, указывает на

неверно описанные поля (если такие есть) и в этом случае возвращается в

режим редактирования описаний полей.

     5.5. "Конфигурация"

     5.5.1.Редактор

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

баз знаний. NIL или пустая строка вызывают использование встроенного

редактора ЛОТА ПЛЮС.

      5.5.2.Окна меню

 Изменение цветов в окнах меню ЛОТА ПЛЮС. При выборе данного пункта на

экране появляется пример окна меню, пользователь может изменить цвета, что

сразу же будет отражено на экране. Используются следующие клавиши:

__        - смена нормального цвета текста;

<- ->     - смена норамльного цвета фона;

Home,End  - смена выделенного цвета;

PgUp,PgDn - смена выделенного фона;

Enter     - сохранение изменений;

Esc       - отмена изменений.

     5.5.3.Справочные окна

  Этот пункт аналогичен предыдущему, но изменение цветов происходит в

справочных окнах:  пользовательская помощь, гипертекст и т.д.

      5.5.4.Окно прецедентов

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

значение - "Off" - окно прецедентов невидимо. Если значение - "On", то при

входе в каждую ситуацию на экране будет представлен, одновременно со списком

параметров ситуации, и список всех (подходящих к данной ситуации)

прецедентов.  Выбор производится стрелками "вверх" или "вниз". После выбора

требуемого значения флага видимости для сохранения установленного значения

необходимо нажать <Enter>. <Esc> отменяет выбор и восстанавливает

первоначальное значение.

      5.5.5.Трассировка

  Установка текущего уровня трассировки логического вывода (в целях отладки

баз знаний).  Уровни трассировки:

0 - никакой трассировки (по умолчанию);

1 - трассируются комментарии выполняемых правил и вызываемых ситуаций;

2 - к предыдущему добавляются изменения значений параметров и состояние

    стека при вызове текущего правила;

3 -  все изменения параметров, стека, списка целей, списка прецедентов;

 Все сообщения трассировки выводятся в окно сообщений. Надо нажать любую

клавишу для продолжения работы.  Выбор производится стрелками __.

        5.5.6. Сохранение среды

     Этот пункт позволяет сохранить установленные значения переменных в

файле LOTA.ENV для использования в последующих сеансах.

        5.6. Интерпретатор

     Режим интерпретации предоставляет возможность опытному пользователю

исполнять необходимые действия, минуя систему меню.  При переходе в

этот режим экран очищается и появляется приглашение системы:  Лота> В ответ

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

редактора (edit) и редактора таблиц (table-handler), вызов консультации

(consult), временный выход в операционную систему (dos), вызов помощи

(help). Доступны также все функции Лиспа.  Клавиша F3 повторяет

предыдущую набранную строку.

  Лота поддерживает также "историю" набранных команд. Для вызова

предыдущей команды используется калвиша F4.  Клавиша F5 представляет всю

"историю" в виде меню, выбор (клавиша <Enter>) делает выбранную строку

текущей. Для удаления текущей команды из "истории" используется клавиша

F8.

 Возможно также перейти в режим интерпретации с помощью пользовательского

прерывания (нажатие клавиши F10):  для этого в ответ на запрос системы о

дальнейших действиях необходимо ввести латинскую букву "B" - Break.  

Возврат из режима интерпретации осуществляется нажатием в ответ на

приглашение системы клавиши <Esc> или же командой (return).

      5.7. "Помощь"

  ЛОТА ПЛЮС обладает развитой системой помощи, которая, однако, не призвана

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

     Контекстно-зависимая помощь может быть вызвана из любого меню системы

нажатием клавиши F1.

     Выбор опции "Помощь" в главном меню или вызов действия (help) в команд-

ном режиме приведет к появлению главного меню помощи системы, из которого

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

параметров, а также синтаксиса всех операций, выражений, предикатов и

действий языка представления знаний.

     Кроме этих средств, ЛОТА ПЛЮС предоставляет возможность пользователю

создать свою собственную системы помощи (комментариии) для разрабатываемой

прикладной экспертной системы (см. гл.7).

        5.8. Функциональные клавиши

    В любой момент работы с системой, когда она ожидает ответа с клавиатуры,

возможно использование специальных клавиш F1, F2, F3, F10 и пары Ctrl+C

(или Ctrl+Break), для которых предусмотрена стандартная реакция.

    При нажатии клавиши F1 система выводит экран помощи, соответствующий те-

кущему положению пользователя.

    При нажатии клавиши F2 система выводит на экран определенную пользователем

помощь (см. предыдущий пункт, а также гл.7).

     При нажатии F3, если система находится в режиме редактирования или

ввода (например, Редактирование описания в редакторе БЗ или ввод имени

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

ввода строки. Будьте внимательны!

    При нажатии клавиши F10 система производит так называемый "далекий

возврат", заканчивая работу в текущем режиме (например, в режиме объяснений

или просмотра гипертекста).

    При нажатии клавиши <Esc>, как правило, происходит возврат на

предыдущий уровень меню.

     При нажатии клавиш Ctrl+C происходит прерывание по запросу

пользователя.  Система выводит сообщение:

     Прерывание по запросу пользователя.

     Continue,Break,Main-menu,System?

 и ожидает Вашей реакции, т.е. ввода одной из латинских букв - C,B,A,M,S со

следующим значением:

     C - работа системы будет продолжена;

     B - система перейдет в режим интерпретации команд (cм. п. 5.6). Такие

действия с последующим использованием команды трассировки (show и/или вывод

значения объекта) очень полезны при отладке;

     M - система вернется к главному меню. Все значения, установленные в

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

     S - работа будет прекращена и управление возвращено операционной системе.  Если

_

      Глава 6. ЯЗЫК ПРЕДСТАВЛЕНИЯ ЗНАНИЙ ЛОТЫ

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

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

сываемые элементы - это параметры, ситуации и правила. Каждый такой объект

обладает набором слотов, характеризующих различные его свойства. В свою

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

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

примеры используют параметры, ситуации и т.п. из базы знаний VACAT.LKB.

     6.1. Константы

    Константы <const> в Лоте предназначены для описания отдельных, неделимых

элементов.

     Предусмотрены константы трех типов: числовые <n>, символьные <с> и логи-

ческие <log>.

     ЧИСЛОВЫЕ константы представляют собой привычную запись действительного

числа, например: 3 -12.35 .

     СИМВОЛЬНЫЕ константы аналогичны строковым константам Си или Лиспа. Как

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

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

символов , ; ( ) ] | \. Вместо двойных кавычек можно использовать символ |.

Отметим, что сравнение двух констант, содержащих одинаковые последовательности

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

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

специальных символов: символы " и  \ могут использоваться только внутри кавычек

и при этом должны экранироваться символом \.  Использование символа | в именных

константах недопустимо. Используемое иногда в документации обозначение <text>

также представляет собой частный случай "закавыченной" символьной константы.

  Примеры:      это-константа  " Это - тоже "

     ЛОГИЧЕСКИЕ константы - значения истинности в логике Лоты: T (НЕОБХОДИ-

МО), TF (ВОЗМОЖНО), NIL (НЕВОЗМОЖНО).

    Кроме того, имеются специальная константа для обозначения пустого множес-

тва - NIL и константа ПУСТАЯ СТРОКА - *NUL-STRG* (символьного типа).

     6.2. Выражения

     Выражения в Лоте разделяются на элементные и множественные, а также по

типам: символьные, числовые (дискретные и интервальные), табличные.

     6.2.1. Элементные выражения

     Элементные выражения <e-exp> могут представлять собой константу соответ-

ствующего типа или результат операции Лоты, возвращающей элементное значение.

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

образом:

     <num>  - числовое выражение;

     <str>  - символьное выражение.

     Все логические выражения Лоты <L-exp> также по существу являются элемен-

тными, но ввиду их особой роли они рассматриваются отдельно.

     6.2.2. Множественные выражения

     Как уже отмечалось, значениями параметров в Лоте служат множества. Боль-

шинство выражений языка представления знаний Лоты также оперирует множества-

ми, и потому множественные выражения (<S-exp>) - наиболее употребимые.

    В соответствии с концепцией Лоты каждое множественное выражение может

рассматриваться с двух точек зрения.

   Во-первых, существуют элементы, которые входят в множество наверняка, то

есть значение предиката "принадлежит множеству" для них НЕОБХОДИМО. Множество

этих элементов называется необходимой частью и обозначается в документации

I(<S-exp>). Множества, "сконструированные" из констант (константные), с необ-

ходимостью включают все свои члены, а множества значений параметров в настоя-

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

чения параметра I(<S-exp>) пусто.

   Во-вторых, существуют элементы, которые ВОЗМОЖНО принадлежат множеству

значений данного выражения, то есть значения предиката "принадлежит множест-

ву" для них ВОЗМОЖНО или НЕОБХОДИМО. Эта часть называется возможным значением

и обозначается в документации P(<S-exp>). Понятно, что возможное значение

всегда включает нобходимую часть, т.е. I(<S-exp>) << P(<S-exp>), где знак <<

обозначает теоретико-множественное отношение включения. Для выражений, сконс-

труированных из констант, P(<S-exp>) совпадает с I(<S-exp>), для параметра

P(<S-exp>) совпадает со множеством возможных значений, а I(<S-exp>) пусто.

     Предусмотрены множественные выражения следующих типов:

     <Sym>    - символьный (конечное множество символьных элементов).Для

обозначения множества, составленного из констант a,b,.., c в Лоте используется

запись '(a b ... c), например: '(лето зима межсезонье);

     <Seq>    - дискретный (конечное множество числовых элементов);

     <Interv> - интервальный (числовой интервал, определяемый двумя граничными

значениями). Для представления интервала с нижней границей m и верхней n

используется запись '(m . n), например '(1 . 14);

     <Tab>    -  табличный (множество записей реляционной таблицы).Табличное

выражение может представлять собой указание на используемую таблицу на диске -

- (table <имя файла>) или представление виртуальной таблицы в следующей форме:

(table NIL (<описание-поля>...) <длина записи> (<запись1> ...  <запись_n>)).

    Описание-поля имеет вид (<имя-поля> <длина> <тип>).

    ИМЯ-ПОЛЯ подчиняется обычным ограничениям на идентификаторы, однако мы

настоятельно рекомендуем не делать его длиннее, чем само поле;

   ДЛИНА определяет число байтов, отводимое под поле на экране. Отметим, что

Лота допускает хранение более длинных, чем это указано в описании, полей и

обрезает их только при выводе на экран;

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

пустимы следующие обозначения: C - символьное поле; N - числовое поле (допус-

кается использование десятичной точки и знака); L - оцениваемое поле (Лисп-

поле). Занесенная в это поле информация обрабатывается:  последовательность

цифр будет трактоваться как число, последовательность символов - как символьная

константа без скобок (см. п.3.2). Допустимо в данном поле и задание множества

значений, для этого оно должно быть заключено в скобки и предварено символом ',

например: '(лето зима межсезонье).  Все операции с такими полями выполняются

намного медленнее, чем с первыми двумя типами.

   В системе имеются операции превращения таблицы на диске в виртуальную

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

   Примеры:

таблица на диске: (table vacat.ltb)

виртуальная таблица:

(table NIL ((Сезон 25 L)(место 15 C)) 40 ((лето Подмосковье) (зима Карпаты)

             ((лето зима межсезонье) Пятигорск) ) )

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

ется обозначение <S-exp>.

     Любое элементное выражение является частным случаем множественного выра-

жения того же типа; числовое выражение может считаться частным случаем как

дискретного, так и интервального типа.

    Выражения образуются также в результате операций над константами, пара-

метрами и переменными. Их значения - результат операций, и для удобства мы

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

     Кроме этого, выражения могут быть представлены именем параметра соответ-

ствующего типа (обозначается <param-name>). Значением такого выражения служит

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

важное отличие. Все элементы такого множества входят в него не "наверняка", а

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

некоторого элемента х в множество значений параметра А может быть только НЕ-

ВОЗМОЖНО (если х не принадлежит множеству возможных значений А) или ВОЗМОЖНО

(если х входит в это множество). Это распространяется и на выражения, исполь-

зующие значения параметров в качестве "подвыражений". БУДЬТЕ ВНИМАТЕЛЬНЫ при

формулировании посылок правил, так как значение ВОЗМОЖНО не приводит к испол-

нению заключения правила!

     6.2.3 Описание окон

Описание окна (<w-descr>) в Лоте имеет следующий формат:

    (list <n-bkg> <n-frg> <r-bkg> <r-frg> <x0> <y0> <h> <w> [<text>])

    или

    '(<n-bkg> <n-frg> <r-bkg> <r-frg> <x0> <y0> <h> <w> [<text>])

Четыре первых числа определяют цвета: фон и передний план для основного и

"реверсивного", или выделенного, режима. Следующие два - строку и столбец

верхнего правого угла окна; далее - высота и ширина окна. Последний

(необязательный) параметр задается, если окно должно быть обрамлено. При этом

указанный текст используется в качестве заголовка окна. Для того, чтобы

получить обрамленное окно без заголовка, операнд <text> может имеь вид "".  В

Лоте имеются предварительно описанные окна. Их имена (см. Приложение 6) можно

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

цветов числами:  0 - черный, 1 - синий, 2 - зеленый, 3 - голубой, 4 -желтый, 5

- красный, 6 - фиолетовый, 7 - белый.

    Если необходимо вывести несколько выражений в одном окне, то все их можно

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

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

числе текущие значения параметров. Единственное исключение - табличные

выражения.  Они выводятся на экран действием report (см.п.4.3). Печатая

выражения, действие Display пропускает скобки. Если скобки необходимо печтать,

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

отличную от NIL.

     6.3. Операции

    6.3.1. Базовые операции

     Базовые операции применимы к любым множественным выражениям. В результа-

те они возвращают множественные выражения, как правило, того же типа, что и

их аргументы. Для всех операций требуется совпадение типов операндов.

     Объединение

     Synopsis: (<S-exp1> ++ <S-exp2> [++ <S-exp3> ...])

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

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

Примеры:

       ('(a b c d) ++ '(d c e f))  ==> (a b c d e f)

       ('(a b) ++ c) ==> (a b c)

     Пересечение

     Synopsis: (<S-exp1> ** <S-exp2> [** <S-exp3> ...])

Возвращает теоретико-множественное пересечение операндов. Для выражений

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

элементных выражений.

Примеры:

       ('(a b c d) ** '(d c e f))  ==> (c d)

       ((cons 1 2) ** (cons 1.5 4))  ==> (1.5 . 2)

      Разность множеств

      Synopsis : (<S-exp1> -- <S-exp1>)

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

вального типа недопустимо.

Пример:  ('(a b c d) -- '(d c e f))  ==> (a b)

      6.3.2. Операции над интервалами

    Поэлементная сумма

    Synopsis  : (<interval1> + <interval2>)

   Суммой двух интервалов (a,b) и (c,d) называется интервал (a+c,b+d). Допус-

тимо использовать вместо любого интервала число. Если оба опреанда - числа,

то операция совпадает с обыкновенным сложением.

Пример:  ('(1 . 2) + '(1.5  . 4)) ==> (2.5 . 6)

     Поэлементная разность двух интервалов

    Synopsis: (<interval1> - <interval2>)

Разностью двух интервалов (a,b) и (c,d) называется интервал (a-d,b-c).

Пример: ('(1 . 2) - '(1.5  . 4)) ==> (-3 . 0.5)

     Умножение

 Synopsis: (<num> * <interval>)

Поэлементное умножение интервала на число. Если второй операнд - также число,

то операция совпадаетс обычным умножением.

Пример:   (2 * '(7 . 10)) ==> (14 . 20)

      6.3.3. Конструкторы

     Выражения-конструкторы предназначены для получения новых множеств или

элементных выражений. При этом "исходный материал" может быть как записан в

тексте базы знаний, так и запрошен в диалоге у пользователя во время консуль-

тации.

     List

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

  Synopsis: (list <str1> ...)

Допустима также запись '(<str1> ...)

Пример:  (list a b c d) ==> (a b c d)

      Cons

Создает числовой интервал, лежащий между первым и вторым числом.

  Synopsis: (cons <num1> <num2>)

  Допустима также запись '(<num1> . <num2>).

  Пример: '(3 . 10) ==> (3 . 10)

      Get-interval

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

и правая границы интервала, и создает (возвращает) интервал, ограниченный

этими числами.

      Synopsis: (Get-interval [<chk-interv>]<w-descr>[<prompt> <p-wind>])

 <chk-interv> задает границы (включающий интервал), внутри

которого должен лежать задаваемый интервал; <w-descr> - описание окна, в

котором будет производиться ввод; <prompt> - текст, который может быть выведен

перед запросом (приглашение), <p-wind> - описание окна, в котором будет выведе-

но приглашение.  Структура описания окна приводится в п.4.5.5.

 Пример:

(Get-interval '(3 . 15) '(7 0 7 10 10 20 50) "Укажите диапазон" *text-window*)

      Ask-num

Приглашает ввести число с клавиатуры и возвращает его.

      Synopsis: (ask-num [<num>])

 <num> позволяет ввести "значение по умолчанию", которое выводится на экран в

виде приглашения. Если пользователь нажмет <Enter>, то данное число будет

рассматриваться как введенное с клавиатуры.

Пример: (Ask-num 5)

      Ask-string

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

кавычек, но в дальнейшем рассматривается как введенная в кавычках.

      Synopsis: (ask-string [<prompt><w-descr>][<default>])

<prompt> печатается в виде приглашения ко вводу и НЕ РАССМАТРИВАЕТСЯ как зна-

чение по умолчанию. Если сразу после приглашения пользователь нажмет <Enter>

или <Esc>, то введена будет ПУСТАЯ СТРОКА.  Если задано описание окна, то ввод

производится в нем. Иначе - в текущем окне.  Если задано значение по умолчанию

(default), то оно также распечатывает- ся при вызове действия и будет введено,

если нажать сразу клавишу <Enter>, или (даже после редактирования) клавишу

<Esc>.

Пример: (Ask-string "Please, enter file name:")

        (Ask-string "Save to file: " '(0 7 7 0 0 0 10 60 'f) file-name)

      Ask-lisp

Приглашает ввести с клавиатуры логическую константу или константу без кавы-

чек. Введенная строковая константа в дальнейшем будет представлена БЕЗ КАВЫ-

ЧЕК, поэтому при вводе необходимо быть осторожным. Отметим, что эта функция

работает медленно и везде, где это возможно, должна быть заменена на

ask-string или ask-y/n

      Synopsis: (ask-lisp [<prompt>][<w-descr>])

    Если задано описание окна, то ввод производится в нем. Иначе - в текущем

окне.

Пример: (Ask-lisp "Enter expression")

      Ask-Y/N

Приглашает пользователя ввести логическое значение ИСТИНА или ЛОЖЬ с клавиа-

туры в виде ответа на вопрос системы.

      Synopsis: (ask-y/n <prompt> [<window>])

      <prompt> - текст вопроса, который система автоматически дополнит спис-

ком возможных ответов - ("Да" и "Нет"), представленным в виде меню. Можно

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

но не задано, то будет использовано окно аварийных сообщений (строки 23-24 на

красном фоне). Операция возвращает ЛОГИЧЕСКИЕ ЗНАЧЕНИЯ (T при ответе "Да" и

NIL при ответе "Нет"). Если Вам необходимо получить модальное логическое зна-

чение, то приходится пользоваться функцией ask-lisp. Пример:

 (Ask-y/n "Вы согласны?")

      Get-list

Приглашает ввести символьное множество в диалоге.

     Synopsis: (Get-list <window>[<prompt>][<p-window>])

     Система рисует на дисплее окно и ожидает ввода последовательности строк

в этом окне. Если задано приглашение (<prompt>), то оно предварительно выво-

дится на экран в окне <p-window>. Каждая строка (до нажатия <Enter>) считает-

ся элементом создаваемого множества. Константы вводятся без двойных кавычек,

однако в полученном множестве они всегда представлены так, как будто

введены в кавычках. Окончание ввода - при нажатии <Enter> или <Esc> в начале

новой строки.

Пример: (Get-list '(0 7 7 0 4 10 10 39))

     Get-from-menu

Приглашает ввести символьное множество, выбрав его элементы из списка, пред-

ставленного в виде меню.

     Synopsis: (Get-from-menu <menulst> <w-descr> [<prompt>] [<p-wind>])

     <menulst> задает список, используемый в качестве меню в окне <w-descr>.

Значение необязательных операндов <prompt> и <p-wind> такое же, как и в ос-

тальных операциях - конструкторах.

Пример: (Get-from-menu '(a b c d) '(7 0 0 7 10 10 10 20) "Test a function"

                        '(0 7 0 7 0 0 2 70))

     Ask-from-menu

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

в виде меню.

     Synopsis: (Ask-from-menu <menulst> <w-descr> [<prompt>] [<p-wind>])

     <menulst> задает список, используемый в качестве меню. Значение необяза-

тельных операндов <prompt>, <p-wind> и <w-descr> такое же, как и в остальных

операциях - конструкторах.

Пример: (Ask-from-menu '(a b c d) '(7 0 0 7 10 10 10 20) "Test a function"

                        '(0 7 0 7 0 0 2 70))

      6.3.4. Операции базы данных

     Определение таблицы на диске

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

(структуру записи - описание полей в записи и ее длину) и возвращает описание

таблицы.

     Synopsis: (define-table <filename> [<tab-header>])

<filename> задает имя файла; <tab-header> - описания полей (см.п.4.1). Если

<tab-header> не задано, система предлагает задать опеределение таблицы в

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

Пример:

   (define-table v1.ltb '((место 20 С)(Основное_занятие 15 C)(Сезон 20 L)))

   Добавление записи к таблице

Добавляет заданную запись к таблице (виртуальной или дисковой)

   Synopsis: (attach <tab> <rec>)

Пример:

  (attach (table vacat.ltb) '(Геленджик купание_в_море '(лето межсезонье)))

к таблице vacat.ltb будет добавлена запись со значением поля "место" - Геленд-

жик, "Основное_знаятие" - купание_в_море и т.п.

   Выбор из таблицы

Создает и возвращает новую таблицу, сотстоящую из тех записей исходной

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

   Synopsis: (selection <table> <L-expr> [<filename>])

<table> задает исходную таблицу, <L-expr> - условие, выполнение которого

требуется, <filename> - имя файла, в который будет помещена создаваемая

таблица. Если <filename> не задано, то будет создана виртуальная таблица.

Обратите внимание на запись условия. Для использования значений полей записей

таблицы в условии в Лоте предусмотрена запись

  (<имя-таблицы> -> <имя-поля>).

Пример:

  (selection (table vacat.ltb) (eq (vacat.ltb -> Сезон) лето) v1.ltb) ==>

     ==> (table v1.ltb)

отбирает из таблицы vacat.ltb записи со значением поля "Сезон" -  "лето",

помещает их в таблицу v1.ltb, и возвращает ее описание.

   Удаление записей из таблицы

   Synopsis: (deletion <table> <L-expr>)

Удаляет из таблицы <table> записи, для которых выполняется условие <L-exp>.

Пример:

  (deletion (table v1.ltb) (eq (vacat.ltb -> Сезон) лето)) ==> (table v1.ltb)

  Проекция

Возвращает таблицу, записи которой представляют собой записи исходной таблицы,

но содержат только поля, перечисленные в списке.

   Synopsis: (projection <table> '(<имя-поля> ...) [<filename>])

Если <filename> не задано, создается виртуальная таблица; в этом случае

идентичные записи удаляются.

Пример:

   (projection (table vacat.ltb) '(Сезон)) ==>

   ==> (table NIL ((Сезон 20 L)) 20 ((лето) (зима) ((лето межсезонье))

                          ((лето зима межсезонье)) ((зима межсезонье))  ) )

  Декартово произведение

  Synopsis: (cartesian <tab1> <tab2> <filename>)

Создает новую таблицу на диске в файле <filename>, являющуюся прямым декартовым

произведением таблиц <tab1> и <tab2>.

Пример:

 (cartesian (table vacat.ltb) (table vaddit) v2.ltb) ==>

    ==> (table v2.ltb)

   Соединение

   Synopsis: (join <tab1> <tab2> <filed1> <field2> <filename>)

Создает новую таблицу на диске в файле <filename>, описание которой содержит

все поля таблицы <tab1>  и все поля таблицы <tab2>, за исключением поля с

именем <field2>. Для кажджой пары записей таблиц <tab1>  и <tab2>, в которых

значения полей с именами <field1> и <field2> соответственно совпадают,

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

Пример:

  (join (table vacat.ltb) (table vaddit.dbf) место пункт v3.ltb)

   Преобразование вида таблиц

Сохранение виртуальной таблицы в файле на диске (превращение в дисковую) и

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

  Synopsis:  (save-table <table> <filename>)

             (load-table <filename>)

Пример:

   (setq a (load-table vaddit.ltb)) ==>

  ==>  (table NIL ((проезд 25 L)(место 15 C)) 40

       ((пешком Подмосковье) (поезд Карпаты) ((поезд самолет) Пятигорск)))

   (save-table a v4.ltb) ==> (table v4.ltb)

   Выбор из таблицы

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

записей и возвращает виртуальную таблицу, содержащую отобранные записи.

  Synopsis: (get-from-table <table> <w-descr>)

<w-desr> - описание окна, которое используется для создания меню. Форма

описания окна приведена в разделе 4.5.

  Пример:  (get-from-table (table vacat.ltb) '(7 0 0 7 10 10 20 50))

  Редактирование таблицы

  Synopsis: (browse <table> <w-descr>)

Вызывает полноэкранное редактирование таблицы с возможностями коррекции,

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

как для виртуальны, так и для дисковых таблиц. Использование функциональных

клавиш при редактировании приведено в приложении 4.

Пример: (browse (table vacat.ltb) '(7 0 0 7 10 10 20 50 'Варианты))

  Вывод таблицы на экран

  Synopisis: (report <table> <w-descr>)

Выводит на экран таблицу <table>  в окне <w-descr>. Для перехода к следующему

экрану (если таблица "длиннее" окна) используются клавиши PgUp,PgDn, если

таблица "шире" окна, то сдвиг вправо-влево осуществляется соответствующими

стрелками клавиатуры (или передвижением мыши).

Пример: (report (table addit.ltb) *table-window*)

  Печать таблицы

  Synopsis: (put-table <table>)

Печатает таблицу на принтере (по 80 колонок в строке)

  Значения поля таблицы

  Synopsis: (<имя-поля> of-table <table>)

Возвращает СПИСОК (не таблицу!), состоящий из всех различных значений,

содержащихся в поле <имя-поля> записей таблицы <table>. Обратите внимание на

отличие этой операции от операции project даже при указании списка полей из

одного элемента: операция project возвращает таблицу.

Пример:

  (Сезон of-table (table vacat.ltb)) ==> (лето зима межсезонье)

      6.3.5. Агрегатные операции

      Эти операции позволяют получить агрегированную информацию о множествах в

 целом. В соответствии с концепцией Лоты каждое множество обладает элементами,

 входящими в него заведомо, и элементами, которые, возможно, входят в него.

 Поэтому такие функции, как сумма или число элементов во множестве, возвращают

 интервал. Например, для любого параметра число элементов в нем лежит между 0

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

 элементов на данный момент. Иногда, однако, желательно рассматривать возможные

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

 варианты агрегатных операций.  Поскольку опыт показывает, что при описании баз

 знаний именно такие функции используются чаще, то их имена в Лоте являются

 основными. Соответствующие им "честные" операции получили аналогичные имена с

 префиксом "Р".  Использование агрегатных операций без префикса в посылках

 правил может нарушить свойство логической монотонности, и поэтому желательно

 снабжать такие правила флагом подавления предположения о монотонности (retry).

      Sum

Возвращает сумму всех (возможных) элементов дискретного множества

   Synopsis: (SUM <Seq-exp>)

Пример: (Sum '(1 2 3 4 5)) ==> 15

      PSum

Вычисляет верхнюю и нижнюю границы, в которых может лежать сумма элементов

дискретного множества и возвращает соответствующий интервал.

      Synopsis: (PSum <Seq>)

      Если множество состоит только из возможных элементов , то нижняя граница

интервала будет суммой всех отрицательных членов, а верхняя - суммой всех

положительных.

Пример: (Parameter TEST (domain . '(-1 2 3 4)))

        (PSum test) ==> (-1 . 9)

        (PSum '(1 2 3 4 5)) ==> (15 . 15)

      Sup

Возвращает верхнюю грань интервала возможных значений выражения.

      Synopsis: (Sup <Interv>)

Пример: (Sup '(3 . 12)) ==> 12

      Inf

Возвращает нижнюю грань интервала возможных значений выражения.

      Synopsis: (Inf <Interv>)

Пример: (Inf '(3 . 12)) ==> 3

      Card

Возвращает число всех возможных элементов множества. При попытке оценить

число возможных значений в интервале выдает сообщение об ошибке.

      Synopsis: (Card <S-exp>)

Пример: (Parameter atest (domain . '(a b c d)))

       (Card '(a b c d)) ==> 4

       (Card atest) ==> 4

      PCard

Возвращает интервал между минимально и максимально возможным числом элемен-

тов во множестве.

      Synopsis: (PCard  <S-exp>)

      Отметим, что для параметров (они состоят только из возможных значений)

 нижней границей интервала всегда будет 0.

Пример: (Parameter atest (domain . '(a b c d)))

        (PCard '(a b c d)) ==> 4

        (PCard atest) ==> (0 . 4)

      6.3.5.  LISP функции в качестве операций

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

Лисп, однако пользователю необходимо очень тщательно следить за тем, чтобы

эти функции возвращали значения того типа, который требуется в данной ситуа-

ции правилами Лоты. Дело в том, что анализатор ошибок Лоты не анализирует

Лисп-функции, и ошибки будут "отловлены" только на уровне Лиспа.

      6.4. Логические выражения (Предикаты)

      6.4.1. Базовые предикаты

      Базовые предикаты применимы ко всем множественным выражениям Лоты и

возвращают одно из трех значений истинности.

      Пустота множества

      Synopsis : (empty <S-exp>)

      Возвращает Т, если множество пусто, TF, если имеются возможные зна-

чения, и NIL, если имеются и необходимые. Таким образом, будучи применен к

параметру, этот предикат не может быть ложным.

Пример: (Parameter atest (domain . '(a b c d)))

        (Empty '(a b c d)) ==> NIL

        (Empty '())  ==> T

      Включение

Проверяет вхождение первого множества во второе.

     Synopsis: (<S-exp1> in <S-exp2>)  или

               (<S-exp1> only <S-exp2>)

     Возвращает T, если P(<S-exp2>)<<I(<S-exp1>), TF,если I(<S-exp2>) <<

P(<S-exp1>), и NIL, если (not I(<S-exp2>)<<P(<S-exp1>)). Напомним, что

I(<S-exp>) и P(<S-exp>) обозначают необходимую часть и область возможных

значений соответственно, а знак << - теоретико-множественное отношение вклю-

чения.

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b c d) in atest) ==> TF

        (atest only '(a b c d)) ==> T

       Содержание

Проверяет вхождение второго множества в первое.

     Synopsis: (<S-exp1> includes <S-exp2>)

Смысл операции точно такой же, как и у предыдущей.

       Разделение

Проверяет отсутствие пересечения двух множеств.

    Synopsis : (<S-exp1> out-of <S-exp2>)

Возвращает NIL,  если I(<S-exp1>)^I(<S-exp2>),

               TF,   если P(<S-exp1>)^P(<S-exp2>),

                T,   если не P(<S-exp1>)^P(<S-exp2>).

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a e) out-of '(a b c d)) ==> NIL

        ('(e f) out-of atest)  ==> T

    Равенство

Проверяет совпадение двух множеств.

    Synopsys: (<S-exp1> same-as <S-exp2>)

Возвращает

    Т, если I(<S-exp1) >> P(<S-exp2>) и I(<S-exp2>) >> P(<S-exp1>),

    TF, если P(<S-exp1>) >> I(<S-exp2>) и P(<S-exp2>) >> I(<S-exp1>),

    иначе - NIL

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b) same-as '(a b c d)) ==> NIL

        ('(a b c d) same-as atest) ==> TF

Предикаты сравнения двух интервалов

    Synopsis: (<intr1> less <intr2>)

Возвращает T,   если sup(<intr1>) < Inf(<intr2>),

           NIL, если Inf(<intr1>) > Sup(<intr2>),

          и TF - во всех остальных случаях. Число является частным слу-

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

Пример: (Parameter itest (domain . '(0 . 6)))

        ('(-5 . -3) less itest) ==> T

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

              Больше

    Synopsis: (<intr1>  greater <intr2>)

              Не-меньше

    Synopsis: (<intr1>  not-less <intr2>)

    6.4.2. AD-HOC предикаты

    Ad-hoc по латыни означает "к настоящему времени". Именно такой смысл и

вкладывается в эти предикаты, дублирующие все предикаты пунктов 1 и 2. В этих

предикатах не учитывается различие между областями допустимых значений и не-

обходимым диапазоном, т.е. считается, что на настоящий момент все допустимые

значения необходимы, и поэтому выражения, содержащие значения параметров,

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

из ДВУХ значений истинности - НЕОБХОДИМО или НЕВОЗМОЖНО. Еще раз напомним, что

при их использовании необходимо следить за обеспечением корректности БЗ.

    Пустота множества

    Synopsis : (Now-empty <S-exp>)

Пример: (Parameter atest (domain . '(a b c d)))

        (Now-empty '(a b c d)) ==> NIL

        Включение

Проверяет вхождение первого множества во второе.

     Synopsis: (<S-exp1> now-in <S-exp2>)  или

               (<S-exp1> now-only <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        (atest now-only '(a b c d)) ==> T

       Содержание

Проверяет вхождение второго множества в первое.

     Synopsis: (<S-exp1> now-includes <S-exp2>)

Смысл операции точно такой же, как и у предыдущей.

       Разделение

Проверяет отсутствие пересечения двух множеств.

    Synopsis : (<S-exp1> now-out-of <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a e) now-out-of '(a b c d)) ==> NIL

        ('(e f) now-out-of atest)  ==> T

    Равенство

Проверяет совпадение двух множеств.

    Synopsys: (<S-exp1> now-same-as <S-exp2>) или

              (<S-exp1> = <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b) now-same-as '(a b c d)) ==> NIL

    Предикаты сравнения двух интервалов

    Synopsis: (<intr1> now-less <intr2>);

              (<intr1> now-greater <intr2>)

Пример: (Parameter itest (domain . '(0 . 6)))

        ('(-5 . -3) now-less itest) ==> T

    6.4.3. Предикаты снятия модальностей

    Эти предикаты предназначены для перевода модальных значений истинности в

классическую двузначную логику. Отметим, что они не удовлетворяют предполо-

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

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

о монотонности - fire, retry.

    Possible

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

    Synopsis: (Possible <L-exp>)

Возвращает  T,если <L-exp> равно T или TF, NIL,если <L-exp> равно NIL.

Пример: (Parameter atest (domain . '(a b c d)))

        (possible (atest includes a)) ==> T

    Not-sure

Предикат, выражающий отсутствие уверенности в истинности утверждения.

    Synopsis: (Not-sure <L-exp>)

Возвращает T,если <L-exp> равно NIL или TF, и NIL,если <L-exp> равно T.

Пример: (Parameter atest (domain . '(a b c d)))

        (not-sure (atest includes a)) ==> T

        (not-sure ( '(a b c d) includes a)) ==> NIL

    6.4.4. Специальные предикаты

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

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

нарушать условия монотонности, и поэтому необходимы соответствующие "меры

предосторожности" (см. предыдущий пункт).

    Failed

Предикат, выражающий провал подцели.

    Synopsis: (Failed <proto-name>)

Возвращает T, если результат последнего вызова подцели с именем

 <proto-name> был FAILED, иначе -  TF.

Пример: (Failed Спокойный_отдых)

    Succeed

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

    Synopsis: (Succeed <proto-name>)

Возвращает T, если результат последнего вызова подцели с именем

<proto-nаme> был SUCCESS, иначе - TF.

Пример: (Succeed Спокойный_отдых)

    6.4.7. Модальные логические операции

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

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

ческими двойниками оставлены их обычные имена (and,or,not), а имена модальных

операторов оканчиваются двоеточием. Мы не рекомендуем употреблять классичес-

кие операторы, так как это может привести к потере свойства монотонности.

Модальное "И"

    Synopsis: (<L-exp1> and: <L-exp2>)

Вычисление проводится по следующим правилам: T&TF=TF, NIL&TF=NIL,

TF&TF = TF.

Пример:   (NIL and: TF) ==> NIL

Модальное "ИЛИ"

     Synopsis: (<L-exp1> or: <L-exp2)

T | NIL = T, T | TF = T, TF | NIL = TF, NIL | NIL = NIL.

Пример:  (NIL or: TF) ==> TF

Модальное отрицание

     Synopsis: (NOT: <L-exp>)

! T = NIL, ! TF = TF, ! NIL = T.

Пример: (Not: TF) ==> TF

    6.4.6 Лисп-функции в качестве логических выражений

    Синтаксис Лоты допускает использование Лисп-функций там, где требуются

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

лючается в том, что большинство предикатов Лиспа возвращает значения, кото-

рые могут быть обработаны Лотой неверно: Лисп трактует NIL как ложь, а все ос-

тальные значения - как истинные; для Лоты истину обозначает только константа T.

                6.5. Действия

    Действия (<action>) представляют собой операции по изменению значений ка-

ких-либо параметров, изменению режима консультации, в частности, ее заверше-

нию, в выводе каких-либо сообщений на экран, обращении к пользователю за ка-

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

лем. Действия Лоты так же, как подпрограммы Фортрана, не обязаны возвращать

какие-либо значения.

    4.5.1 Действия, изменяющие значения параметров

    Эти действия сокращают диапазон возможных значений параметра, а также вы-

полняют необходимые операции механизма вывода: заносят в стек вывода все пра-

вила, связанные с изменяемым параметром, и изменяют (дополняют) "историю" па-

раметра.

    SYNOPSIS: (<param-name> <operation> <operands>)

    Обращаем Ваше внимание на то, что для отличия от логических выражений все

обозначения этих действий начинаются со слова is-.

    Первый операнд определяет параметр, диапазон которого подвергается кор-

рекции. Второй операнд определяет операцию, применяемую для установки

значения параметра. Далее следуют остальные операнды операции. По сути все

выражения представляют собой макро-сокращения единственного действия, которое

заключается в том, что диапазон параметра сужается до пересечения его с

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

пункте.

     Ограничение диапазона

     Synopsis: (<param-name> is-only <S-exp>)

               (<param-name> is-in <S-exp>)

эквивалентно функции (<param-name> ** <S-exp>), т.е. из диапазона значений

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

<S-exp>.

Пример: (Parameter atest (domain . '(a b c d)))

        (atest is-in '(c d e f)) ==> (c d)

    (<Param-name> is-such <L-exp>)

Из диапазона возможных значений параметра удаляются все те элементы, для

которых <L-exp> ложно, т.е. имеет значение NIL.

Пример: (Parameter stest (domain . '(1 2 3 4 5)))

        (stest is-such  (stest > 3)) ==> (4 5)

    (<Param-name> is-not <S-exp>) или

    (<Param-name> is-out-of <S-exp>)

    эквивалентно функции (<param-name> -- <S-exp>), т.е. из диапазона

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

обходимых значений <S-exp>.

Пример: (Parameter atest (domain . '(a b c d)))

        (atest is-not '(c d e f)) ==> (a b)

    (<Param-name> is-less <num>)

допустимо только для параметров типа "интервал" и приводит к совпадению

верхней границы интервала с числом <num> (если оно меньше текущей верхней

границы).

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-less 3) ==> (1 . 3)

    (<Param-name> is-greater <num>)

аналогично предыдущему, но только для нижней границы.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-greater 3) ==> (3 . 5)

    (<Param-name> is-decreased <num>)

также допустимо только для интервальных параметров и приводит к умень-

шению верхней границы НА <num>.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-decreased 3) ==> (1 . 2)

    (<Param-name> is-increased <num>)

аналогичное увеличение нижней границы.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-increased 3) ==> (4 . 5)

    6.5.2. Действия управления ситуациями

Успешное завершение ситуации

    Synopsis: (Success)

    Все проведенные в ситуации изменения параметров запоминаются, управление

возвращается к той ситуации, откуда была вызвана текущая. Успешное завершение

"самой старшей" ситуации приводит к возврату в главное меню системы или в ко-

мандный режим. Если установлен флаг сохранения опыта, то при успешном завер-

шении Лота запоминает прецедент ситуации.

Неудачное завершение ситуации

    Synopsis: (Fail)

    Все изменения, осуществленные в ситуации, уничтожаются, все параметры

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

ситуацию. Управление возвращается к "старшей" ситуации.

  Завершение ситуации

    Synopsis: (Terminate [<text>])

    Система завершает ситуацию, задавая пользователю вопрос о результате. От-

вет "Да" означает успех, "Нет" - неудачу. Все другие ответы игнорируются. Сам

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

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

ний.

    Вызов ситуации (подзадачи) из текущей

    Synopsis: (Call <situ-name>)

    Имя ситуации обязательно должно быть упомянуто в слоте GOALS текущей си-

туации. При обращении к этому действию Лота оценивает слот PATTERN вызываемой

ситуации и, если результат - Т, переходит к ситуации с данным прототипом.

При любом ее завершении управление возвращается в текущую ситуацию, а специ-

альный параметр, соответствующий <situ-name> (он имеет такое же имя), полу-

чает новое значение в зависимости от результата вызова. Все правила, связан-

ные с этим параметром, помещаются в стек вывода.

    6.5.3. "Мета-действия"

    Эти действия позволяют изменить ход вывода Лоты, не дожидаясь передачи

инициативы пользователю. Они не нарушают монотонности вывода, однако пользо-

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

      Apply-rule

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

    Synopsis: (Apply-rule <rule-name>)

Пример: (Apply-rule r2-1)

      Revise

Предоставляет пользователю возможность изменить значение указанного парамет-

ра.

    Synopsis: (revise <param-name> [<prompt-text> [<w-descr>]])

    Если указаны описание окна и текст приглашения, то предварительно выво-

дится текст в специфицированное окно. Формат описания окна приведен при опи-

сании действия Display (п.4.5.4).

Пример: (Revise варианты "Укажите возможные варианты" '(0 7 0 7 0 0 2 80))

      Suspend

Вызов подцели, выбираемой из меню.

    Synopsis : (Suspend)

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

рает одну из них, происходит соответствующий вызов.

    Retrieve-param

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

    Synopsis : (Retrieve-param)

     Retrieve-prec

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

    Synopsis : (Retrieve-prec)

    Cохранение прецедента

    Synopsis: (save-prec [<Prec-name>] [(<Param-name> ...)])

Сохраняет на диск прецедент текущей ситуации. Прецеденты сохраняются в файле

с именем <Fileneme>. Если этот операнд не задан, то в качестве имени

используется значение системной переменной *exp-base*. Если не задано имя

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

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

сохраняются значения всех параметров текущей ситуации.

   Вызов машины логического вывода

   Synopsys: (infer)

Запускает машину логического вывода в текущей ситуации. После окончаняи вывода

производится восстановление экрана.

    6.5.4. Организация пользовательского интерфейса

       Display

Вывод на экран

    Synopsis: (Display <S-exp> [ <w-descr>] [<stop-sign>])

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

го выражения. Если задано описание окна, то вывод производится в заданное ок-

но. В противном случае вывод производится в текущее окно. Если указан

<stop-sign> (т.е. третий операнд отличен от NIL), то система останавливается

и ждет нажатия любой клавиши.

    Если необходимо вывести несколько выражений в одном окне, то все их можно

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

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

числе текущие значения параметров. Единственное исключение - табличные

выражения.  Они выводятся на экран действием report (см.). Печатая

выражения, действие Display пропускает скобки. Если скобки необходимо печтать,

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

отличную от NIL.

Пример:

  (Display " Это - пример вывода текста" '(7 0 0 7 1 3 10 15 'f) T)

  (Display    (list atest "-это значение параметра atest") *text-window*)

    Hypertext

Вывод на экран гипертекста

    Synopsys: (Hypertext <filename> [<paragraph>] [<w-descr>])

Объяснения и примеры приведены в гл.7. Гипертекст предварительно должен

быть создан в текстовом редакторе с указанием параграфов, а затем

проиндексирован с помощью команды index-ht.

    Print-text

Вывод значения выражения (текста) на печать.

    Synopsis: (print-text <S-exp>)

    6.5.5. Составное действие

    Часто желательно при выполнении посылки правила или в "стартовой" проце-

дуре ситуации выполнить не одно, а несколько действий. Для этого в Лоте пре-

дусмотрено сложное действие Progn - другими словами, операторные скобки.

    Synopsis : (Progn <action>... )

Пример: (Progn (display Любимое_занятие '(7 0 0 7 0 0 5 15) Т)(Success) )

    6.5.6. Расширение базы знаний

    Текущая база знаний Лоты может быть расширена в процессе консультации путем

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

загруженные знания будут доступны только ПОСЛЕ ВЫХОДА из текущей СИТУАЦИИ.

    Если Ваша база знаний столь велика, что не может поместиться в оперативной

памяти, то возможно разбиение ее на относительно независимые базы, вызываемые

из некоторой "старшей" базы знаний - создание оверлейной структуры базы. В

отличие от большинства оболочек, которые не позволяют в таких случаях

передавать значения и описания объектов от одной базы знаний к другой, в Лоте

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

прототипов "старшей" базы в действии Consult. Оверлейные базы знаний не могут

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

    Load-lkb

Загрузка дополнительной базы знаний с диска

    Synopsis : (Load-lkb <filename>)

    Все знания, содержащиеся в новой базе, становятся доступными ПОСЛЕ выхода

из текущей ситуации (безразлично, успешного или неудачного). Можно опустить

расширение файла. По умолчанию предполагается расширение LKB.

    Consult

Вызов "подчиненной" консультации

    Synopsys: (Consult <file-name> [<first-proto-name>][<parameters-list>])

    <first-proto-name> задает имя старшей (целевой) консультации в вызываемой

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

ВЫЗЫВАЮЩЕЙ базы знаний, которые должны быть доступны в вызываемой. По окончании

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

освобождается.

    6.5.8 Объяснения, просмотр значений, комментарии, помощь

    Объяснение для правила

    Synopsis: (why <rule-name>)

Вызов режима объяснения для указанного правила. На экран выводится коммента-

рий правила, если он задан (иначе - текст правила), и меню, указывающее, от

каких параметров зависит истинность его посылки. Пользователь может выбрать

из этого меню любой параметр и запросить объяснения его значения (см. how).

    Объяснение для параметра

    Synopsis: (how <param-name>)

Вызов режима объяснений для указанного параметра. На экран выводится коммен-

тарий параметра, его значения и меню, содержащее список правил, действия ко-

торых изменяли диапазон параметра. Пользователь может выбрать любое правило и

просмотреть его объяснения (см. why).

    Объяснения для текущей ситуации

    Synopsis: (explain)

Вызов режима объяснений для текущей ситуации. На экран выводится имя текущей

ситуации, комментарии и меню, содержащее список всех правил, примененных в

данной ситуации и всех ситуаций-подцелей, вызывавшихся из текущей. Пользова-

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

как по ситуации, так и по правилу (см. why).

    Просмотр описания объекта базы знаний

    Synopsis: (Show <obj-name>)

    Эта команда допустима только в режиме отладочного прерывания (см.п.3.7).

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

но описание указанного объекта базы знаний. Операндом действия show может

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

Пример: (Parameter atest (domain . '(a b c d)))

        (Show atest) ==> ((domain . (a b c d)))

      Запрос о помощи

      Synopsis: (help <Object>)

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

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

    6.5.9. Системные действия

  Выход в режим интерпретации команд

    Synopsis : (Commander)

    Лота переходит в командный режим и остается там до тех пор, пока не будет

нажата клавиша <Esc>. После этого система попытается продолжить работу с того

места, где она была прервана.

    Вызов редактора базы знаний

    Synopsis: (edit [<filename>])

Вызывает редактор для работы с указанным файлом. Если вы используете встроенный

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

базу знаний или базу опыта Лоты; при использовании иного редактора (например,

Multi-Edit или Лексикон), возможно редактирование любых текстовых файлов.

    Выполнение команды MS-DOS или BATCH-файла

    Synopsis : (dos "<command>")

  Вызывает выполнение команды DOS, указанной в двойных кавычках. Для исполь-

зования знаков Backslash (\) и двойных кавычек необходимо экранирование симво-

лом \. Команда учитывает РАТН операционной системы.

  При вызове команды без операнда происходит запуск вторичного интерпретатора

команд DOS. Возвращение в Лоту происходит по команде exit.

Пример: (dos "dir *.*")

        (dos "c:\\turbo_c\\showpie dead.db")

    Изменение значений переменных среды (конфигурации) Лоты.

    Synopsis: (Setq <environment-par> <new-value>)

    Переменные среды, их возможные значения и значения по умолчанию приводят-

ся в п 3.11. На самом деле эта функция - обычная функция Лиспа, аналогичная

оператору присвоения в "традиционных" языках. Лота не производит проверки на

допустимость значений.

Пример: (Setq *trace* 2)

    Окончание консультации

    Synopsis : (Stop)

Система возвращается в главное меню.

    Аварийный выход в операционную систему

    Synopsis : (System)

    Загрузка и выполнение Лисп-программы из внешнего файла

    Synopsis: (Load <filename>)

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

файле. По завершении программы Лота будет пытаться продолжить вывод.

    6.5.9.Лисп-функции в качестве действия Лоты

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

функцию Лиспа. Как уже отмечалось, Лота не использует результат, возвращаемый

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

ми эффектами. Советуем избегать использования ключевых слов Лоты в своих про-

граммах.

_




1. ИСПОЛНИТЕЛЬНОГО ПРАВА ПРОГРАММА КУРСА ldquo;ЮРИДИЧЕСКАЯ ПСИХОЛОГИЯrdquo; ДЛЯ СТУДЕНТОВ ДНЕВНОГ
2. это уникальный персональный подарок
3.  Прочитайте текст и проанализируйте употребление времен
4. а- кислород марганец титан цинк уран
5. Вариант 4 Исполнитель- Гудкова Ольга Владимировна Факультет- Учетностатистический 5 ку
6. Теорії виникнення і розвитку біосфери Землі
7. тематике стало 48 учеников что составило 12 от числа участников
8. По теме- Размещение и деятельность эвакуированных заводов в Новокузнецке Выполнил- студент груп
9. Команды Norton Commander.html
10. ТЕМА 7. ОБЛІК ВИРОБНИЧИХ ЗАПАСІВ Лекція 7
11. Сварка корпуса газотурбинного двигателя
12.  Введение Полупроводниковые лазеры отличаются от газовых и твердотельных тем что излучающие переходы пр
13. зующнх состояние российской экономики п 1997 г
14. Статья 110. Распределение взысканных денежных средств 1
15. Маргарет Тэтчер
16. План ликвидации аварий далее ПЛА документ определяющий меры и действия необходимые для спасения людей
17. Детская школа искусств Сценарий концерта преподавателей Детской школы искусств 25 февраля 2010 год
18. Налогоплательщики
19. економiстами стоiть завдання глибоко й конкретно вивчати явища i тенденцii у розвитку свiтовоi економiки
20. I Es ist cht Uhr Willkommen bei D Plus