Многокритериальная оптимизация
Курсовая работа, 19 Марта 2014, автор: пользователь скрыл имя
Краткое описание
Необходимость принятия решений в какой-либо ситуации так же стара, как и само человечество и принимать решения, как отдельному человеку, так и различным группам людей, вплоть до всего человечества приходится практически во всех областях своей деятельности. Причем в некоторых областях (военных, медицинских, космических, в атомной энергетике, химической промышленности и др.) возникает потребность принятия достаточно сложных управленческих решений, ошибка в которых может повлечь за собой катастрофические последствия. В силу этого появилась необходимость выделить процесс принятия оптимальных решений в отдельную область науки, которая бы формализовала и систематизировала данный процесс.
Вложенные файлы: 1 файл
Пояснительная записка.docx
— 764.08 Кб (Скачать файл)}
private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
if (tabControl1.SelectedIndex == 1)
{
dataGridView3.RowCount = 2;
dataGridView3.ColumnCount = 6;
dataGridView3.Rows[0].HeaderCell.Value = "Эксперт1";
dataGridView3.Rows[1].HeaderCell.Value = "Эксперт2";
dataGridView3.RowHeadersWidth = 90;
}
}
public bool Proverka(DataGridView dg)//проверка введены ли все данные в dataGridView
{
bool flag = true;//нет пустых клеток
for (int i = 0; i < dg.RowCount && flag == true; i++)
for (int j = 0; j < dg.ColumnCount && flag == true; j++)
if (dg[j, i].Value==null)
flag = false;
return flag;
}
public bool ProverkaOgranich()//проверка заданы ли все ограничения
{
bool flag = true;//все ограничения заданы
if (textBox1.Text == "") flag = false;
if (textBox2.Text == "") flag = false;
if (textBox3.Text == "") flag = false;
if (textBox4.Text == "") flag = false;
return flag;
}
private void button2_Click(object sender, EventArgs e)//многокритериальная оптимизация
{
if (Proverka(dataGridView3) == true && Proverka(dataGridView2)==true && Proverka(dataGridView1)==true && ProverkaOgranich()==true)//все данные введены
{
x = ReadFromTable(dataGridView3);//считываем данные из
таблицы
//Получаем ограничения из формы
int timeM = Convert.ToInt32(textBox4.Text);
double moshnost = Convert.ToDouble(textBox3.Text);
double cena = Convert.ToDouble(textBox1.Text);
int count = Convert.ToInt32(textBox2.Text);
MnogokreterialnaiaOptimizacia mn = new MnogokreterialnaiaOptimizacia(x,
alternativiSt1, alternativiSt2,timeM,moshnost,count,cena);
if (mn.SoglosovanieOcenok())
{
listBox2.Items.Clear();
//составление альтернатив
alternativiSt1.Clear();
alternativiSt2.Clear();
for (int i = 0; i < dataGridView1.ColumnCount; i++)
for (int j = 0; j < dataGridView2.ColumnCount; j++)
{
alternativiSt1.Add(i);
alternativiSt2.Add(j);
}
//метод претпочтений
mn.PreobrazovanieX(); //преобразовываем матрицу
double[] vesa = mn.Predpochtenie();
//*****перевод хорактеристик в безразмерный
вид*****//
PerevodOcenok pr1 = new PerevodOcenok(dataGridView1.RowCount, dataGridView1.ColumnCount);
PerevodOcenok pr2 = new PerevodOcenok(dataGridView2.RowCount, dataGridView2.ColumnCount);
//производительность
double[] proizvodit1 = new double[dataGridView1.ColumnCount];
double[] proizvodit2 = new double[dataGridView2.ColumnCount];
for (int i = 0; i < proizvodit1.Length; i++)
{
proizvodit1[i] = Convert.ToDouble(dataGridView1[i, 0].Value);
proizvodit2[i] = Convert.ToDouble(dataGridView2[i, 0].Value);
}
pr1.PerevodOcenokVBezrazmVid(proizvodit1, 0, true);
pr2.PerevodOcenokVBezrazmVid(proizvodit2, 0, true);
//стоимость
double[] stoimost1 = new double[dataGridView1.ColumnCount];
double[] stoimost2 = new double[dataGridView2.ColumnCount];
for (int i = 0; i < stoimost1.Length; i++)
{
stoimost1[i] = Convert.ToDouble(dataGridView1[i, 1].Value);
stoimost2[i] = Convert.ToDouble(dataGridView2[i, 1].Value);
}
pr1.PerevodOcenokVBezrazmVid(stoimost1, 1, false);
pr2.PerevodOcenokVBezrazmVid(stoimost2, 1, false);
//энергоэффективность
double[] energoef1 = new double[dataGridView1.ColumnCount];
double[] energoef2 = new double[dataGridView2.ColumnCount];
for (int i = 0; i < energoef1.Length; i++)
{
energoef1[i] = Convert.ToDouble(dataGridView1[i, 2].Value);
energoef2[i] = Convert.ToDouble(dataGridView2[i, 2].Value);
}
pr1.PerevodOcenokVBezrazmVid(energoef1, 2, false);
pr2.PerevodOcenokVBezrazmVid(energoef2, 2, false);
//Сервисное обслуживание
string[] tempServObsl1 = new string[dataGridView1.ColumnCount];
string[] tempServObsl2 = new string[dataGridView2.ColumnCount];
for (int i = 0; i < tempServObsl1.Length; i++)
{
tempServObsl1[i] = dataGridView1[i, 3].Value.ToString();
tempServObsl2[i] = dataGridView2[i, 3].Value.ToString();
}
pr1.PerevodYesNo(tempServObsl1, 3);
pr2.PerevodYesNo(tempServObsl2, 3);
//надёжность
double[] nadegn1 = new double[dataGridView1.ColumnCount];
double[] nadegn2 = new double[dataGridView2.ColumnCount];
for (int i = 0; i < energoef1.Length; i++)
{
nadegn1[i] = Convert.ToDouble(dataGridView1[i, 4].Value);
nadegn2[i] = Convert.ToDouble(dataGridView2[i, 4].Value);
}
pr1.PerevodOcenokVBezrazmVid(nadegn1, 4, true);
pr2.PerevodOcenokVBezrazmVid(nadegn2, 4, true);
//удобство в использовании
string[] tempYdobstvo1 = new string[dataGridView1.ColumnCount];
string[] tempYdobstvo2 = new string[dataGridView2.ColumnCount];
for (int i = 0; i < tempYdobstvo1.Length; i++)
{
tempYdobstvo1[i] = dataGridView1[i, 5].Value.ToString();
tempYdobstvo2[i] = dataGridView2[i, 5].Value.ToString();
}
pr1.ShkalaHarringtona(tempYdobstvo1, 5);
pr2.ShkalaHarringtona(tempYdobstvo2, 5);
//метод парето
mn.Pareto(pr1.ocenki,pr2.ocenki);
//метод МАИ
ArrayList mai = mn.MAI(pr1.ocenki, pr2.ocenki, vesa, texnXarakter1, texnXarakter2);
//Вывод оптимальных альтернатив
listBox2.Items.Add("Лучшая альтернатива1
- ST1" + (Convert.ToInt32(mn.st1[mn.Max(mai)])).ToString() + "
и ST2" + (Convert.ToInt32(mn.st2[mn.Max(mai)])).ToString());
mai[mn.Max(mai)] = -1;
listBox2.Items.Add("Лучшая альтернатива2
- ST1" + (Convert.ToInt32(mn.st1[mn.Max(mai)])).ToString() + "
и ST2" + (Convert.ToInt32(mn.st2[mn.Max(mai)])).ToString());
mai[mn.Max(mai)] = -1;
listBox2.Items.Add("Лучшая альтернатива3
- ST1" + (Convert.ToInt32(mn.st1[mn.Max(mai)])).ToString() + "
и ST2" + (Convert.ToInt32(mn.st2[mn.Max(mai)])).ToString());
}
else MessageBox.Show("Оценки экспертов не согласованы!!!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else MessageBox.Show("Введены не все данные!!!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}