Список использованных источников
Min_is = new double; // предельные (минимальные) значения индекса согласия. Private double for_mins (int _1, int _2, double ocenki) // получение индексов несогласия. Public void Elektra (double ocenki, double VesaKr) // выполнение метода электра. Исходный код формы «Многокритериальная оптимизация». Исходный код формы «Однокритериальная оптимизация». If (Convert.ToInt32(dbDataSet.Cars.Rows… Читать ещё >
Список использованных источников (реферат, курсовая, диплом, контрольная)
- 1. Вентцель Е. С. Исследование операций: задачи, принципы, методология.-2-е изд., стер. М.: Наука. Гл. ред. Физ.-мат. Лит., 1988.
- 2. Акимов, С. В. Проблемы автоматизации структурно-параметрического синтеза / С. В. Акимов. — СПб.: Челябинск, 2006. — 58 с.
- 3. Горбунов, В. М. Теория принятия решений. Учебное пособие / В. М. Горбунов. Томск: Национальный исследовательский томский политехнический университет, 2010. 67 с.
- 4. Матузко, Ю. О. Теория принятия решений. Учебно-методическое пособие / Ю. О. Матузко. Запорожье: Запорожская государственная инженерная академия, 2009. 61 с.
- 5. Лесин, В. В. Основы методов оптимизации / В. В. Лесин, Ю. П. Лисовец. — М.: Изд-во МАИ, 1995. — 344 с.
- 6. Шикин, Е. В. Исследование операций / Е. В. Шикин, Г. Е. Шикина. М.: ТК Велби, Изд-во Проспект, 2006. 280 с.
- 7. Федоров, A. Microsoft Visual Studio 2010: первое знакомство / А. Федоров. М.: Books Gui, 2009. — 92 с.
- 8. Ногин В. Д. Принятие решений в многокритериальной среде: количественный подход. / В. Д. Ногин — М.: ФИЗМАТЛИТ, 2005, 176 с.
- 9. Подиновский, В.В. Парето-оптимальные решения многокритериальных задач. / В. В. Подиновский, В. Д. Ногин. М.: Наука. Главная редакция физико-математической литературы, 1982. — 256 с.
Приложение А
(обязательное) Исходный код главной формы.
using System;
using System. Collections;
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 OPR.
{.
public partial class Form1: Form.
{.
public Form1().
{.
InitializeComponent ();
}.
public double[,] Parametri;
public double[,] x;
public ArrayList alternativi = new ArrayList ();
private void Form1_Load (object sender, EventArgs e).
{.
// TODO: данная строка кода позволяет загрузить данные в таблицу «dbDataSet.Cars». При необходимости она может быть перемещена или удалена.
this.carsTableAdapter.Fill (this.dbDataSet.Cars);
dataGridView1.RowHeadersWidth = 120;
for (int i=0; i.
dataGridView1.Rows[i]. HeaderCell. Value = dataGridView1[1,i]. Value+" «;
}.
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;
}.
private void однокритериальнаяОптимизацияToolStripMenuItem_Click (object sender, EventArgs e).
{.
Form opt1 = new OdnOpt ();
opt1.Visible = true;
}.
private void многокритериальнаяОптимизацияToolStripMenuItem_Click (object sender, EventArgs e).
{.
Form opt2 = new MnogOpt (this);
opt2.Visible = true;
}.
}.
}.
Приложение Б.
(обязательное) Исходный код формы «Однокритериальная оптимизация».
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 OPR.
{.
public partial class OdnOpt: Form.
{.
int nom;
public OdnOpt ().
{.
InitializeComponent ();
}.
private void button1_Click (object sender, EventArgs e).
{.
if (textBox1.Text ≠ «»).
{.
bool f = true;
int min = int. MaxValue;
string[] opt = new string[7];
listBox1.Items.Clear ();
listBox1.Items.Add («Наилучший автомобиль: «);
for (int i = 0; i < dbDataSet.Cars.Rows.Count; i++).
{.
if (Convert.ToInt32(dbDataSet.Cars.Rows[i][2]. ToString ()) > Convert. ToInt32(textBox1.Text)).
{.
f = false;
if (Convert.ToInt32(dbDataSet.Cars.Rows[i][2]. ToString ()) < min).
{.
opt[0] = dbDataSet.Cars.Rows[i][0]. ToString ();
opt[1] = dbDataSet.Cars.Rows[i][1]. ToString ();
opt[2] = dbDataSet.Cars.Rows[i][2]. ToString ();
opt[3] = dbDataSet.Cars.Rows[i][3]. ToString ();
opt[4] = dbDataSet.Cars.Rows[i][4]. ToString ();
opt[5] = dbDataSet.Cars.Rows[i][5]. ToString ();
opt[6] = dbDataSet.Cars.Rows[i][6]. ToString ();
min = Convert. ToInt32(opt[2]);
nom = i;
}.
}.
}.
if (f).
{.
listBox1.Items.Add («Нет подходящих автомобилей»);
}.
else.
{.
listBox1.Items.Add (opt[1] + «стоимостью: «+ min + «млн.руб;»);
listBox1.Items.Add («Характеристики: «);
listBox1.Items.Add («Объем двигателя: «+ opt[3] + «л»);
listBox1.Items.Add («Тип автомобиля: «+ opt[4]);
listBox1.Items.Add («Наличие кондиционера: «+ opt[5]);
listBox1.Items.Add («Оценка пользователя: «+ opt[6]);
}.
}.
}.
private void OdnOpt_Load (object sender, EventArgs e).
{.
// TODO: данная строка кода позволяет загрузить данные в таблицу «dbDataSet.Cars». При необходимости она может быть перемещена или удалена.
this.carsTableAdapter.Fill (this.dbDataSet.Cars);
}.
private void textBox1_KeyPress (object sender, KeyPressEventArgs e).
{.
if (e.KeyChar ≠ 8 && (e.KeyChar 57)).
e.Handled = true;
}.
}.
}.
Приложение В.
(обязательное) Исходный код формы «Многокритериальная оптимизация».
using System;
using System. Collections;
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 OPR.
{.
public partial class MnogOpt: Form.
{.
Form1 f1;
public double a, b;
public MnogOpt (Form1 f).
{.
Initi…
}.
public class MnogokrOptimiz.
{.
double[,] x;
public ArrayList alt = new ArrayList ();
public ArrayList av = new ArrayList ();
public MnogokrOptimiz (double[,] x, ArrayList alternativi).
{.
this.x = x; // оценки экспертов по критериям.
this.alt = alternativi;
}.
//** МЕТОД РАНГА**//.
public double[] SymmaOcenokKriter ().
{.
double[] sum = new double[x.GetLength (1)];
for (int j = 0; j < x. GetLength (1); j++).
for (int i = 0; i < x. GetLength (0); i++).
sum[j] = sum[j] + x[i, j];
return sum;
}.
public double SymmaVsehOcenok (double[] massiv).
{.
double sum = 0;
for (int i = 0; i < massiv. Length; i++).
sum = sum + massiv[i];
return sum;
}.
public double[] MetodRanga ().
{.
double[] massiv = new double[x.GetLength (1)];
massiv = SymmaOcenokKriter ();
double sum = SymmaVsehOcenok (massiv);
double[] VesaKriter = new double[massiv.Length];
for (int i = 0; i < massiv. Length; i++).
VesaKriter[i] = massiv[i] / sum;
return VesaKriter;
}.
//**МЕТОД ПАРЕТО**//.
public void MetodPareto (double[,] ocenki).
{.
int i1, i2;
for (int i = 0; i < alt. Count — 1; i++).
for (int j = i + 1; j < alt. Count; j++).
{.
i1 = Convert. ToInt32(alt[i]);
i2 = Convert. ToInt32(alt[j]);
if (ocenki[i1, 0] >= ocenki[i2, 0] && ocenki[i1, 1] >= ocenki[i2, 1] && ocenki[i1, 2] >= ocenki[i2, 2] && ocenki[i1, 3] >= ocenki[i2, 3] &&.
ocenki[i1, 4] >= ocenki[i2, 4]).
{.
alt.RemoveAt (j);
}.
if (ocenki[i1, 0] <= ocenki[i2, 0] && ocenki[i1, 1] <= ocenki[i2, 1] && ocenki[i1, 2] <= ocenki[i2, 2] && ocenki[i1, 3] <= ocenki[i2, 3] &&.
ocenki[i1, 4] <= ocenki[i2, 4]).
{.
alt.RemoveAt (i);
i = 0;
}.
}.
}.
public double[,] mis, mins;
public double[] min_is, max_ins;
//**МЕТОД ЭЛЕКТРА**//.
public void Elektra (double[,] ocenki, double[] VesaKr) // выполнение метода электра.
{.
mis = new double[ocenki.GetLength (0), ocenki. GetLength (0)]; // матрица индексов согласия.
for (int i = 0; i < ocenki. GetLength (0); i++).
for (int j = 0; j < ocenki. GetLength (0); j++).
mis[i, j] = for_mis (i, j, ocenki, VesaKr); // элемент матрицы равен элементу, полученному в методе for_mis.
mins = new double[ocenki.GetLength (0), ocenki. GetLength (0)]; // матрица индексов несогласия.
for (int i = 0; i < ocenki. GetLength (0); i++).
for (int j = 0; j < ocenki. GetLength (0); j++).
mins[i, j] = for_mins (i, j, ocenki); // элемент матрицы несогласия равен элементу, полученному в методе for_mis.
min_is = new double[mis.GetLength (0)]; // предельные (минимальные) значения индекса согласия.
double min = double. MaxValue;
for (int i = 0; i < mis. GetLength (0); i++).
{.
min = double. MaxValue;
for (int j = 0; j < mis. GetLength (1); j++).
if (mis[i, j] < min).
min = mis[i, j];
min_is[i] = min;
// MessageBox. Show (min_is[i] + «min»);
}.
max_ins = new double[mins.GetLength (0)]; // предельные (максимальные) значения индекса несогласия.
double max = 0;
for (int i = 0; i < mins. GetLength (0); i++).
{.
max = 0;
for (int j = 0; j < mins. GetLength (1); j++).
if (mins[i, j] > max).
max = mins[i, j];
max_ins[i] = max;
//MessageBox.Show (max_ins[i]+" max");
}.
}.
private double for_mis (int _1, int _2, double[,] ocenki, double[] VesKr) // метод для вычисления индексо согласия.
{.
double ves = 0;
for (int i = 0; i < ocenki. GetLength (1); i++).
if (ocenki[_1, i] >= ocenki[_2, i]) // если критерий выше или равен.
{.
ves = ves + VesKr[i]; // суммируем веса этих критериев.
}.
return (ves);
}.
private double for_mins (int _1, int _2, double[,] ocenki) // получение индексов несогласия.
{.
double max = 0;
for (int i = 0; i < ocenki. GetLength (1); i++).
if (ocenki[_1, i] <= ocenki[_2, i]) // если критерий не лучше.
{.
if (max < ocenki[_2, i] - ocenki[_1, i]).
{.
max = ocenki[_2, i] - ocenki[_1, i]; // находим максимум между разностями оценок в безразмерной форме.
}.
}.
return (max);
}.
public int[] best (double a, double b).
{.
int fl = 0;
int k = 0;
int j = 0;
int[] nom = new int[min_is.Length];
for (int i = 0; i < nom. Length; i++).
nom[i] = 1000;
for (int i = 0; i < (min_is.Length)&&j.
{.
if (i == Convert. ToInt32(alt[j])).
{.
fl = 0;
if (min_is[i] > a && max_ins[i] < b).
{.
fl++;
nom[k] = i; // определение номера лучшего автомобиля.
k++;
}.
j++;
}.
}.
return nom;
}.
public int Max (ArrayList massiv).
{.
int nMax = 0;
double max = Convert. ToDouble (massiv[0]);
for (int i = 0; i < massiv. Count; i++).
if (Convert.ToDouble (massiv[i]) > max).
{.
max = Convert. ToDouble (massiv[i]);
nMax = i;
}.
return nMax;
}.
}.
class Perevod.
{.
public double[,] ocenki;
public Perevod (int m, int n).
{.
ocenki = new double[n, m];
}.
public double Max (double[] kriteriy).
{.
double max = kriteriy[0];
for (int i = 1; i < kriteriy. Length; i++).
if (kriteriy[i] > max) max = kriteriy[i];
return max;
}.
public double Min (double[] kriteriy).
{.
double min = kriteriy[0];
for (int i = 1; i < kriteriy. Length; i++).
if (kriteriy[i] < min) min = kriteriy[i];
return min;
}.
public void BezrazmVid (double[] kriteriy, int i, bool isMax).
{.
double max = Max (kriteriy);
double min = Min (kriteriy);
if (isMax == false).
for (int j = 0; j < kriteriy. Length; j++).
ocenki[j, i] = min/kriteriy[j];
else.
for (int j = 0; j < kriteriy. Length; j++).
ocenki[j, i] = kriteriy[j] / max;
}.
public void DaNet (string[] kriteriy, int i).
{.
for (int j = 0; j < kriteriy. Length; j++).
if (kriteriy[j] == «да») ocenki[j, i] = 0.67;
else ocenki[j, i] = 0.33;
}.
public void Tip (string[] kriteriy, int i).
{.
for (int j = 0; j < kriteriy. Length; j++).
if (kriteriy[j] == «грузовой») ocenki[j, i] = 0.67;
else ocenki[j, i] = 0.33;
}.
public void PerevodPoshksle (string[] kriteriy, int i).
{.
for (int j = 0; j < kriteriy. Length; j++).
{.
if (kriteriy[j] == «отлично») ocenki[j, i] = 0.9;
if (kriteriy[j] == «хорошо») ocenki[j, i] = 0.7;
if (kriteriy[j] == «удовлетворительно») ocenki[j, i] = 0.5;
if (kriteriy[j] == «плохо») ocenki[j, i] = 0.3;
if (kriteriy[j] == «очень плохо») ocenki[j, i] = 0.1;
}.
}.
}.
private void button2_Click (object sender, EventArgs e).
{.
Form inf = new Info (this);
inf.Visible = true;
}.
}.
}.
Приложение Г.
(обязательное) Исходный код формы «Дополнительно».
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 OPR.
{.
public partial class Info: Form.
{.
MnogOpt f2;
public Info (MnogOpt f).
{.
InitializeComponent ();
f2 = f;
}.
private void Info_Load1(object sender, EventArgs e).
{.
// TODO: данная строка кода позволяет загрузить данные в таблицу «dbDataSet.Cars». При необходимости она может быть перемещена или удалена.
this.carsTableAdapter.Fill (this.dbDataSet.Cars);
PrintElectra ();
Print ();
}.
public void Print ().
{.
dataGridView5.RowCount = 1;
dataGridView5.ColumnCount = 5;
dataGridView5.RowHeadersVisible = false;
for (int i = 0; i < dataGridView5. ColumnCount; i++).
dataGridView5[i, 0]. Value = f2. VesaKrit[i];
dataGridView3.RowCount = f2.ocenki.GetLength (0);
dataGridView3.ColumnCount = f2.ocenki.GetLength (1);
dataGridView3.RowHeadersVisible = false;
dataGridView3.ColumnHeadersVisible = false;
for (int i = 0; i < f2.ocenki.GetLength (1); i++).
dataGridView3.Columns[i]. Width = 75;
for (int i = 0; i < f2.ocenki.GetLength (0); i++).
for (int j = 0; j < f2.ocenki.GetLength (1); j++).
dataGridView3[j, i]. Value = f2. ocenki[i, j];
dataGridView1.RowCount = f2.alter.Length;
for (int i = 0; i < dataGridView1. RowCount; i++).
dataGridView1.Rows[i]. HeaderCell. Value = f2. pareto[i, 0];
dataGridView1.RowHeadersWidth = 142;
dataGridView1.ColumnCount = 5;
for (int i = 0; i < f2.pareto.GetLength (0); i++).
for (int j = 1; j < f2.pareto.GetLength (1); j++).
dataGridView1[j — 1, i]. Value = f2. pareto[i, j];
}.
public void PrintElectra ().
{.
dataGridView6.RowCount = f2.alter.Length;
dataGridView6.ColumnCount = 1;
int ii = 0;
for (int i = 0; i < f2. pr_is.GetLength (0)&&ii.
if (f2.alter[ii] == i).
{.
dataGridView6[0, ii]. Value = f2. pr_is[i];
ii++;
}.
dataGridView6.RowHeadersVisible = false;
dataGridView6.ColumnHeadersVisible = false;
dataGridView6.Columns[0]. Width = 75;
ii = 0;
dataGridView2.RowCount = f2.alter.Length;
dataGridView2.ColumnCount = f2.ms.GetLength (1);
for (int i = 0; i < f2.ms.GetLength (0)&&ii.
if (f2.alter[ii] == i).
{.
for (int j = 0; j < f2.ms.GetLength (1); j++).
dataGridView2[j, ii]. Value = f2. ms[i, j];
ii++;
}.
dataGridView2.RowHeadersVisible = false;
dataGridView2.ColumnHeadersVisible = false;
for (int i = 0; i < f2.ms.GetLength (1); i++).
dataGridView2.Columns[i]. Width = 75;
ii = 0;
dataGridView4.RowCount = f2.alter.Length;
dataGridView4.ColumnCount = f2.mns.GetLength (1);
for (int i = 0; i < f2.mns.GetLength (0)&&ii.
if (f2.alter[ii] == i).
{.
for (int j = 0; j < f2.mns.GetLength (1); j++).
dataGridView4[j, ii]. Value = f2. mns[i, j];
ii++;
}.
dataGridView4.RowHeadersVisible = false;
dataGridView4.ColumnHeadersVisible = false;
for (int i = 0; i < f2.mns.GetLength (1); i++).
dataGridView4.Columns[i]. Width = 75;
label4.Text = f2.a.ToString ();
label7.Text = f2.b.ToString ();
ii = 0;
dataGridView7.RowCount = f2.alter.Length;
dataGridView7.ColumnCount = 1;
for (int i = 0; i < f2. pr_ins.GetLength (0)&&ii.
if (f2.alter[ii] == i).
{.
dataGridView7[0, ii]. Value = f2. pr_ins[i];
ii++;
}.
dataGridView7.RowHeadersVisible = false;
dataGridView7.ColumnHeadersVisible = false;
dataGridView7.Columns[0]. Width = 75;
}.
}.
}.