Автор работы: Пользователь скрыл имя, 24 Сентября 2015 в 15:57, курсовая работа
Оптимизация как раздел математики существует достаточно давно. Оптимизация – это выбор, то есть то, чем постоянно приходится заниматься в повседневной жизни. Хотя конечной целью оптимизации является отыскание наилучшего или "оптимального" решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее нахождение наилучшего варианта среди всех существующих. В любой практической оптимизационной задаче существует много совпадающих этапов.
}
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_
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] +
}
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 однокритериальнаяToolStripMenu
{
Form f = null;
f = new Form3();
f.ShowDialog();
}
private void многокритериальнаяToolStripMen
{
Form f = null;
f = new Form4();
f.ShowDialog();
}
private void оПрограммеToolStripMenuItem_
{
Form f = null;
f = new Form2();
f.ShowDialog();
}
private void выходToolStripMenuItem_Click(o
{
Environment.Exit(0);
}
private void исходныеДанныеToolStripMenuIte
{
System.Diagnostics.Process.
}
}
}
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_
{
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(o
{
this.Close();
}
private void выходToolStripMenuItem_Click(o
{
Environment.Exit(0);
}
private void button1_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
label2.Text = OneCriterionOptimization.
label4.Text = OneCriterionOptimization.
label6.Text = OneCriterionOptimization.
label8.Text = OneCriterionOptimization.
label10.Text = OneCriterionOptimization.
FileStream fileName = new FileStream("file_2.csv",FileMo
StreamWriter file = new StreamWriter(fileName, Encoding.UTF8);
file.WriteLine(OneCriterionOpt
file.Close();
sw.Stop();
MessageBox.Show(Convert.
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.
}
private void исходныеДанныеToolStripMenuIte
{
System.Diagnostics.Process.
}
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(o
{
this.Close();
}
private void исходныеДанныеToolStripMenuIte
{
System.Diagnostics.Process.
}
private void выходToolStripMenuItem_Click(o
{
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]
}
private void button2_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
_paretoTablets = _tablets;
List<int> deletetIndex = MultiCriterionOptimization.
foreach (var index in deletetIndex)
{
dataGridView1.Rows.RemoveAt(
}
_tablets = _paretoTablets;
criterionValue = new double[_criterionsNames.
GetValuesFromTable(
label8.Text = MultiCriterionOptimization.
label9.Text = MultiCriterionOptimization.
label10.Text = MultiCriterionOptimization.
label11.Text = MultiCriterionOptimization.
label12.Text = MultiCriterionOptimization.
FileStream fileName = new FileStream("file_3.csv", FileMode.Truncate, FileAccess.Write);
StreamWriter file = new StreamWriter(fileName, Encoding.UTF8);
file.WriteLine(MultiCriterionO
file.Close();
sw.Stop();
MessageBox.Show(Convert.
MessageBox.Show("Результаты оптимизации занесены в файл 3.csv", "Данные записаны", MessageBoxButtons.OK, MessageBoxIcon.Information);
Width = 987;
}
private void button3_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.
}
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()