1.5. Контрольные вопросы к Лабораторной работе № 1
Как можно организовать интерфейс пользователя?
Что необходимо учесть при построении интерфейса?
Каким требованиям должен удовлетворять интерфейс пользователя?
Как организовать работу Экспертной системы, чтобы учесть ответы пользователя на вопросы ЭС?
Что значит «удобный» интерфейс пользователя?
Приложение к лабораторной работе №1
Пример кода:
public class BinaryTree {
private BinaryTree parent;
private BinaryTree yes;
private BinaryTree no;
private String question;
private String answer;
private boolean isEnd;
public BinaryTree(BinaryTree parent) {
this.parent = parent;
}
public BinaryTree setQuestion(String question) {
this.question = question;
return this;
}
public String getQuestion() {
return question;
}
public BinaryTree getParent() {
return parent;
}
public BinaryTree setAnswer(String answer) {
this.answer = answer;
setEnd();
return this;
}
public String getAnswer() {
return answer;
}
public BinaryTree getYes() {
if (isEnd) return null;
if (yes == null) {
yes = new BinaryTree(this);
}
return yes;
}
public BinaryTree getNo() {
if (isEnd) return null;
if (no == null) {
no = new BinaryTree(this);
}
return no;
}
public boolean isEnd() {
return isEnd;
}
private void setEnd() {
this.isEnd = true;
}
public void setNo(BinaryTree no) {
this.no = no;
}
public void setYes(BinaryTree yes) {
this.yes = yes;
}
}
Ядро экспертной системы, находиться в классе ExpertSysyem, в которой реализована рекурсивная функция обхода бинарного дерева:
public static void start(BinaryTree db)
throws IOException {
if(db.isEnd()) {
System.out.println(db.getAnswer());
System.out.println("Объяснить почему ЭС пришла к такому выводу?");
if(readBoolean()) {
stack.clear();
why(db);
for (String el : stack) {
System.out.println(el);
}
}
return;
}
System.out.println(db.getQuestion());
if(readBoolean()) start(db.getYes());
else start(db.getNo());
}
Данный метод производит проход в глубину, и идет от корневого узла, до конечного листа. В узлах находится вопросы, метод выводит вопрос и в зависимости от ответа пользователя производиться переход к следующему узлу, и так происходит до тех пор, пока не дойдет до листа, в котором хранится вывод. Также существует метод why (почему) это обратный рекурсивный метод, который идет от узла или листа, к корню дерева, и выводит на экран то, как ЭС, работала с пользователем. База знаний статическая, времени на реализацию динамической БД не было, но при желании вы можете добавить класс отвечающий за загрузку/выгрузку ЭС, и добавление новых правил и выводов в ее структуру. База знаний представлена следующим образом:
BinaryTree db = new BinaryTree(null);
db.setQuestion("Работает ПК?");
db.getYes().setAnswer("Вам не нужны услуги экспертной системы");
db.getNo().setQuestion("ПК включается?");
db.getNo().getNo().setQuestion("Свет есть?");
db.getNo().getNo().getYes().setAnswer("Поломался блок питания");
db.getNo().getNo().getNo().setAnswer("Включите свет");
db.getNo().getYes().setQuestion("Изображение есть на мониторе?");
db.getNo().getYes().getNo().setQuestion("Монитор подключен к сети?");
db.getNo().getYes().getNo().getNo().setAnswer("Подключите монитор");
db.getNo().getYes().getNo().getYes()
.setQuestion("Индикатор горит на мониторе");
db.getNo().getYes().getNo().getYes().getNo()
.setAnswer("Не работает монитор");
db.getNo().getYes().getNo().getYes().getYes()
.setAnswer("Не работает видеокарта");
db.getNo().getYes().getYes().setQuestion("Писк есть?");
db.getNo().getYes().getYes().getYes()
.setAnswer("Используйте руководство по пискам BIOS");
db.getNo().getYes().getYes().getNo().setQuestion("Загружаеться ОС?");
db.getNo().getYes().getYes().getNo().getNo()
.setQuestion("Есть сообщения об ошибках?");
db.getNo().getYes().getYes().getNo().getNo().getYes()
.setAnswer("Следуйте сообщениям об ошибках");
db.getNo().getYes().getYes().getNo().getNo().getNo()
.setAnswer("Не знаю");
db.getNo().getYes().getYes().getNo().getYes()
.setQuestion("При входе в ОС есть звук?");
db.getNo().getYes().getYes().getNo().getYes().getYes()
.setQuestion("Система загрузилась без ошибок");
db.getNo().getYes().getYes().getNo().getYes().getYes().getYes()
.setAnswer("Следуйте рекомендациям ОС");
db.getNo().getYes().getYes().getNo().getYes().getYes().getNo()
.setAnswer("Приятной работы");
db.getNo().getYes().getYes().getNo().getYes().getNo()
.setQuestion("У вас есть звуковая карта?");
db.getNo().getYes().getYes().getNo().getYes().getNo().getYes()
.setAnswer("Не работает звуковая карта");
db.getNo().getYes().getYes().getNo().getYes().getNo()
.setNo(db.getNo().getYes().getYes().getNo().getYes().getYes());
- Аннотация
- Содержание
- Постановка задачи
- Требования к теоретической части
- Требования к практической части
- 1. Системный анализ предметной области
- 1.1 Основные понятия
- 1.2 Принципы создания электронных курсов
- 1.3 Описание программных и языковых средств разработки
- 1.4 Описание среды BlackBoard Learn
- 1.5 Описание языка программирования Java
- 1.6 Описание языка программирования JavaScript
- 1.7 Описание объектной модели браузераMsInternetExplorer
- 2. Экспертные системы
- 2.1 Назначение экспертных систем
- 2.2 Структура экспертных систем
- 2.3 Этапы разработки экспертных систем
- 2.4 Преимущества экспертных систем
- 2.5. Особенности экспертных систем
- 2.6 Области применения экспертных систем
- 3.Проектирование компьюторной обучающей системы «экспертные системы» в среду blackboard
- 3.1 Технология создания кос «Экспертные системы»
- 3.2 Технология загрузки теста кос «Экспертные системы»
- 4. Руководство пользователя
- 4.1 Аппаратно технические требования
- 4.1.1 Минимальная аппаратная комплектация компьютера
- 4.1.2 Поддерживаемые операционные системы
- 4.1.3 Требования к совместимости с веб-браузерами
- Приложение Лабораторная работа № 1 Создание интерфейса эс
- 1.1. Краткие общие сведения по созданию Интерфейса пользователя
- 1.2. Организация диалога пользователя с эс
- 1.3. Реализация работы решателя в соответствии с ответами пользователя
- 1.4. Порядок проведения Лабораторной работы № 2
- 1.5. Контрольные вопросы к Лабораторной работе № 1
- Заключение
- Литература