Найти в Дзене
Logonok

Экспертная система по шагам

Накопленные знания - это бесполезный балласт, если отсутствует возможность использовать их для решения проблем. Для неспециалиста мало одних систематизированных данных, чтобы получить ответ. Ему нужно связать их с текущей задачей, а для этого необходим эксперт. Экспертная система состоит из двух частей. Первая часть - это база знаний, описывающая сущности и их свойства. Вторая часть - это диалог с пользователем, состоящий из вопросов и ответов, связанных со свойствами сущностей. Каждый следующий вопрос выбирается на основе ответов на предыдущие. Каждый ответ уменьшает количество подходящих сущностей. Создавать экспертную систему будем на декларативном фреймворке Evado, который избавляет от необходимости писать код и предоставляет готовый интерфейс для клиент-серверного приложения. Устанавливаем шаблон приложение как описано в инструкции. Затем переходим в модуль Студия для создания метаданных. Метаданные приложения Первым делом создаем класс Сущность (entity). Это основной элемен
Оглавление

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

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

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

Создавать экспертную систему будем на декларативном фреймворке Evado, который избавляет от необходимости писать код и предоставляет готовый интерфейс для клиент-серверного приложения. Устанавливаем шаблон приложение как описано в инструкции. Затем переходим в модуль Студия для создания метаданных.

Метаданные приложения

Первым делом создаем класс Сущность (entity). Это основной элемент базы знаний, который будет целью решения нашей экспертной системы. Добавляем атрибуты класса - Название (name) и Изображение (picture).

Метаданные экспертной системы
Метаданные экспертной системы

Сущности различаются между собой не только названием, но и, главное, свойствами. Для описания свойств создаем класс Свойство (attribute) и добавляем к нему строковый атрибут Название (name).

Теперь возвращаемся в класс Сущность и создаем ссылочный атрибут Свойства (attributes), который будет хранить ссылки на все свойства, относящиеся к сущности.

Переходим в класс Свойство и создаем обратную ссылку на Сущности (entities). Обратная ссылка не хранится в базе, а вычисляется по заданной связи. В данном случае можно будет получить все сущности, которые имеют данное свойство.

Создаем класс Вопрос (question). Добавляем логический атрибут Активный (active), позволяющий включать/исключать вопрос из системы без необходимости его удаления. Добавляем строковый атрибут Текст (text) для содержимого вопроса.

Далее создаем класс Ответ (answer). Добавляем строковый атрибут Текст (text) для содержимого ответа. Добавляем ссылочный атрибут Свойства (attributes), который будет содержать ссылки на свойства сущностей, соответствующие данному ответу. Например, вопрос «Что ест животное?» имеет два ответа - Мясо и Растения. Ответ «Мясо» ссылается на свойство «Плотоядное», а ответ «Растения» на свойство «Травоядное».

Добавляем логический атрибут Исключение (except), который изменяет значение списка свойств. Ответ с исключением подразумевает, что ему соответствуют все свойства, кроме указанных в списке.

Переходим в класс Вопрос и создаем ссылочный атрибут Ответы (answers) для списка допустимых ответов на вопрос. Кроме того, чтобы иметь возможность выбрать сразу несколько ответов, создаем логический атрибут Множественный (multiple).

Метаданные созданы. Экспортируем их в приложение.

Наполнение данными

Переходим в модуль Офис и создаем сущности и их свойства. Например, сущность «Жираф» имеет свойства - «Большое», «Травоядное» и «Наземное», а сущность «Лев» имеет свойства - «Большое», «Плотоядное» и тому подобное.

Одно свойство может принадлежать сразу нескольким сущностям
Одно свойство может принадлежать сразу нескольким сущностям

Далее создаем вопросы и ответы. Например, вопрос «Чем питается животное» содержит ответы «Мясо» и «Растения». Кроме того, установлен флажок Множественный для выбора нескольких ответов сразу (животное может быть всеядным). Ответ «Мясо» ссылается на свойство «Плотоядное», а ответ «Растения» на свойство «Травоядное».

Чем полнее вопросы и ответы будут покрывать сущности и свойства, тем точнее и быстрее будет происходить выбор решения системы.

Взаимодействие с пользователем

Пользователь должен получать вопросы от системы, возвращать ответы и, в конечном итоге, получить результат - подходящую сущность (сущности) или отсутствие таковой. Для этого нужно расширить текущий серверный API фреймворка несколькими функциями.

Определяем в конфигурации приложения пользовательский модуль api/base, который наследует функционал модуля фреймворка. Добавляем в него контроллер ExpertController, который наследует функционал базового контроллера.

Метод actionFirstQuestion возвращает случайный первый вопрос.

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

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

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

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