Программное средство для выбора оптимального компьютера для сотрудников организации

Автор работы: Пользователь скрыл имя, 24 Сентября 2015 в 15:57, курсовая работа

Описание работы

Оптимизация как раздел математики существует достаточно давно. Оптимизация – это выбор, то есть то, чем постоянно приходится заниматься в повседневной жизни. Хотя конечной целью оптимизации является отыскание наилучшего или "оптимального" решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее нахождение наилучшего варианта среди всех существующих. В любой практической оптимизационной задаче существует много совпадающих этапов.

Файлы: 1 файл

Зигинов.docx

— 1.45 Мб (Скачать файл)

        }

        public string Konf

        {

            get { return _konf; }

            set { _konf = value; }

        }

        public override string ToString()

        {

            return "\nCтоимость: " + Cost + " бел. руб.\n Размер экрана: " + Razm_ekrana +  " ''\n" +

                   " Вес: " + Ves + " кг\n Разрешение камеры: " + Razr_cam + " Мп\n Видеоконференции: " + Konf;

        }

    }

}

 

MultiCriterionOptimization.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.IO;

 

namespace CourseProject

{

    static class MultiCriterionOptimization

    {

        static public double[] Range(double[,] cc)

        {

            int rows = cc.GetLength(0);

            int cols = cc.GetLength(1);

            double[] sums = new double[rows];

            double[] result = new double[rows];

            double TotalSum = 0;

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

            {

                for (int j = 0; j < cols; j++)

                {

                    sums[i] += cc[i, j];

                    TotalSum += cc[i, j];

                }

            }

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

            {

                result[i] = Convert.ToDouble(sums[i]) / Convert.ToDouble(TotalSum);

            }return result;

        }

        static public List<int> ParetaMethod(List<Line> tablets)

        {

            List<int> index = new List<int>();

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

            {

                if (i == (tablets.Count - 1))

                {

                    break;

                }

                if (tablets[i].Cost >= tablets[i + 1].Cost && tablets[i].Razm_ekrana <= tablets[i + 1].Razm_ekrana &&

                    tablets[i].Ves >= tablets[i + 1].Ves &&

                    tablets[i].Razr_cam <= tablets[i + 1].Razr_cam &&

                    tablets[i].KonfMark <= tablets[i + 1].KonfMark)

                {

                    tablets.Remove(tablets[i]);

                    index.Add(i);

                }

            }return index;

        }

        static public Line HierarchyAnalys(double[,] criterionMarks, List<Line> tablets)

        {

            double[] criterion = Range(criterionMarks);

 

            StreamWriter file5 = new StreamWriter("file_5.csv");

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

            {

                file5.WriteLine(criterion[i]);

            }

            file5.Close();

            double[] cost = new double[tablets.Count];

            double[] razm_ekrana = new double[tablets.Count];

            double[] ves = new double[tablets.Count];

            double[] razr_kam = new double[tablets.Count];

            double[] konf = new double[tablets.Count];

            double[] optimazedResult = new double[tablets.Count];

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

            {

                cost[i] = tablets[i].Cost;

                razm_ekrana[i] = tablets[i].Razm_ekrana;

                ves[i] = tablets[i].Ves;

                razr_kam[i] = tablets[i].Razr_cam;

                konf[i] = tablets[i].KonfMark;

            }

 

            cost = CriterionWeightByMin(cost);

            razm_ekrana = CriterionWeightByMax(razm_ekrana);

            ves = CriterionWeightByMin(ves);

            razr_kam = CriterionWeightByMax(razr_kam);

            konf = CriterionWeightByMax(konf);

 

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

            {

                optimazedResult[i] = criterion[0] * cost[i] + criterion[1] * razm_ekrana[i] + criterion[2] * ves[i] +

                                     criterion[3] * razr_kam[i] + criterion[4] * konf[i];

            }

            double max = optimazedResult.Max();

            List<double> resultList = optimazedResult.ToList();

            int index = resultList.IndexOf(max);

            return tablets[index];

        }

        static private double[] CriterionWeightByMin(double[] values)

        {

            double min = values.Min();

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

                values[i] = min / values[i];

            return values;

        }

        static private double[] CriterionWeightByMax(double[] values)

        {

            double max = values.Max();

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

                values[i] = values[i] / max;

            return values;

        }

    }

}

 

OneCriterionOptimization.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace CourseProject

{

    static class OneCriterionOptimization

    {

        public static Line Optimize(List<Line> tablets)

        {

            Line bestTablet = null;

            if (!tablets.Any())

            {

                return null;

            }

            bestTablet = tablets[0];

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

            {

                if (tablets[i].Cost < bestTablet.Cost)

                    bestTablet = tablets[i];

            }

            return bestTablet;

        }

    }

}

 

Form1.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace CourseProject

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void однокритериальнаяToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form f = null;

            f = new Form3();

            f.ShowDialog();

        }

 

        private void многокритериальнаяToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form f = null;

            f = new Form4();

            f.ShowDialog();

        }

 

        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form f = null;

            f = new Form2();

            f.ShowDialog();

        }

 

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Environment.Exit(0);

        }

 

        private void исходныеДанныеToolStripMenuItem_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Process.Start("file_1.csv");

        }

    }

}

 

Form2.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace CourseProject

{

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

 

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text =  "Тема курсоваго проекта: Программное средство для выбора оптимального \nкомпьютера для сотрудников организации.\n";    

    label1.Text = label1.Text + "Исходные данные к проекту:\n";

            label1.Text = label1.Text + "Критерии выбора: 1) Стоимость; 2) Размер экрана; 3) Вес; 4) Разрешение камеры; \n5) Возможность проведения видеоконференций.\n";

            label1.Text = label1.Text + "Однокритериальная оптимизация: Параметр – стоимость\n";

            label1.Text = label1.Text + "Многокритериальная оптимизация:\n";

            label1.Text = label1.Text + "Метод экспертного анализа – метод Ранга\n";

 label1.Text = label1.Text + "Число экспертов – 3\n";

         label1.Text = label1.Text + "Метод отбора – Парето\n";

             label1.Text = label1.Text + "Выбор лучшего решения – Метод анализа иерархий\n";

        }

 

        private void закрытьToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.Close();

        }

    }

}

 

Form3.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Diagnostics;

using System.IO;

 

namespace CourseProject

{

    public partial class Form3 : Form

    {

        private List<Line> _tablets;

 

        public Form3()

        {

            InitializeComponent();

        }

 

        private void Form3_Load(object sender, EventArgs e)

        {

            Input();

        }

 

        private void назадToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.Close();

        }

 

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Environment.Exit(0);

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Stopwatch sw = new Stopwatch();

            sw.Start();

 

            label2.Text = OneCriterionOptimization.Optimize(_tablets).Cost + " бел. руб.";

            label4.Text = OneCriterionOptimization.Optimize(_tablets).Razm_ekrana + " ''";

            label6.Text = OneCriterionOptimization.Optimize(_tablets).Ves + " кг";

            label8.Text = OneCriterionOptimization.Optimize(_tablets).Razr_cam + " Мп";

            label10.Text = OneCriterionOptimization.Optimize(_tablets).Konf.ToString();

 

            FileStream fileName = new FileStream("file_2.csv",FileMode.Truncate, FileAccess.Write);

            StreamWriter file = new StreamWriter(fileName, Encoding.UTF8);

            file.WriteLine(OneCriterionOptimization.Optimize(_tablets).ToString());

            file.Close();

 

            sw.Stop();

            MessageBox.Show(Convert.ToString(sw.Elapsed), "Затраченное время", MessageBoxButtons.OK, MessageBoxIcon.Information);

            MessageBox.Show("Результаты оптимизации занесены в файл file_2.csv", "Данные записаны", MessageBoxButtons.OK, MessageBoxIcon.Information);

            button2.Enabled = true;

            Width = 948;

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Process.Start("file_2.csv");

        }

 

        private void исходныеДанныеToolStripMenuItem_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Process.Start("file_1.csv");

        }

 

        private void Input()

        {

            StreamReader file = new StreamReader("file_1.csv");

            string s = file.ReadToEnd();

            file.Close();

            string[] parts = s.Split('\n');

            _tablets = new List<Line>(); ;

 

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

            {

                string[] marm = parts[i].Split(';');

 

                _tablets.Add(new Line(Convert.ToInt32(marm[0]), Convert.ToDouble(marm[1]), Convert.ToDouble(marm[2]), Convert.ToDouble(marm[3]), marm[4].ToString()));

            }

 

            dataGridView1.RowCount = _tablets.Count;

 

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

            {

                dataGridView1[0, i].Value = _tablets[i].Cost + " бел. руб.";

                dataGridView1[1, i].Value = _tablets[i].Razm_ekrana + " ''";

                dataGridView1[2, i].Value = _tablets[i].Ves + " кг";

                dataGridView1[3, i].Value = _tablets[i].Razr_cam + " Мп";

                dataGridView1[4, i].Value = _tablets[i].Konf.ToString();

            }

        }

    }

}

 

 

Form4.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO;

using System.Diagnostics;

 

namespace CourseProject

{

    public partial class Form4 : Form

    {

        private List<Line> _tablets;

        private List<Line> _paretoTablets;

        private readonly String[] _criterionsNames = { "Стоимость", "Размер экрана", "Вес", "Разрешение камеры", "Возможность проведения в-к" };

        private double[,] criterionValue;

 

        public Form4()

        {

            InitializeComponent();

        }

 

        private void назадToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.Close();

        }

 

        private void исходныеДанныеToolStripMenuItem_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Process.Start("file_1.csv");

        }

 

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Environment.Exit(0);

        }

 

        private void Form4_Load(object sender, EventArgs e)

        {

            Input();

            rangeMethodTableC();

        }

 

        private void dataGridView2_MouseDown(object sender, MouseEventArgs e)

        {

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

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

                    dataGridView2.Rows[i].Cells[j].Style.BackColor = Color.White;

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            Stopwatch sw = new Stopwatch();

            sw.Start();

 

            _paretoTablets = _tablets;

            List<int> deletetIndex = MultiCriterionOptimization.ParetaMethod(_paretoTablets);

            foreach (var index in deletetIndex)

            {

                dataGridView1.Rows.RemoveAt(index);

            }

            _tablets = _paretoTablets;

 

            criterionValue = new double[_criterionsNames.Length, 3];

            GetValuesFromTable(dataGridView2, criterionValue);

 

            label8.Text = MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).Cost + " бел. руб.";

            label9.Text = MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).Razm_ekrana + "''";

            label10.Text = MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).Ves + " кг";

            label11.Text = MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).Razr_cam + " Мп";

            label12.Text = MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).Konf.ToString();

 

            FileStream fileName = new FileStream("file_3.csv", FileMode.Truncate, FileAccess.Write);

            StreamWriter file = new StreamWriter(fileName, Encoding.UTF8);

            file.WriteLine(MultiCriterionOptimization.HierarchyAnalys(criterionValue, _tablets).ToString());

            file.Close();

 

            sw.Stop();

            MessageBox.Show(Convert.ToString(sw.Elapsed), "Затраченное время", MessageBoxButtons.OK, MessageBoxIcon.Information);

            MessageBox.Show("Результаты оптимизации занесены в файл 3.csv", "Данные записаны", MessageBoxButtons.OK, MessageBoxIcon.Information);

            Width = 987;

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            System.Diagnostics.Process.Start("file_3.csv");

        }

 

        private void Input()

        {

            StreamReader file = new StreamReader("file_1.csv");

            string s = file.ReadToEnd();

            file.Close();

            string[] parts = s.Split('\n');

            _tablets = new List<Line>(); ;

 

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

            {

                string[] marm = parts[i].Split(';');

 

                _tablets.Add(new Line(Convert.ToInt32(marm[0]), Convert.ToDouble(marm[1]), Convert.ToDouble(marm[2]), Convert.ToDouble(marm[3]), marm[4].ToString()));

            }

 

            dataGridView1.RowCount = _tablets.Count;

 

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

            {

                dataGridView1[0, i].Value = _tablets[i].Cost + " бел. руб.";

                dataGridView1[1, i].Value = _tablets[i].Razm_ekrana + " ''";

                dataGridView1[2, i].Value = _tablets[i].Ves + " кг";

                dataGridView1[3, i].Value = _tablets[i].Razr_cam + " Мп";

                dataGridView1[4, i].Value = _tablets[i].Konf.ToString();

            }

        }

 

        private void rangeMethodTableC()

Информация о работе Программное средство для выбора оптимального компьютера для сотрудников организации