Автор работы: Пользователь скрыл имя, 29 Мая 2012 в 23:13, практическая работа
Целью выполнения практической работы по курсу «Системы искусственного интеллекта» является написание программы экспертной системы для любой предметной области, близкой исполнителю.
Существуют различные способы предоставления знаний в экспертных системах и соответственно различные методы построения базы знаний и логического вывода.
Один из возможных методов работы с ненадёжной, неопределенной информацией основанный на применении теории вероятностей, называется байесовский.
Введение…………………………………………………………………………………………………………………………………………..……3
База знаний.……………………………………………………………………………………………………………………………………..……4
Описание предметной области……………………………………………………………………………………………………..……..4
Признаки и их значения………………………………………………………………………………………………………………………..4
Список вопросов …………………………………..………………………………………………………………………………………………4
Байесовский подход………………………………………………………………………………………………………………………………5
Расчёт вероятностей……………………………………………………………………………………………………………………………...5
Таблица вероятностей..………………………………………………………………………………………………………………………...6
Разработка Экспертной системы………………………………………………………………………………………………………...7
Взвешивание ответа пользователя..…………………………………………………………………………………………………..…8
Механизм логического вывода…………………………………………………………………………………………………………….9
Опыты……………..………...…………………………………………………………………………………………………………………………10
Заключение………………………………………………………………………………………………………………………………………….12
Список литературы………………
//для отмены
List<float[]> Otmena = new List<float[]>();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog adres = new OpenFileDialog();
adres.Filter = "База знаний (*.mkb)|*.mkb";
if (adres.ShowDialog() == DialogResult.OK)
{
fname = adres.FileName;
make();
Otmena.Clear();
}
}
public void make()
{
int i = 5;
try
{
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
checkBox1.Enabled = true;
listBox2.Items.Clear();
Array.Clear(yes, 0, 90 * 90);
Array.Clear(no, 0, 90 * 90);
Array.Clear(voprosi, 0, 90);
Array.Clear(ver, 0, 90);
Array.Clear(gipotez, 0, 90);
StreamReader reader = new StreamReader(fname, Encoding.GetEncoding(1251));
string[] kk = reader.ReadToEnd().Split(new Char[] { '\n' });
label1.ResetText();
label1.Text = kk[0] + kk[1] + kk[2];
//if (kk[4] != "Вопросы:\r") MessageBox.Show("База данных неверно составлена");
label6.Text = kk[4];
while (true)
{
if (kk[i] == "\r") break;
i += 1;
}
label2.ResetText();
label2.Text = "Количество вопросов: " + (i - 5);
for (int j = 0; j < i - 5; j++)
{
voprosi[j] = kk[j + 5];
}
vopr = i - 5;
i += 1;
ish = i;
while (true)
{
if (kk.Count() == i) break;
if (kk[i] == "\r") break;
i += 1;
}
label3.ResetText();
label3.Text = "Количество исходов:" + (i - ish);
for (int j = 0; j < i - ish; j++)
{
string[] temp = kk[j + ish].Split(new Char[] { ',' });
gipotez[j] = temp[0];
ver[j] = Convert.ToSingle(temp[1].
}
ish = i - ish;
for (int obsh = 0; obsh < ish; obsh++)
{
string[] temp = kk[obsh + 6 + vopr].Split(new Char[] { ',' });
for (int k = 0; k < (temp.Count() - 2) / 3; k++)
{
yes[obsh, Convert.ToInt32(temp[2 + k * 3]) - 1] = Convert.ToSingle(temp[3 + k * 3].Replace(".", ","));
if (yes[obsh, Convert.ToInt32(temp[2 + k * 3]) - 1] == 0) yes[obsh, Convert.ToInt32(temp[2 + k * 3]) - 1] = 2;
no[obsh, Convert.ToInt32(temp[2 + k * 3]) - 1] = Convert.ToSingle(temp[4 + k * 3].Replace(".", ","));
}
}
t = 0;
textBox1.Text = voprosi[t];
label7.Text = (t + 1).ToString();
refresh();
}
catch (Exception ex)
{
MessageBox.Show("А где файл? Original error: " + ex.Message);
}
}
public void refresh()