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

Разработка приложения, предназначенного для помощи в осуществлении оптимального выбора автомобиля для организации. Определение особенностей механизма, производящего расчет оптимального решения на основе однокритериального и многокритериального анализа.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.11.2015
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

}

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<alt.Count; i++)

{

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_Load_1(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<f2.alter.Length; i++)

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<f2.alter.Length; i++)

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<f2.alter.Length; i++)

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<f2.alter.Length; i++)

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;

}

}

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.