p align="left">2.2 Математическая модель преобразования базы фактов в базу знаний Преобразование базы фактов в базу знаний происходит следующим образом: При нажатии на кнопку «ОК» на пользовательском интерфейсе, инициализируются 12 переменных : markaCPU, my_chast_s, markaMB, modelMB, markaVIDEO, modelVIDEO, typeOZY, sizeOZY, typeHDD, sizeHDD, markaDisp, modelDisp. Далее, всоответствии с выбранными пользователем характеристиками, выбераются строки из БД, откуда далее поочерёдно считываются значения. 2.3 Разработка правил вывода системы принятия решений По заданным входным параметрам, определяются соответствующие строки в базе данных. В строке данных считывается цена выбранных комплектующих, рассчитывается средняя цена и заносится в соответствующую ему переменную. Рассмотрим данное правило на примере: Пусть входные параметры (ВП) определены как: Процессор: Athlon Частота: 2800 Марка материнской платы: Asus Модель материнской платы: M2N-MX Марка видеокарты: Radeon Модель видеокарты: 9200 Тип модуля памяти: DDR Объем памяти: 256 Интерфейс жесткого диска: IDE Объем диска: 160 Марка монитора: LG Модель монитора: Flatron F700P 17” CRT Привод: DVD-RW Клавиатура, мышка. В соответствии с правилами определяем: Цена = Ср. Цена процессора + Ср. Цена материнской платы + Ср Цена видеокарты + Ср. Цена модуля памяти + Ср. Цена жесткого диска + Ср. Цена монитора + Цена привода + Цена клавиатуры + Цена мышки = 14 + 39,4 + 15,6 + 7,75 + 39,3 + 17 + 13 + 6 + 4= 156 долларов. Итог: цена компьютера с учётом входных параметров составила 156 долларов. 3. Математическая модель редактора базы знаний 3.1 Математическая модель принятия решения После того, как база фактов преобразована в базу знаний, инициализируется набор переменных, которые соответствуют параметрам, введённым пользователем: markaCPU, my_chast_s, markaMB, modelMB, markaVIDEO, modelVIDEO, typeOZY, sizeOZY, typeHDD, sizeHDD, markaDisp, modelDisp. Если некоторые параметры не будут введены, то СППР посчитает стоимость компьютера без учета этих параметров, тоесть по комплектующим. Переменным присваиваются значения следующим образом: 1) markaCPU присваивается значение марки процессора 2) my_chast_s присваивается значение частоты процессора 3) markaMB присваивается значение марки материнской платы 4) modelMB присваивается значение модели материнской платы 5) markaVIDEO присваивается значение марки видеокарты 6) modelVIDEO присваивается значение модели видеокарты 7) typeOZY присваивается значение тип оперативной памяти 8) sizeOZY присваивается значение размер оперативной памяти 9) typeHDD присваивается значение тип жесткого диска 10) sizeHDD присваивается значение размер жесткого диска 11) markaDisp присваивается значение марки монитора 12) modelDisp присваивается значение модели монитора На следующем этапе происходит определение цены компьютера по комплектующим: 1) Определяем стоимость процессора if ( ((my_chast%50)!=0) || (my_chast<0) ) { MessageBox::Show("Частота процессора введена некорректно.\nТакой частоты нет.","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} float my_cena; bool h=true; while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaCPU) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); chast1_s=dd; chast1=Int32::Parse(dd); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); cena1_s=s->Substring(0,i); cena1=Int32::Parse(cena1_s); //Выполняем один раз. if (h==true) {chast0=chast1; cena0=cena1; h=false;} } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } my_cena=approcsim(my_chast, chast0, cena0, chast1, cena1); cena=cena+my_cena; } Стоимость процессора зависит от марки. В базе данных baseCPU.txt в зависимости от выбранной марки строится функция аппроксимации по двум точкам А и В из базы (Координаты (частота, цена)). Координаты точки А(х0,у0), точки В(х1,у1). Таким образом, мы можем найти цену процессора (y) с произвольно заданной частотой x. Для этого запишем уравнение прямой, проходящей через 2 точки: (y1-y)/(y1-y0)= (x1-x)/(x1-x0) y=(x-x0)*(y1-y0)/(x1-x0)+y0 Программная реализация функции: float approcsim(int my_chast, int chast0, int cena0, int chast1, int cena1) { float my_cena; //Уравнение прямой проходящей через 2 точки my_cena=(my_chast-chast0)*(cena1-cena0)/(chast1-chast0)+cena0; return my_cena; } 2) Определяем стоимость материнской платы if (this->comboBox4->Text!=""&&this->comboBox3->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMother.txt"); while(s->Length >50) {int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaMB){ s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==modelMB) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 3) Определяем стоимость видеокарты if (this->comboBox6->Text!=""&&this->comboBox5->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseVideo.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaVIDEO) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==modelVIDEO) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 4) Определяем стоимость оперативной памяти if (this->comboBox8->Text!=""&&this->comboBox7->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMemory.txt"); while(s->Length >50) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==typeOZY) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==sizeOZY) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 5) Определяем стоимость жесткого диска if (this->comboBox10->Text!=""&&this->comboBox9->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseHDD.txt"); while(s->Length >50) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==typeHDD) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==sizeHDD) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 6) Определяем стоимость монитора if (this->comboBox12->Text!=""&&this->comboBox11->Text!="")
Страницы: 1, 2, 3, 4
|