Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
Новгородский государственный университет имени Ярослава Мудрого
Институт электронных и информационных систем
Кафедра информационных технологий и систем
«Создание системы накопления знаний. Исследование системы накопления знаний»
Лабораторная работа по дисциплине «Экспертные системы»
Отчет.
Принял:
_______ Михайлов Д.В.
«____» _________ 2012 г.
Выполнили:
студенты гр. 9311
_______Дроздов К.А.
_______Спиридонов М.В.
_______Гусева М.С.
«____» _________ 2012 г.
Великий Новгород
2012
Цель работы: приобрести умения и навыки реализации пополняемой базы знаний в динамической памяти ЭВМ. Приобрести навыки и умения в использовании созданной базы знаний при проведении экспертизы.
Задание:
1. Написать программу, обеспечивающую накопление знаний в базе знаний, реализованной списками взаимосвязанных записей (подсистема приобретения знаний), и отображение ее содержимого на экране монитора;
Преобразовать знания в виде суждений, полученных от эксперта
С использованием написанной программы реализовать полученные списки в памяти ЭВМ.
2. Написать программу обеспечивающую проведение экспертизы на основе информации хранящейся в созданной базе знаний.
Разработанная программа должна обеспечивать выполнение функций:
1)Ввод исходных данных
2)Обработка правил
3)Вывод заключения
Предметная область:
Категория
Характеристика |
Legkovaya |
Gonochnaya |
Sportivnaya |
Простота эксплуатации
|
+ |
- |
- |
Приемлимая стоимость
|
+ |
- |
- |
Продвинутый тюнинг
|
- |
+ |
- |
Небольшой вес |
- |
+ |
- |
Мощность двигателя 350 л.с. |
- |
- |
+ |
Гиперкар |
- |
- |
+ |
Также каждая машина имеет свои собственные особенности, благодаря которым она стала известной:
Legkovaya:
Renault Duster |
4х4
|
Renault Latitude |
Седан бизнес класса |
Renault Logan |
5 лет гарантии
|
Renault Fluence |
кредит на 2 года |
Gonochnaya:
Kepler Motion |
Ограниченное производство
|
BMW 335i |
Продвинутый тюнинг
|
BMW M3 |
Небольшой вес |
|
|
Sportivnaya:
Honda Integra |
Производитель Honda Motor Company
|
Mercedes-Benz SLR McLaren |
Гиперкар |
|
|
|
|
Пример знаний: в результате работы и ввода в систему накопленных знаний мы получили следующую структуру:
Пример:
Legkovaya? – Нет
Gonochnaya? - Нет
Sportivnaya? – Да
Мощность двигателя 350 л.с.? – Нет
Гиперкар? – Да
Результат – «Mercedes-Benz SLR McLaren»
Ещё, в ходе работы, программа пополняет систему знаний.
Листинг программы:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace ES2lab
{
public partial class Form_main : Form
{
public string[,] arrayNameAndSign = new string[100, 2];
public int counterItem = 0;
public int k = 0;
public string[] arrCategory = new string[100];
public string[,] arrayNnS = new string[1000, 2];
public int cI;
public int z = 0;
public Form_main()
{
InitializeComponent();
int cCI = 0;
string newCCC = null;
StreamReader searchC = new StreamReader("d:\\category.txt");
while ((newCCC = searchC.ReadLine()) != null)
{
arrCategory[cCI] = newCCC;
cCI++;
}
searchC.Close();
//for (int i = 0; i < cCI; i++)
//{
// int counter = 0;
// string newNS = null;
// StreamReader searchQ = new StreamReader("d:\\" + arrCategory[i] + ".txt");
// {
// do
// {
// newNS = searchQ.ReadLine();
// if (newNS != null)
// {
// string[] buf = newNS.Split(':');
// for (int ii = 0; ii <= 1; ii++)
// {
// arrayNnS[counter, ii] = buf[ii];
// }
// //comboBox_editName.Items.Add(arrayNameAndSign[counter, 0]);
// counter++;
// }
// }
// while (newNS != null);
// cI++;
// }
// searchQ.Close();
//}
}
//------------------------------------------------------------------------------------------------------------------------------
//poisk ------------------------------------------------------------------------------------------------------------------------
private void button_search_Click(object sender, EventArgs e)
{
panel_add.Enabled = false;
panel_search.Enabled = true;
panel_edit.Enabled = false;
button_search.Enabled = false;
button_addNew.Enabled = true;
button_edit.Enabled = true;
}
private void button_again_Click(object sender, EventArgs e)
{
textBox_searchResult.Text = null;
label_searchSign.Text = null;
cI = 0;
z = 0;
}
private void button_yes_Click(object sender, EventArgs e)
{
cI++;
}
private void button_no_Click(object sender, EventArgs e)
{
cI++;
}
//------------------------------------------------------------------------------------------------------------------------------
// dpbavlenie novogo -----------------------------------------------------------------------------------------------------------
private void button_addNew_Click(object sender, EventArgs e)
{
panel_search.Enabled = false;
panel_add.Enabled = true;
panel_edit.Enabled = false;
button_addNew.Enabled = false;
button_search.Enabled = true;
button_edit.Enabled = true;
}
private void button_add_Click(object sender, EventArgs e)
{
StreamWriter writerNew = new StreamWriter("d:\\" + comboBox_categoryAdd.Text + ".txt", true);
writerNew.WriteLine("");
writerNew.Write(textBox_nameAdd.Text + ":" + textBox_signAdd.Text);
writerNew.Close();
textBox_signAdd.Text = null;
textBox_nameAdd.Text = null;
}
//------------------------------------------------------------------------------------------------------------------------------
//redaktirovanie ---------------------------------------------------------------------------------------------------------------
private void button_edit_Click(object sender, EventArgs e)
{
panel_search.Enabled = false;
panel_add.Enabled = false;
panel_edit.Enabled = true;
button_addNew.Enabled = true;
button_search.Enabled = true;
button_edit.Enabled = false;
comboBox_editName.Enabled = false;
int counter = 0;
string newCategoryComboBoxAddItem = null;
StreamReader categoryComboBoxAdd = new StreamReader("d:\\category.txt");
while ((newCategoryComboBoxAddItem = categoryComboBoxAdd.ReadLine()) != null)
{
comboBox_editCategory.Items.Add(newCategoryComboBoxAddItem);
counter++;
}
categoryComboBoxAdd.Close();
}
private void button_editCategoryOk_Click(object sender, EventArgs e)
{
comboBox_editCategory.Enabled = false;
comboBox_editName.Enabled = true;
int counter = 0;
string newNameComboBoxAddItem = null;
StreamReader categoryComboBoxAdd = new StreamReader("d:\\" + comboBox_editCategory.Text + ".txt");
////string bb = categoryComboBoxAdd.ReadLine();
do
{
//string b = categoryComboBoxAdd.ReadLine();
newNameComboBoxAddItem = categoryComboBoxAdd.ReadLine();
if (newNameComboBoxAddItem != null)
{
string[] buf = newNameComboBoxAddItem.Split(':');
for (int i = 0; i <= 1; i++)
{
arrayNameAndSign[counter, i] = buf[i];
}
comboBox_editName.Items.Add(arrayNameAndSign[counter, 0]);
counter++;
}
//newNameComboBoxAddItem = categoryComboBoxAdd.ReadLine();//
}
////while ((newNameComboBoxAddItem = categoryComboBoxAdd.ReadLine()) != null);
while (newNameComboBoxAddItem != null);
counterItem = counter;
categoryComboBoxAdd.Close();
}
private void button_editNameOk_Click(object sender, EventArgs e)
{
//comboBox_editName.Enabled = false;
for (int i = 0; i < counterItem; i++)
{
if (comboBox_editName.Text == arrayNameAndSign[i, 0])
{
textBox_editSign.Text = arrayNameAndSign[i, 1];
k = i;
}
}
}
private void button_editUse_Click(object sender, EventArgs e)
{
if ((comboBox_editName.Text != null) & (comboBox_editCategory.Text != null) & (textBox_editSign.Text != null))
{
comboBox_editCategory.Enabled = true;
comboBox_editName.Enabled = false;
comboBox_editName.Items.Clear();
comboBox_editName.Text = null;
arrayNameAndSign[k, 1] = textBox_editSign.Text;
textBox_editSign.Text = null;
StreamWriter Edit = new StreamWriter("d:\\" + comboBox_editCategory.Text + ".txt", false);
Edit.Write("");
Edit.Close();
StreamWriter saveEdit = new StreamWriter("d:\\" + comboBox_editCategory.Text + ".txt", true);
saveEdit.Write(arrayNameAndSign[0, 0] + ":" + arrayNameAndSign[0, 1]);
for (int i = 1; i < counterItem; i++)
{
saveEdit.WriteLine("");
saveEdit.Write(arrayNameAndSign[i, 0] + ":" + arrayNameAndSign[i, 1]);
}
saveEdit.Close();
}
}
//------------------------------------------------------------------------------------------------------------------------------
}
}
Вывод: В ходе лабораторной работы мы изучили методы накопления знаний и программно реализовали программу для накопления знаний.
Была разработана программа для экспертизы в нашей предметной области и для вывода заключения на основе вводимых данных.