Имя
объекта/элемента
|
тип
|
Допустимые
значения/элементы в составе
|
BD[]
|
struct DATA
|
yslovie1, yslovie1,
yslovie1,deistvie
|
yslovie1, yslovie2, yslovie3
|
struct Yslovie
|
yslovie,ActivE
|
yslovie
|
string
|
А-я,A-z и символы
разделители
|
ActivE
|
bool
|
true/false
|
deistvie
|
string
|
А-я,A-z и символы
разделители
|
Где:
yslovie1,
yslovie2, yslovie3
- составные части образца
yslovie
-поле части образца
ActivE - состояние
(активность) части образца
Deistvie
- консиквент (действие при выполнении условия)
5.3 Результаты решения
Результатом решения выступает построение
логического вывода (получение консиквента).
.4 Алгоритм решения
Представим алгоритм решения в виде граф-схемы
(Рис.5.4.1.).
Граф-схема обработка()
Функция обработки базы знаний
Рис.5.4.1.
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы
была разработана и реализована программа, позволяющая выбрать поставщика
товаров. Программа представляет собой аналог продукционной модели представления
знаний (сопоставление образцов и консиквентов).
ПРИЛОЖЕНИЕ
Приложение 1
ТЕКСТ ПРОГРАММЫ
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;data_base;
Kurs_TPR
{partial class Form1 : Form
{DatA Data = new DatA();Form1()
{();.инициализация_БД();
}void label3_Click(object sender, EventArgs e)
{this.Close();}
void move_exit(object sender, MouseEventArgs e)
{label3.ForeColor = Color.BlueViolet;}void
move_form(object sender, MouseEventArgs e)
{label3.ForeColor = Color.Maroon;}
void move_title(object sender, MouseEventArgs e)
{panel4.Visible = true;}
void move_title_end(object sender,
MouseEventArgs e)
{panel4.Visible = false;}
void обработка()
{listBox1.Items.Clear();listBox1.Refresh();изменение=true;(изменение
== true)
{ изменение = false;((Data.BD[0].yslovie1.ActivE
== true) && (Data.BD[0].yslovie2.ActivE == true) &&
(Data.BD[0].yslovie3.ActivE == true))
{
listBox1.Items.Add(Data.BD[0].yslovie1.yslovie);.Items.Add(Data.BD[0].yslovie2.yslovie);.Items.Add(Data.BD[0].yslovie3.yslovie);.Items.Add("ВЫВОД:
" + Data.BD[0].deistvie);.Items.Add("<---X--->");
}else
{if (Data.BD[0].yslovie1.ActivE == false)
{((Data.BD[1].yslovie1.ActivE == true) ||
(Data.BD[1].yslovie2.ActivE == true))
{ if (Data.BD[1].yslovie1.ActivE == true)
listBox1.Items.Add(Data.BD[1].yslovie1.yslovie);listBox1.Items.Add(Data.BD[1].yslovie2.yslovie);.Items.Add("ВЫВОД:
" + Data.BD[1].deistvie);.Items.Add("<---X--->");.BD[0].yslovie1.ActivE
= true;.Checked = true;
изменение = true;
}if (((Data.BD[2].yslovie2.ActivE == true)
&& (Data.BD[2].yslovie3.ActivE == true)) || (Data.BD[2].yslovie1.ActivE
== true))
{ if ((Data.BD[2].yslovie1.ActivE == true)
&& (Data.BD[2].yslovie2.ActivE ==
false)).Items.Add(Data.BD[2].yslovie1.yslovie);
{
listBox1.Items.Add(Data.BD[2].yslovie2.yslovie);.Items.Add(Data.BD[2].yslovie3.yslovie);
};.Items.Add("ВЫВОД: " +
Data.BD[2].deistvie);.Items.Add("<---X--->");.BD[1].yslovie2.ActivE
= true;.Checked = true;
изменение = true;
}
}(Data.BD[0].yslovie2.ActivE == false)
{if ((Data.BD[3].yslovie1.ActivE == true) ||
(Data.BD[3].yslovie2.ActivE == true))
{if (Data.BD[3].yslovie1.ActivE == true)
listBox1.Items.Add(Data.BD[3].yslovie1.yslovie);listBox1.Items.Add(Data.BD[3].yslovie2.yslovie);.Items.Add("ВЫВОД:
"+Data.BD[3].deistvie);.Items.Add("<---X--->");.BD[0].yslovie2.ActivE
= true;.Checked = true;
изменение = true;
}
}(Data.BD[0].yslovie3.ActivE == false)
{if (Data.BD[4].yslovie1.ActivE == true)
{
listBox1.Items.Add(Data.BD[4].yslovie1.yslovie);.Items.Add("ВЫВОД:
"+Data.BD[4].deistvie);.BD[0].yslovie3.ActivE = true;.Checked = true;
изменение = true;
}
}
}
}
}
void Обновить()
{ listBox2.Items.Clear();(int i = 0; i < 5;
i++)
{listBox2.Items.Add(Data.BD[i].yslovie1.ActivE.ToString()
+" "+ Data.BD[i].yslovie2.ActivE.ToString() +" "+
Data.BD[i].yslovie3.ActivE.ToString());
}.Refresh();
}
void checkBox1_CheckedChanged(object sender,
EventArgs e)
{ if (sender == checkBox1)
{
Data.Констотация_факта(1);(Data.BD[0].yslovie1.ActivE == true)
{checkBox2.Enabled=checkBox3.Enabled=checkBox4.Enabled=checkBox5.Enabled=checkBox6.Enabled=false;
}else checkBox2.Enabled = checkBox3.Enabled =
checkBox4.Enabled = checkBox5.Enabled = checkBox6.Enabled = true;
{
Data.Констотация_факта(5);(Data.BD[1].yslovie2.ActivE==true)
{checkBox4.Enabled = checkBox5.Enabled =
checkBox6.Enabled = false;
}else checkBox4.Enabled = checkBox5.Enabled =
checkBox6.Enabled = true;
};(sender == checkBox4)
{Data.Констотация_факта(7); };(sender == checkBox5) {Data.Констотация_факта(8);
};(sender == checkBox6) {Data.Констотация_факта(9); };(sender == checkBox7)
{ Data.Констотация_факта(2);
(Data.BD[0].yslovie2.ActivE==true)
{checkBox8.Enabled = checkBox9.Enabled = false;
}else checkBox8.Enabled = checkBox9.Enabled =
true;
};(sender == checkBox8)
{Data.Констотация_факта(10); };(sender == checkBox9)
{Data.Констотация_факта(11); };(sender == checkBox10)
{
Data.Констотация_факта(3);(Data.BD[0].yslovie3.ActivE==true)
{checkBox11.Enabled=false;
}else checkBox11.Enabled=true;
};(sender == checkBox11)
{Data.Констотация_факта(13); };
Обновить();
обработка();
}
}
}
Приложение 2
ТЕКСТ МОДУЛЯ data_base.cs
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;data_base
{ public class DatA
{ public struct DATA
{ public struct Yslovie { public string yslovie;
public bool ActivE;}Yslovie yslovie1;Yslovie yslovie2;Yslovie yslovie3;string
deistvie;};DATA.Yslovie yslovie1 = new DATA.Yslovie();DATA.Yslovie yslovie2 =
new DATA.Yslovie();DATA.Yslovie yslovie3 = new DATA.Yslovie();DATA[] BD = new
DATA[5];void инициализация_БД()
{ BD[0].yslovie1.yslovie = "поставщик
проверенный"; BD[0].yslovie1.ActivE = false;[0].yslovie2.yslovie =
"товар качественный"; BD[0].yslovie2.ActivE =
false;[0].yslovie3.yslovie = "цена приемлемая"; BD[0].yslovie3.ActivE
= false;[0].deistvie = "Поставщик подходит";[1].yslovie1.yslovie = "поставщик
давно на рынке"; BD[1].yslovie1.ActivE = false;[1].yslovie2.yslovie =
"жалоб на поставщика не было"; BD[1].yslovie2.ActivE =
false;[1].yslovie3.yslovie = null; BD[1].yslovie3.ActivE = false;[1].deistvie =
"поставщик проверенный";[2].yslovie1.yslovie = "есть
рекомендации от других заказчиков"; BD[2].yslovie1.ActivE =
false;[2].yslovie2.yslovie = "поставка производится в срок";
BD[2].yslovie2.ActivE = false;[2].yslovie3.yslovie = "товар не получает
дефектов в ходе транспатрировки"; BD[2].yslovie3.ActivE =
false;[2].deistvie = "жалоб на поставщика не
было";[3].yslovie1.yslovie = "товар сертифицирован";
BD[3].yslovie1.ActivE = false;[3].yslovie2.yslovie = "товар прощел
государственные экспертизы"; BD[3].yslovie2.ActivE =
false;[3].yslovie3.yslovie = null; BD[3].yslovie3.ActivE = false;[3].deistvie =
"товар качественный";[4].yslovie1.yslovie = "цена чуть ниже чем
у других поставщиков"; BD[4].yslovie1.ActivE = false;[4].yslovie2.yslovie
= null; BD[4].yslovie2.ActivE = false;[4].yslovie3.yslovie = null; BD[4].yslovie3.ActivE
= false;[4].deistvie = "цена приемлемая";
}void Констотация_факта(int i)
{ switch (i)
{ case 1: if (BD[0].yslovie1.ActivE == true)
BD[0].yslovie1.ActivE = false;BD[0].yslovie1.ActivE = true; break;2: if
(BD[0].yslovie2.ActivE == true) BD[0].yslovie2.ActivE =
false;BD[0].yslovie2.ActivE = true; break;3: if (BD[0].yslovie3.ActivE == true)
BD[0].yslovie3.ActivE = false;BD[0].yslovie3.ActivE = true; break;4: if
(BD[1].yslovie1.ActivE == true) BD[1].yslovie1.ActivE = false;BD[1].yslovie1.ActivE
= true; break;5: if (BD[1].yslovie2.ActivE == true) BD[1].yslovie2.ActivE =
false;BD[1].yslovie2.ActivE = true; break;6: if (BD[1].yslovie3.ActivE == true)
BD[1].yslovie3.ActivE = false;BD[1].yslovie3.ActivE = true; break;7: if
(BD[2].yslovie1.ActivE == true) BD[2].yslovie1.ActivE =
false;BD[2].yslovie1.ActivE = true; break;8: if (BD[2].yslovie2.ActivE == true)
BD[2].yslovie2.ActivE = false;BD[2].yslovie2.ActivE = true; break;9: if
(BD[2].yslovie3.ActivE == true) BD[2].yslovie3.ActivE = false;BD[2].yslovie3.ActivE
= true; break;10: if (BD[3].yslovie1.ActivE == true) BD[3].yslovie1.ActivE =
false;BD[3].yslovie1.ActivE = true; break;11: if (BD[3].yslovie2.ActivE ==
true) BD[3].yslovie2.ActivE = false;BD[3].yslovie2.ActivE = true; break;12: if
(BD[3].yslovie3.ActivE == true) BD[3].yslovie3.ActivE =
false;BD[3].yslovie3.ActivE = true; break;13: if (BD[4].yslovie1.ActivE ==
true) BD[4].yslovie1.ActivE = false;BD[4].yslovie1.ActivE = true; break;14: if
(BD[4].yslovie2.ActivE == true) BD[4].yslovie2.ActivE = false;BD[4].yslovie2.ActivE
= true; break;15: if (BD[4].yslovie3.ActivE == true) BD[4].yslovie3.ActivE =
false;BD[4].yslovie3.ActivE = true; break;}
}}}
Приложение 3
КОНТРОЛЬНЫЕ ПРИМЕРЫ
Интерфейс программы состоит из трех основных
частей: панель утверждения фактов(образцов), панель построения логического
вывода, панель отображения активности образцов. Интерфейс представлен на
рисунке Контрольный пример 1 (интерфейс)(см.Рис.П.3.1.).
Контрольный пример 1 (интерфейс)
Рис.П.3.1.
Установим два факта (образца): товар прошел
государственные экспертизы; цена приемлемая. Исходя из данных фактов программа
должна, в поле построения вывода, выдать запись, о том, что товар качественный
(т.к. товар прошел государственные экспертизы => товар качественный).Окно
программы представлено на рисунке Контрольный пример 2(см..Рис.П.3.2).
Контрольный пример 2
Рис.П.3.2.
Установим следующие факты (образцы): поставка происходит
в срок; товар не получает дефектов в ходе транспортировки; товар прошел
государственные экспертизы; цена приемлемая. Исходя из данных фактов программа
должна, в поле построения вывода, выдать запись, о том, что товар качественный
(т.к. товар прошел государственные экспертизы => товар качественный), после
чего обрабатывая образцы «поставка происходит в срок», «товар не получает
дефектов», программа должна сделать вывод о том что жалоб на поставщика не
было, а исходя из этого факта(из того что жалоб не было), программа должна
сделать вывод о том что поставщик проверенный, в следствии чего следует вывод о
том что поставщик подходит(т.к. Поставщик проверенный и товар качественный и
цена приемлемая => поставщик подходит).Окно программы представлено на рисунке
Контрольный пример 3(см..Рис.П.3.3.).
Контрольный пример 3
Рис.П.3.3.
Установим следующие факты (образцы): есть
рекомендации от других заказчиков; товар прошел государственные экспертизы;
цена приемлемая. Исходя из данных фактов программа должна, в поле построения
вывода, выдать запись, о том, что товар качественный (т.к. товар прошел
государственные экспертизы => товар качественный), после чего обрабатывая
образец «есть рекомендации от других заказчиков», программа должна сделать
вывод о том что жалоб на поставщика не было, а исходя из этого факта(из того
что жалоб не было), программа должна сделать вывод о том что поставщик
проверенный, в следствии чего следует вывод о том что поставщик подходит(т.к.
Поставщик проверенный и товар качественный и цена приемлемая => поставщик
подходит).Окно программы представлено на рисунке Контрольный пример
4(см..Рис.П.3.4.).
Контрольный пример 4
Рис.П.3.4.
Установим следующие факты (образцы): поставщик
давно на рынке; товар сертифицирован; цена приемлемая. Исходя из данных фактов
программа должна, в поле построения вывода, выдать запись, о том, поставщик
проверенный (т.к. поставщик давно на рынке => поставщик проверенный), после
чего обрабатывая образец «товар сертифицирован», программа должна сделать вывод
о том что товар качественный, а исходя из этого факта(из того что тавр
качественный) в следствии чего следует вывод о том что поставщик подходит(т.к.
Поставщик проверенный и товар качественный и цена приемлемая => поставщик
подходит).Окно программы представлено на рисунке Контрольный пример
5(см..Рис.П.3.5.).
Контрольный пример 5
Рис.П.3.5.
Приложение 4
РУКОВОДСТВО ПРОГРАММИСТА
П.4.1.Назначение программы
Программа предназначена для построения вывода,
исходя из данных введенных пользователем.
П.4.2.Описание информации
П.4..2.1.Входная информация
Входной информацией для программы в целом,
является модуль data_base.cs ( который хранит в себе описание структуры базы
знаний, непосредственно саму базу данных и функции инициализации и констатации
фактов), а так же отмеченные утверждения (см. Рис.2.1.1.).
Панель выбора фактов
Рис.2.1.1.
П.4.2.2. Выходная информации
В качестве выходной информации (для программы в
целом) выступает логический вывод (см.Рис.2.2.1), и панель отображения текущего
состояния фактов (вывод данных об активности условий см.Рис.2.2.2.).
Построение вывода
Рис.2.2.1.
Активность условий
Рис.2.2.2
П.4.3Требования необходимые для работы программы
Для работы программы необходимым и достаточным
является установленная операционная система windows
xp,seven,vista.
П.4.4 Известные ошибки
В процессе тестирования программы ошибок
обнаружено не было.
П.4.5 Общее представление модуля data_base.cs
Модуль содержит определение структуры базы
знаний, функции её инициализации и констатации фактов (утверждения образцов).
П.4.5.1.Разработанная структураstruct DATA
{ public struct Yslovie { public string yslovie;
public bool ActivE;}Yslovie yslovie1;Yslovie yslovie2;Yslovie yslovie3;string
deistvie;
};
П.4.5.2.Описание
структуры
Структура
DATA содержит
в
своем
составе
четыре
элемента
(yslovie1, yslovie2, yslovie3, deistvie), а
элементы
yslovie1, yslovie2 и
yslovie3 являются объектами
структуры
Yslovie, и содержат
поля
yslovie и
ActivE. Поле
yslovie содержит факт,
поле ActivE содержит
состояние факта.
База знаний представляет собой
последовательность записей структурой DATA,
для создания базы необходимо добавить определение объектов yslovie1,
yslovie2 и yslovie3,
и создать объект записей структуры DATA.
Для этого необходимо добавить следующие строки:
public DATA.Yslovie yslovie1 = new
DATA.Yslovie();DATA.Yslovie yslovie2 = new DATA.Yslovie();DATA.Yslovie yslovie3
= new DATA.Yslovie();DATA[] BD = new DATA[5];
Итоговое представление базы знаний на языке
программирования C# будет
выглядеть следующим образом:
public struct DATA
{ public struct Yslovie { public string yslovie;
public bool ActivE;}Yslovie yslovie1;Yslovie yslovie2;Yslovie yslovie3;string
deistvie;
};DATA.Yslovie yslovie1 = new
DATA.Yslovie();DATA.Yslovie yslovie2 = new DATA.Yslovie();DATA.Yslovie yslovie3
= new DATA.Yslovie();DATA[] BD = new DATA[5];
Подключение модуля происходит путем указания его
имени, в списке подключаемых модулей и библиотек, в коде программы. При этом
код программы в которой используется модуль должен быть написан на языке
программирования C#.
Приложение 5
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
П.5.1.Назначение программы
Программа предназначена для построения вывода,
исходя из данных введенных пользователем.
П.5.2.Описание информации
П.5.2.1.Входная информация
Входной информацией для программы в целом,
является модуль data_base.cs (который хранит в себе описание структуры базы
знаний, непосредственно саму базу данных и функции инициализации и констатации
фактов), а так же отмеченные утверждения (см. Рис.5.2.1.1.).
Панель выбора фактов
Рис.5.2.1.1.
П.5.2.2. Выходная информации
В качестве выходной информации (для программы в
целом) выступает логический вывод (см.Рис.5.2.2.1), и панель отображения
текущего состояния фактов (вывод данных об активности условий см.Рис.5.2.2.2.).
Построение вывода
Рис.5.2.2.1.
Активность условий
Рис.5.2.2.2
П.4.3.Требования необходимые для работы
программы
Для работы программы необходимым и достаточным
является установленная операционная система windows
xp,seven,vista.