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

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

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

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

Вложенные файлы: 1 файл

Пояснительная записка.docx

— 764.08 Кб (Скачать файл)

                {

                    //вычисляем количественный индикатор  важности альтернативы

                    sum.Add( vesa[0] * (ocenki1[0, Convert.ToInt32(altSt1[i])] + ocenki2[0, Convert.ToInt32(altSt2[i])]) + vesa[1] * (ocenki1[1, Convert.ToInt32(altSt1[i])] + ocenki2[1, Convert.ToInt32(altSt2[i])]) +

                        vesa[2] * (ocenki1[2, Convert.ToInt32(altSt1[i])] + ocenki2[2, Convert.ToInt32(altSt2[i])]) + vesa[3] * (ocenki1[3, Convert.ToInt32(altSt1[i])] + ocenki2[3, Convert.ToInt32(altSt2[i])]) +

                        vesa[4] * (ocenki1[4, Convert.ToInt32(altSt1[i])] + ocenki2[4, Convert.ToInt32(altSt2[i])]) + vesa[5] * (ocenki1[5, Convert.ToInt32(altSt1[i])] + ocenki2[5, Convert.ToInt32(altSt2[i])]));

                    st1.Add(Convert.ToInt32(altSt1[i]) + 1);

                    st2.Add(Convert.ToInt32(altSt2[i]) + 1);

                }

            }

            return sum;

        }

 

        public int Max(ArrayList mas)//поиск максимума

        {

            int nMax = 0;

            double max = Convert.ToDouble(mas[0]);

            for (int i = 0; i < mas.Count; i++)

                if (Convert.ToDouble(mas[i]) > max)

                {

                    max = Convert.ToDouble(mas[i]);

                    nMax = i;

                }

            return nMax;

        }

 

        public bool SoglosovanieOcenok()

        {

            bool soglas = true;//оценки согласованы

            //найдём сумму оценок каждого  критерия

            double[] s = new double[x.GetLength(1)];

            double sum;

            for (int j = 0; j < x.GetLength(1); j++)

            {

                sum = 0;

                for (int i = 0; i < x.GetLength(0); i++)

                    sum = sum + x[i, j];

                s[j] = sum;

            }

            //находим вспрмогательную величину

            double alpha=1/2f*(x.GetLength(0)*(x.GetLength(1)+1));

            double S=0;

            for (int i = 0; i < s.Length; i++)

                S = S + (s[i] - alpha) * (s[i] - alpha);

            //находим коэффициент конкордации

            double nu = 12 * S / (x.GetLength(0) * x.GetLength(0) * x.GetLength(1) * (x.GetLength(1) * x.GetLength(1) - 1));

            if (nu >= 0.5) soglas = true;

            else soglas = false;

            return soglas;

        }

    }

}

 

Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections;

 

namespace MonogokreterialnaiaOptimizacia

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        double[,] texnXarakter1;//технические характеристики станков первого вида

        double[,] texnXarakter2;//технические характеристики станков второго вида

        ArrayList bestStanki = new ArrayList();//выбранные станки по энергоэффективности(полный перебор)

        double[,] x; //матрица оценок экспертов

        ArrayList alternativiSt1 = new ArrayList();//альтернативы 1ый вид станков

        ArrayList alternativiSt2 = new ArrayList();//альтернативы 2ой вид станков

               

        private void Form1_Load(object sender, EventArgs e)

        {

            dataGridView1.RowCount = 6;  dataGridView1.ColumnCount = 5;

            dataGridView2.RowCount = 6;  dataGridView2.ColumnCount = 5;

            //Формируем заголовки строк таблицы

            dataGridView1.Rows[0].HeaderCell.Value = "Производительность, изд./час";

            dataGridView2.Rows[0].HeaderCell.Value = "Производительность, изд./час";

            dataGridView1.Rows[1].HeaderCell.Value = "Стоимость, млн.руб.";

            dataGridView2.Rows[1].HeaderCell.Value = "Стоимость, млн.руб.";

            dataGridView1.Rows[2].HeaderCell.Value = "Энергоэффективность, кВт-ч/ изд.";

            dataGridView2.Rows[2].HeaderCell.Value = "Энергоэффективность, кВт-ч/ изд.";

            dataGridView1.Rows[3].HeaderCell.Value = "Сервисное обслуживание";

            dataGridView2.Rows[3].HeaderCell.Value = "Сервисное обслуживание";

            dataGridView1.Rows[4].HeaderCell.Value = "Надежность, ч";

            dataGridView2.Rows[4].HeaderCell.Value = "Надежность, ч";

            dataGridView1.Rows[5].HeaderCell.Value = "Удобство в использовании";

            dataGridView2.Rows[5].HeaderCell.Value = "Удобство в использовании";

            for (int i = 0; i < dataGridView1.RowCount; i++)

            {

                dataGridView1.Rows[i].Height = 40;

                dataGridView2.Rows[i].Height = 40;

            }

            dataGridView1.RowHeadersWidth = 185;

            dataGridView2.RowHeadersWidth = 185;

            //Формируем заголовки столбцов  таблицы

            for (int j = 0; j < dataGridView1.ColumnCount; j++)

            {

                dataGridView1.Columns[j].HeaderText = "ST1" + (j + 1).ToString();

                dataGridView2.Columns[j].HeaderText = "ST2" + (j + 1).ToString();

                dataGridView1.Columns[j].Width = 60;

                dataGridView2.Columns[j].Width = 60;

            }

            dataGridView2.Columns[0].Width = 75;

            dataGridView1.Columns[3].Width = 75;

            dataGridView1[0, 0].Value = 8; dataGridView1[1, 0].Value = 5; dataGridView1[2, 0].Value = 19; dataGridView1[3, 0].Value = 13; dataGridView1[4, 0].Value = 11;

            dataGridView2[0, 0].Value = 16; dataGridView2[1, 0].Value = 17; dataGridView2[2, 0].Value = 12; dataGridView2[3, 0].Value = 15; dataGridView2[4, 0].Value = 10;

            dataGridView1[0, 1].Value = 930.0; dataGridView1[1, 1].Value = 310.0; dataGridView1[2, 1].Value = 1320.0; dataGridView1[3, 1].Value = 450.0; dataGridView1[4, 1].Value = 957.0;

            dataGridView2[0, 1].Value = 1400.0; dataGridView2[1, 1].Value = 1200.0; dataGridView2[2, 1].Value = 1100.0; dataGridView2[3, 1].Value = 700.0; dataGridView2[4, 1].Value = 550.0;

            dataGridView1[0, 2].Value = 15.3; dataGridView1[1, 2].Value = 30.5; dataGridView1[2, 2].Value = 27.0; dataGridView1[3, 2].Value = 25.0; dataGridView1[4, 2].Value = 13.6;

            dataGridView2[0, 2].Value = 22.0; dataGridView2[1, 2].Value = 14.0; dataGridView2[2, 2].Value = 33.0; dataGridView2[3, 2].Value = 20.0; dataGridView2[4, 2].Value = 21.3;

            dataGridView1[0, 3].Value = "Да"; dataGridView1[1, 3].Value = "Нет"; dataGridView1[2, 3].Value = "Да"; dataGridView1[3, 3].Value = "Да"; dataGridView1[4, 3].Value = "Нет";

            dataGridView2[0, 3].Value = "Да"; dataGridView2[1, 3].Value = "Да"; dataGridView2[2, 3].Value = "Да"; dataGridView2[3, 3].Value = "Нет"; dataGridView2[4, 3].Value = "Да";

            dataGridView1[0, 4].Value = 100000; dataGridView1[1, 4].Value = 170000; dataGridView1[2, 4].Value = 50000; dataGridView1[3, 4].Value = 90000; dataGridView1[4, 4].Value = 110000;

            dataGridView2[0, 4].Value = 130000; dataGridView2[1, 4].Value = 140000; dataGridView2[2, 4].Value = 120000; dataGridView2[3, 4].Value = 100000; dataGridView2[4, 4].Value = 130000;

            dataGridView1[0, 5].Value = "Отлично"; dataGridView1[1, 5].Value = "Плохо"; dataGridView1[2, 5].Value = "Плохо"; dataGridView1[3, 5].Value = "Очень хорошо"; dataGridView1[4, 5].Value = "Хорошо";

            dataGridView2[0, 5].Value = "Очень хорошо"; dataGridView2[1, 5].Value = "Хорошо"; dataGridView2[2, 5].Value = "Плохо"; dataGridView2[3, 5].Value = "Плохо"; dataGridView2[4, 5].Value = "Отлично";

 

            texnXarakter1 = ReadFromTable(dataGridView1, 3);

            texnXarakter2 = ReadFromTable(dataGridView2, 3);

 

        }

 

        public double[,] ReadFromTable(DataGridView dg)//запись данных из таблицы в матрицу

        {

            double[,] matr=new double[dg.RowCount,dg.ColumnCount];

            for (int i = 0; i < matr.GetLength(0); i++)

                for (int j = 0; j < matr.GetLength(1); j++)

                    matr[i, j] = Convert.ToDouble(dg[j, i].Value);

            return matr;

        }

 

        public double[,] ReadFromTable(DataGridView dg,int n)//запись данных из таблицы в матрицу

        {

            double[,] matr = new double[n, dg.ColumnCount];

            for (int i = 0; i < n; i++)

                for (int j = 0; j < matr.GetLength(1); j++)

                    matr[i, j] = Convert.ToDouble(dg[j, i].Value);

            return matr;

        }

               

        private void button1_Click_1(object sender, EventArgs e)//полный перебор

        {

            if (Proverka(dataGridView2) == true && Proverka(dataGridView1) == true && ProverkaOgranich() == true)//все данные введены

            {

                if (radioButton1.Checked || radioButton2.Checked || radioButton3.Checked)

                {

                    bestStanki.Clear();

                    listBox1.Items.Clear();

                    int i = -1;//номер лучших альтернативы

                    int i2=-1; int i3=-1;

                    OdnokreterialnaiaOptimizacia od = new OdnokreterialnaiaOptimizacia(texnXarakter1, texnXarakter2, Convert.ToInt32(textBox4.Text), Convert.ToDouble(textBox3.Text),

                        Convert.ToInt32(textBox2.Text), Convert.ToDouble(textBox1.Text));

                    if (radioButton1.Checked)

                    {

                        bestStanki = od.PolniyPerebor("энергоэффективность");

                        i = od.Min(bestStanki);

                        bestStanki[i] = int.MaxValue;

                        i2 = od.Min(bestStanki);

                        bestStanki[i2] = int.MaxValue;

                        i3 = od.Min(bestStanki);

                    }

                    if (radioButton2.Checked)

                    {

                        bestStanki = od.PolniyPerebor("стоимость");

                        i = od.Min(bestStanki);

                        bestStanki[i] = int.MaxValue;

                        i2 = od.Min(bestStanki);

                        bestStanki[i2] = int.MaxValue;

                        i3 = od.Min(bestStanki);

                    }

                    if (radioButton3.Checked)

                    {

                        bestStanki = od.PolniyPerebor("производительность");

                        i = od.Max(bestStanki);

                        bestStanki[i] = int.MinValue;

                        i2 = od.Max(bestStanki);

                        bestStanki[i2] = int.MinValue;

                        i3 = od.Max(bestStanki);

                    }

                    if (i != -1 && i2!=-1 && i3 !=-1)

                    {

                        listBox1.Items.Add("Лучшая альтернатива 1 - ST1" + od.stanki1[i].ToString() + " и ST2" + od.stanki2[i].ToString());

                    }

 

                    else MessageBox.Show("Выберите критерий для перебора!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }

                else MessageBox.Show("Выберите критерий для перебора!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            else MessageBox.Show("Введены не все данные!!!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);

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