Многокритериальная оптимизация

Автор работы: Пользователь скрыл имя, 19 Марта 2014 в 21:05, курсовая работа

Краткое описание

Необходимость принятия решений в какой-либо ситуации так же стара, как и само человечество и принимать решения, как отдельному человеку, так и различным группам людей, вплоть до всего человечества приходится практически во всех областях своей деятельности. Причем в некоторых областях (военных, медицинских, космических, в атомной энергетике, химической промышленности и др.) возникает потребность принятия достаточно сложных управленческих решений, ошибка в которых может повлечь за собой катастрофические последствия. В силу этого появилась необходимость выделить процесс принятия оптимальных решений в отдельную область науки, которая бы формализовала и систематизировала данный процесс.

Вложенные файлы: 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);

        }

    }

}

 

 

 


Информация о работе Многокритериальная оптимизация