Файл: Курсовая работа по дисциплине Основы искусственного интеллекта.docx
Добавлен: 25.10.2023
Просмотров: 51
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Средства создания и ведения БД должны предоставлять следующие возможности: объединять различные источники данных, используя процедуры извлечения информации; легко и быстро добавлять и исключать источники данных; представлять логическую структуру данных в терминах пользователя; иметь полный набор функций управления данными.
Важной особенностью СППР является их способность формировать модели для принятия решений. Предполагается, что в БМ следует встраивать не локальные модели, а модели, объединенные с БД. Процедуры моделирования должны обеспечивать гибкость построения моделей, в частности, из готовых блоков, подпрограмм, а также легкость управления ими, а система управления — возможность каталогизировать и обслуживать широкий спектр моделей, поддерживающих все уровни управления; быстро и легко создавать новые модели; связывать эти модели с соответствующими БД; управлять БМ с помощью функций управления.
Добавление дополнительных компонентов расширяет информационную базу СППР как в сторону использования менее структурированных видов информации (тексты на естественном языке, индексированные документы), так и в сторону более структурированных форм информации (правила представления декларативных знаний, эвристические процедуры).
Усложнение информационной структуры СППР по мере перехода от базы текстов через БД и БМ к базе правил обеспечивает возможность эволюционного развития системы как при изменении когнитивного стиля и информационных потребностей пользователя, так и при изменении проблемной области. Пока эта эволюция осуществляется "вручную" в процессе проектирования СППР. Настоящая эволюция начнет происходить тогда, когда система сможет автоматически распознавать и формировать "эволюционирующие" связи между компонентами СППР, обеспечивающие динамичный обмен информацией в процессе информационной поддержки.
Особенности СППР, связанные с необходимостью использования различных источников информации, моделей и методов при решении слабоструктурированных проблем, привлекли внимание исследователей и разработчиков к вопросам представления знаний в системе, которые традиционно изучались специалистами в области искусственного интеллекта. Основные достижения в этой области принято связывать с построением методов и средств для анализа изображений, распознавания речи, созданием экспертных систем.
ЭС и СППР как конкретные программные продукты в ряде случаев могут выглядеть внешне одинаково. Однако они имеют существенное различие в своей целевой направленности: СППР призвана помочь ЛПР в решении стоящей перед ним проблемы, а ЭС - заменить человека при решении проблемы. Вместе с тем разрабатываемые в рамках искусственного интеллекта концепции могут оказаться плодотворными и для СППР.
Отличительной особенностью СППР, основанных на знаниях (knowledge-based systems), является, по мнению их создателей, явное выделение отсутствовавшего ранее аспекта поддержки решений: способности к "пониманию" проблемы, т. е. способности воспринять запрос пользователя, извлечь информацию и подготовить ответ. Степень участия программных средств человеко-машинной системы в этом процессе предлагается рассматривать в качестве грубой меры (искусственного) интеллекта СППР.
Иногда структуру СППР представляют следующим образом:
1) система языковая (СЯ);
2) система знаний (СЗ);
3) система обработки проблем.
Система языковая по своему назначению аналогична интерфейсу "пользователь—система", который обеспечивает коммуникации между пользователем и всеми компонентами СППР. С помощью системы языковой пользователь формулирует проблему и управляет процессом ее решения, используя предоставляемые системой языковые средства (синтаксические, семантические).
Система знаний содержит информацию о проблемной области. Системы знаний различаются по характеру содержащихся в них данных и по используемым методам представления знаний (иерархические структуры, семантические сети, фреймы, системы продукций, исчисление предикатов и др.). Определенная организация данных в соответствии с целями системы является ключевым моментом в построении системы знаний.
Система обработки проблем или проблемный процесс (ПП) является механизмом, связывающим систему языковую и систему знаний. Система обработки проблем обеспечивает сбор информации, распознавание проблемы, формулировку модели, ее анализ и т. д. Она воспринимает описание проблемы, сделанное в соответствии с синтаксисом системы языковой, и использует знания, организованные по принятым в системе знаний правилам, для того чтобы создать информацию, необходимую для поддержки решения. Система обработки проблем является динамичной компонентой СППР, отражающей (моделирующей) образцы поведения человека, решающего проблему. Как минимум, система обработки проблем должен обладать способностями объединять информацию, получаемую от пользователя через систему языковую и систему знаний, и, используя модели, преобразовывать формулировку проблемы в детальные процедуры, выполнение которых даст ответ. В более сложных случаях система обработки проблем должна уметь формулировать модели, необходимые для решения поставленной проблемы. Таким образом, система обработки проблем выполняет функции блоков анализа проблем и принятия решений.
Составляющие процесса принятия решения:
1) сбор данных;
2) распознавание проблемы;
3) формулировка концептуальной модели;
4) формулировка эмпирической модели;
5) верификация;
6) анализ;
7) поиск допустимых решений;
8) проверка правильности (обоснованности) решения;
9) генерация решения;
10) выполнение.
Использование этих составляющих в процедуре принятия решений зависит от типа проблемы и модельного цикла. В случае хорошо структурированных проблем исключаются стадии 2, 8 и 9. При нормативном аксиоматическом подходе используются только стадии 3, 7 и 9. В схеме главную роль играют стадии 1, 4 и 7.
1.2 Байесовская стратегия логического вывода
Рассмотрим случай, когда все правила в системе отражаются в форме: Если < H является истинной > То
Очевидно, если H произошло, то это правило говорит о том, что событие E происходит с вероятностью p. Но что будет, если состояние H неизвестно, а E произошло? Использование теоремы Байеса позволяет вычислить вероятность того, что H истинно. В этом контексте: H - событие, заключающееся в том, что данная гипотеза верна; E - событие, заключающееся в том, что наступило определённое доказательство (свидетельство), которое может подтвердить правильность указанной гипотезы.
Записав формулу Байеса в терминах гипотез и свидетельств, получим:
,
где p(H / E) - апостериорная вероятность гипотез H по наблюдениям E; p(H) - априорные вероятности всех возможных гипотез; p(E / H) - условные вероятности возникновения свидетельств при условии существования каждой из гипотез.
Это равенство устанавливает связь гипотезы со свидетельством и, в то же время, наблюдаемого свидетельства с пока ещё не подтверждённой гипотезой. Эта интерпретация предполагает также определение априорной вероятности гипотезы p(H), назначаемой H до наблюдения или получения некоторого факта.
Рассмотрим пример разработки программной оболочки ЭС, использующей байесовскую систему логического вывода на основе метода Криса-Нейлора.
Его суть состоит в нахождении способа, с помощью которого можно получить исходя из априорных вероятностей каких-либо гипотез и фактов апостериорные вероятности этих гипотез, зависящих от того, какие именно факты утверждаются для данной гипотезы. Эта вероятность может быть очень малой, она может оказаться на самом деле нулевой. Но это не помешает вести вычисления так, как если бы существовала некоторая вероятность.
На каждом шаге пересчитываются вероятности всех гипотез для какого-либо свидетельства гипотезы Е по формулам (5,6):
где P(H/E) - апостериорная вероятность гипотезы Н, определяемая с учетом того, что имеет место свидетельство E;
P(неH/E) - апостериорная вероятность отрицания гипотезы Н при условии, что имеет место свидетельство Е.
Для каждой целевой гипотезы значение апостериорной вероятности пересчитывается с учетом того, что полученный от пользователя ответ Q имеет градацию от -5 до +5 с шагом 1, в которой +5 означает «Да», -5 означает «Нет», а 0 – «Не знаю». Все остальные варианты ответа будут располагаться в промежуточных точках шкалы. Градация ответов может быть изменена по желанию экспертов, например, от -3 до 3. В результате к текущей апостериорной вероятности добавляется поправка:
где Q[j] принадлежит [a1, a2] = [-5, +5].
После того, как пользователь выставит цену Q, делается пересчет вероятностей для всех гипотез, в которых упоминалось это свидетельство. Итоговое выражение апостериорной вероятности будет иметь вид:
(8)
где .
2 Анализ аналогов
В ходе работы, был произведён поиск и анализ систем, представляющих собой оболочки ЭС.
Программа «Малая Экспертная Система 2.0» представляет из себя простую оболочку экспертной системы, на основе байесовской системы логического вывода. Оболочка предназначена для проведения консультации с пользователем в какой-либо прикладной области с целью определения вероятностей возможных исходов и использует для этих целей оценку правдоподобности некоторых предпосылок, которые система получает от пользователя.
Одним из основных достоинств этой программы является возможность создания, редактирования и изменения базы знаний, созданной самим пользователем. Для этого можно использовать «Редактор баз знаний», поставляемый совместно с «Малой Экспертной Системой».
Ниже представлена экранная форма программы «Малая Экспертная Система 2.0» (рисунок 1).
Рисунок 1 - Окно программы «Малая Экспертная Система 2.0»
Программа «Малая Экспертная Система v2.0» характеризуется следующими свойствами:
-
удобный интерфейс; -
наличие «горячих» клавиш; -
настройка различных параметров интерфейса; -
возможность отключения обработки выбранных свидетельств; -
возможность сохранения, загрузки и автозагрузки конфигурации; -
наличие двух способов ввода ответа пользователя, различных с математической точки зрения; -
возможность отмены любых введённых ответов; -
регистрация в операционной системе типа файлов «.mkb» (базы знаний); -
работа с зашифрованными базами знаний; -
наличие специального редактора баз знаний; -
наличие сугубо прикладной базы знаний по микроорганизмам.
-
Обоснование выбора программных средств разработки
Разработка программного средства производилась в среде Microsoft Visual Studio 2022 с использованием языка C#.
C# — простой, современный, объектно-ориентированный язык с
безопасной системой типов, происходящий от Си и Си++. Си# будет удобен и
понятен для программистов, знающих Си и Си++. Си# сочетает
продуктивность Visual Basic и мощность Си++. C# - язык программирования, сочетающий в себе объектно-ориентированные и контекстно-ориентированные концепции. Разработан как основной язык разработки приложений для платформы Microsoft .NET. Синтаксис и возможности языка C# позволяют достаточно быстро разрабатывать программы.
В качестве среды разработки была выбрана Microsoft Visual Studio 2019.
Это одна из самых надежных и функциональных IDE, является бесплатной, и
имеет такие функции, как:
-
Интеллектуальное автодополнение кода; -
Удобный и простой в использовании дизайнер графических форм (Win
Forms);
-
Простая в использовании навигационная система.
-
Руководство по эксплуатации программного средства
-
Требования к системным ресурсам
Для работы ПП используется персональный компьютер, удовлетворяющий следующим системным требованиям:
Системные и программные требования:
-
Процессор Intel Core 2 Duo или аналогичный ему процессор AMD с минимальной тактовой частотой 500MHz; -
свободное место на жестком диске не менее 1 Мб; -
объем оперативного запоминающего устройства не менее 32 Мб.
-
Язык: C#, Microsoft .NET Framework 4.7; -
Прикладная программа ОС: Windows 8.1/10;
Объем программы: 1Мб.
-
Руководство пользователя
Запуск программы осуществляется путем запуска программы «start.exe». При запуске программа выведет на экран следующее окно (рисунок 2).
Рисунок 2 – Главное окно программы
В верхней части главного окна программы располагается меню работы с данной программной системой. Для того, чтобы загрузить данные, нужно выбрать пункт меню «Загрузить», в появившемся окне ввести путь до папки, в которой хранятся файлы базы знаний и нажать кнопку «Загрузить» (рисунок 3).
Рисунок 3 – Выбор базы знаний
База знаний должна быть сформирована в редакторе баз знаний. Чтобы воспользоваться им, нужно выбрать пункт меню "Редактор" (рисунок 4).
Рисунок 4 – Редактор
При выборе пункта меню «Инфо», откроется окно (рисунок 5), в котором описано, как правильно заполнять поля редактора, загружать и сохранять базы знаний.
Рисунок 5 - Инфо
Оконные формы работы
Основное окно программы при загруженной базе знаний и начатой консультации представлено на рисунке 6.
Рисунок 6 – Основное окно программы при начатой консультации
Пример трассировки решения текущего шага консультации приведен на рисунке 7.
Рисунок 7 – Трассировка
Заключение
В результате выполненных исследований разработана оболочка ЭС, которая позволяет разрабатывать и редактировать базу знаний.
Разработанная в ходе выполнения курсового проекта оболочка для экспертной системы является актуальной на сегодняшний день, так как предоставляет большие возможности в различных предметных областях. Созданная в данной оболочке экспертная система может помочь при принятии решений в сложных ситуациях, например при диагностике заболеваний, проектировании микросхем, управлении сложными объектами (энергосистемами, атомными электростанциями и т. п.), идентификации неисправностей в электронных схемах, при решении задач оптимального размещения финансовых средств и т.д.
Список использованных источников
1 Семенов, А.М. Интеллектуальные системы [Текст] : учебное пособие для студентов, обучающихся по программам высшего профессионального образова-ния по направлениям подготовки 230100.68 Информатика и вычислительная тех-ника, 231000.68 Программная инженерия / А. М. Семенов, Н. А. Cоловьев, Е. Н. Чернопрудова, А. С. Цыганков; М-во образования и науки Рос. Федерации, Фе-дер. гос. бюджет. образоват. учреждение высш. проф. образования "Оренбург. гос. ун-т". - Оренбург : ОГИМ, 2014. - 237 с. - Библиогр.: с. 218-221. - Прил.: с. 222-236. - ISBN 978-5-9723-0158-4. Издание на др.носителе [Электронный ресурс]
2 Семенов, А.М. Интеллектуальные системы [Электронный ресурс] : учеб-ное пособие для студентов, обучающихся по программам высшего профессио-нального образования по направлениям подготовки 230100.68 Информатика и вычислительная техника, 231000.68 Программная инженерия / А. М. Семенов [и др.]; М-во образования и науки Рос. Федерации, Федер. гос. бюджет. образоват. учреждение высш. проф. образования "Оренбург. гос. ун-т". - Электрон. тексто-вые дан. (1 файл: 3.85 Мб). - Оренбург : ОГУ, 2013. - 236 с. - Загл. с тит. экрана. -Adobe Acrobat Reader 6.0-ISBN978-5-9723-0158-4.. Издание на др. носите-ле [Текст]
3 Барсегян, А. А. Анализ данных и процессов: учеб. пособие / А. А. Барсе-гян, М. С. Куприянов, И. И. Холод, М. Д. Тесс, С. И. Елизаров. - 3-е изд., пе-рераб. и доп. - СПб.: БХВ-Петербург, 2009.- 512 с. Режим доступа: http://znanium.com/catalog/product/350638
4 Quinlan, J. R., (1986). Induction of Decision Trees. Machine Learning 1: 81-106, Kluwer Academic Publishers
5 Ананий В. Левитин Глава 10. Ограничения мощи алгоритмов: Деревья принятия решения // Алгоритмы: введение в разработку и анализ = Introduction to The Design and Analysis of Aigorithms. — М.: «Вильямс», 2006. — С. 409-417.
6 Павловская,Т.С. C#. Программирование на языке высокого уровня / Т.С.Павловская. — СПб.: Питер, 2009. — 432 с.
7 Нейлор К., Как построить свою экспертную систему: Пер. с англ./ К. Нейлор. - М.: Энергоатомиздат, 1991. - 286 с.: ил.
Приложение А
(обязательное)
Частичный листинг программы
namespace OII
{
public partial class Form1 : Form
{
public string directoryname = null;
int q_number = -1;
double[,] yes = null;
double[,] no = null;
string[] text = null;
int text_number = 0;
public Form1()
{
InitializeComponent();
}
private void РедакторToolStripMenuItem_Click(object sender, EventArgs e)
{
new Form2(this).Show();
}
private int read_yes_no_table(ref double[,] yes, ref double[,] no, int question, int answer) //P(E|H) и P(E|неH)
{
string[] p = null;
p = read_string(p, richTextBox6);
yes = new double[answer, question]; //P(E|H)
no = new double[answer, question]; //P(E|неH)
int space = -1; //положение пробела
for (int i = 0; i < p.Length; i++)
{
for (int j = 0; j < question; j++)
{
space = p[i].IndexOf(' ');
p[i] = p[i].Substring(space + 1);
if (divide(i, j, ref p, ref yes) == -1) return -1;
if (divide(i, j, ref p, ref no) == -1) return -1;
}
}
}
public void load()
{
directoryname = null;
Form3 f3 = new Form3(this, "Загрузить", true);
f3.ShowDialog(); //вызвали форму
send_question();
text = new string[richTextBox2.Lines.Count() * richTextBox3.Lines.Count()];
read_yes_no_table(ref yes, ref no, richTextBox2.Lines.Count(), richTextBox3.Lines.Count());
}
public void ЗагрузитьToolStripMenuItem_Click(object sender, EventArgs e)
{
load();
}
return 0;
}
private void button1_Click(object sender, EventArgs e)
{
if (q_number <= richTextBox2.Lines.Count() - 1)
{
text[text_number] = richTextBox4.Text + "\n Ответ пользователя: " + Convert.ToDouble(trackBar1.Value) + "\n\n";
double phe = 0, pneh = 0, pq = 0;
string[] phq = new string[richTextBox5.Lines.Count()];
for (int i = 0; i < richTextBox3.Lines.Count(); i++)
{
text[text_number] += "Вариант " + richTextBox3.Lines[i] + "\n";
phe = Phe(i);
text[text_number] += "P(H|E)=" + Convert.ToString(phe) + "\n";
pneh = Pneh(i);
text[text_number] += "P(неH|E)=" + Convert.ToString(pneh) + "\n";
pq = Pq(Convert.ToDouble(trackBar1.Value), -3, 3);
phq[i] = Convert.ToString(phe * pq + pneh * (1 - pq));
text[text_number] += "P(H|Q)=" + phq[i] + "\n\n";
}
richTextBox5.Lines = phq;
send_question();
text_number++;
}
else
{
MessageBox.Show("Консультация закончена");
return;
}
}
private string[] read_string(string[] mas, RichTextBox text)
{
int length = text.Lines.Count();
mas = new string[length];
for (int i = 0; i < length; i++)
try
{
mas[i] = text.Lines[i];
}
catch
{
MessageBox.Show("Ошибка в базе знаний");
return null;
}
return mas;
}
private int divide(int i, int j, ref string[] answers, ref double[,] table)
{
int space = answers[i].IndexOf(' '
try
{
string p = "";
if (space != -1) p = answers[i].Remove(space);
else p = answers[i];
table[i, j] = Convert.ToDouble(p);
answers[i] = answers[i].Substring(space + 1);
}
catch
{
MessageBox.Show("Ошибка в заполнении вероятностей");
return -1;
}
return 0;
}
private void send_question()
{
q_number++;
if (q_number >= richTextBox2.Lines.Count())
//q_number = 0;
return;
richTextBox4.Text = richTextBox2.Lines[q_number];
}
private double Phe(int i)
{
double ph = Convert.ToDouble(richTextBox5.Lines[i]);
double peh = yes[i, q_number];
double peneh = no[i, q_number];
double phe = (peh * ph) / ((peh * ph) + (peneh * (1 - ph)));
label1.Text = phe.ToString();
return phe;
}
private double Pneh(int i)
{
double ph = Convert.ToDouble(richTextBox5.Lines[i]);
double peh = yes[i, q_number];
double peneh = no[i, q_number];
double phe = ((1 - peh) * ph) / (((1 - peh) * ph) + ((1 - peneh) * (1 - ph)));
}
private double Pq(double q, int a1, int a2)
{
double pq = (q - a1) / (a2 - a1);
return pq;
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox5.Text = File.ReadAllText(directoryname + @"\p.txt");
q_number = -1;
send_question();
text = null;
text_number = 0;
text = new string[richTextBox2.Lines.Count() * richTextBox3.Lines.Count()];
}
private void трассировкаToolStripMenuItem_Click(object sender, EventArgs e)
{
Form4 f = new Form4(text);
f.Show();
}
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (q_number <= richTextBox2.Lines.Count() - 1)
{
MessageBox.Show("Консультация еще не окончена");
}
else
{
string file = "";
Form3 f3 = new Form3(this, "Введите имя сохраняемого файла", "Сохранить", false); //описание действия и название кнопки в форме
f3.ShowDialog();
file = f3.name + ".txt";
System.IO.File.WriteAllLines(@file, text);
}
}
private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
{
// new Form6().Show();
}
private void button1_Click(object sender, EventArgs e)
{
string text = richTextBox1.Text;
MessageBox.Show(text);
SaveFileDialog open = new SaveFileDialog();
// открываем окно сохранения
open.ShowDialog();
// присваниваем строке путь из открытого нами окна
string path = open.FileName;
try{
using(FileStream fs = File.Create(path))
{
byte[] info = new UTF8Encoding(true).GetBytes(text);
fs.Write(info, 0, info.Length);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
Приложение Б
(обязательное)
Архитектура программного средства
Рисунок Б.1 – Архитектура программного средства
Приложение В
(обязательное)
Укрупненная схема алгоритма
Рисунок В.1 – Укрупненная схема алгоритма