Автор: Пользователь скрыл имя, 12 Декабря 2011 в 21:29, курсовая работа
Цель работы - разработать экспертную систему расчета выбросов загрязняющих веществ при пересыпке пылящих материалов (растворный узел).
Исходя из поставленной цели, формируются следующие задачи:
Исследование предметной области;
Выбор и изучение инструментального средства разработки ЭС;
Обоснование выбора методов представления и обработки знаний;
Разработка структур данных и знаний ЭС;
Разработка алгоритмов работы системы;
Кодирование, тестирование и отладка ЭС;
Оформление отчета по проведенной работе
Введение 3
1.1 Анализ предметной области 5
1.2 Система пользовательского интерфейса 6
1.3 Структура базы знаний экспертной системы 9
1.4 Иерархическое дерево решений 11
1.5 Описание и реализация экспертной системы 12
Заключение 14
Список литературы 15
Приложение 1 16
Структура
экспертной системы представлена в
иерархическом дереве, отображающем
шаги с условиями.
Программа работает следующим образом: Запускается файл Project1.exe, далее необходимо выбрать тип материала. Далее после выбора типа материала необходимо указать различные параметры технологического процесса (условия хранения и перегрузки материала, влажность, скорость ветра и т.д.)
После
этого необходимо произвести отбор,
удовлетворяющий заданному
Switch (i)
{
n1: k1=1; k2=2; break;
n2: k1=2; k2=3; break;
-------------------------
ni: k1=j; k2=j;
}
Также
в ЭС предусмотрено отслеживание
ввода ошибочных данных. Это реализуется
с помощью следующей
try
{
Проверяемое поле;
}
catch(EConvertError&)
{
Сообщение об ошибке;
}
Таким образом, в ходе работы ЭС собираются все отловленные ошибки и сохраняются в отдельный файл. На основании полученных ответов экспертной системой будут рассчитаны значения удельных и валовых выбросов загрязняющих веществ в атмосферу.
Все
расчеты производились с
Для процессов перегрузки пылящих
материалов следует применять следующую
формулу (г/с):
а для валовых выбросов формулу (т/год):
Для процессов хранения пылящих материалов следует применять следующую формулу (г/с):
а для валовых выбросов формулу (т/год):
Все
формулы для расчетов взяты из
следующего источника: "Методические
указания по расчетов выбросов загрязняющих
веществ (пыли) в атмосферу) при складировании
и перегрузке сыпучих материалов на различных
строительных предприятиях" .
В результате проделанной работы был создан прототип экспертной системы, позволяющий по введенным параметрам материала и условия хранения и пересыпки рассчитывать валовые и удельные выбросы загрязняющих веществ (SiO2) в атмосферу.
В качестве дальнейшего развития системы может быть следующее:
Код программы, который реализует алгоритм работы фрагмента экспертной системы на языке C++.
//----------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "UExpert.h"
#include "PReport.h"
#include "About.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form1->Close();
}
//----------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double M,P;
double M1,P1;
double k1,k2,k3,k4,k5,k6,k7,B,q;
double GH,GY;
double Fmax,Fpl,Frab,Tc,koeff;
int i;
AnsiString str,str1,str2,str3,str4,str5;
i=ComboBox1->ItemIndex;
k1=0; k2=0;
switch (i) {
case 0: k1=0.05; k2=0.03; break;
case 1: k1=0.03; k2=0.02; break;
case 2: k1=0.03; k2=0.04; break;
case 3: k1=0.04; k2=0.02; break;
case
4: k1=0.01; k2=0.03; break;
case 5: k1=0.04; k2=0.03; break;
case 6: k1=0.04; k2=0.02; break;
case 7: k1=0.05; k2=0.02; break;
case 8: k1=0.02; k2=0.04; break;
case
9: k1=0.04; k2=0.06; break;
default: str="Вы невыбрали тип материала"; k1=0.02; k2=0.02;
}
//Label1->Caption="k1= "+FloatToStr(k1);
//Label2->Caption="k2= "+FloatToStr(k2);
Memo1->Lines->Add(str);
i=ComboBox2->ItemIndex;
k3=0;
switch (i) {
case 0: k3=1; q=0.000016; break;
case 1: k3=1.2; q=0.00075; break;
case 2: k3=1.4; q=0.00301; break;
case 3: k3=1.7; q=0.01376; break;
case 4: k3=2; q=0.0296; break;
case 5: k3=2.3; q=0.0565; break;
case 6: k3=2.6; q=0.0755; break;
case 7: k3=2.8; q=0.0955; break;
case
8: k3=3; q=0.0975; break;
default: str1="Вы не указали скорость ветра"; k3=1;
}
//Label3->Caption="k3= "+FloatToStr(k3);
Memo1->Lines->Add(str1);
//////////////////////////////
i=ComboBox3->ItemIndex;
k4=0;
switch (i) {
case 0: k4=1; break;
case 1: k4=0.5; break;
case 2: k4=0.3; break;
case 3: k4=0.2; break;
case
4: k4=0.1; break;
default: str2="Вы не указали тип склад"; k4=1;
}
//Label6->Caption="k4= "+FloatToStr(k4);
Memo1->Lines->Add(str2);
//////////////////////////////
i=ComboBox4->ItemIndex;
k5=0;
switch (i) {
case 0: k5=1; break;
case 1: k5=0.9; break;
case 2: k5=0.8; break;
case 3: k5=0.7; break;
case 4: k5=0.6; break;
case 5: k5=0.4; break;
case 6: k5=0.2; break;
case 7: k5=0.1; break;
case
8: k5=0.01; break;
default: str3="Вы не указали влажность материала"; k5=1;
}
//Label11->Caption="k5= "+FloatToStr(k5);
Memo1->Lines->Add(str3);
//////////////////////////////
i=ComboBox5->ItemIndex;
k7=0;
switch (i) {
case 0: k7=0.1; break;
case 1: k7=0.2; break;
case 2: k7=0.4; break;
case 3: k7=0.5; break;
case 4: k7=0.6; break;
case 5: k7=0.7; break;
case 6: k7=0.8; break;
case
7: k7=1; break;
default: str4="Вы не указали размер материала"; k7=0,5375;
}
//Label14->Caption="k7= "+FloatToStr(k7);
Memo1->Lines->Add(str4);
//////////////////////////////
i=ComboBox6->ItemIndex;
B=0;
switch (i) {
case 0: B=0.4; break;
case 1: B=0.5; break;
case 2: B=0.6; break;
case 3: B=0.7; break;
case 4: B=1; break;
case 5: B=1.5; break;
case 6: B=2; break;
case
7: B=2.5; break;
default: str5="Вы не
указали высоту падения
}
//Label17->Caption="B= "+FloatToStr(B);
Memo1->Lines->Add(str5);
try
{
GH=StrToFloat(Edit1->
}
catch(EConvertError&)
{
Memo1->Lines->Add("Кол-во перерабатываемого материала в час (т/час)");
Edit1->SetFocus();
Edit1->Clear();
}
try
{
GY=StrToFloat(Edit2->
}
catch(EConvertError&)
{
Memo1->Lines->Add("Кол-во материала перерабатываемое в течение года (т/год)");
Edit2->SetFocus();
Edit2->Clear();
}
try
{
Fmax=StrToFloat(Edit7->
}
catch(EConvertError&)
{
Memo1->Lines->Add("Площадь поверхности склада при максимальном заполнении, м2");