Программное средство для выбора оптимального автомобиля для сотрудников организации
Разработка приложения, предназначенного для помощи в осуществлении оптимального выбора автомобиля для организации. Определение особенностей механизма, производящего расчет оптимального решения на основе однокритериального и многокритериального анализа.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
...Подобные документы
Разработка программы, относящейся к классу задач маршрутизации и системы принятия решения, предназначенной для выбора оптимального маршрута перемещения в лабиринте из начальной клетки в конечную, с учетом необходимости посещения определенных клеток.
контрольная работа [14,7 K], добавлен 11.11.2010- Создание компьютерного приложения для расчета оптимального набора ценных бумаг в портфеле инвестиций
Формирование инвестиционного портфеля и его диверсификация. Расчет показателей оптимального портфеля. Задача выбора портфеля максимальной эффективности из всех портфелей, имеющих риск не более заданного. Работа с файлами. Упрощение работы с программой.
курсовая работа [435,8 K], добавлен 26.02.2013 Определение оптимального плана выпуска продукции частного предприятия по изготовлению мебели с применением метода линейного программирования (симплекс-метод). Построение схемы движения информации в подсистеме оптимального плана выпуска продукции.
лабораторная работа [301,5 K], добавлен 08.06.2009Параметры автомобиля, используемые в экспертной системе. Задание нечетких и лингвистических переменных, виды термов. Список правил для функционирования системы, результаты анализа ее работы. Применение алгоритма Мамдани в системах нечеткой логики.
курсовая работа [1,5 M], добавлен 10.02.2013Разработка автоматизированной программы выбора оптимального решения с использованием критерия Гермейера и минимаксного критерия; блок-схема программы. Особенности подхода Гермейера к отысканию пригодных к компромиссу решений в области полиоптимизации.
контрольная работа [524,4 K], добавлен 05.07.2014Программные продукты для решения задачи построения оптимального маршрута. Выбор аппаратных и программных средств для построения маршрута обхода пациентов. Математическая модель муравьиного алгоритма: состав, структура, тестирование, отладка, реализация.
дипломная работа [1,9 M], добавлен 03.12.2017Общее число неповторяющихся сообщений. Вычисление скорости передачи информации и пропускной способности каналов связи. Определение избыточности сообщений и оптимальное кодирование. Процедура построения оптимального кода по методике Шеннона-Фано.
курсовая работа [59,4 K], добавлен 17.04.2009Методы определения оптимального плана производства (приобретения) продукции с учетом ограниченного обеспечения ресурсами различного вида. Технология поиска оптимального решения задач линейного программирования (ЗЛП) с помощью итоговой симплекс-таблицы.
лабораторная работа [42,8 K], добавлен 11.03.2011Применения языка логического программирования Пролог и языка программирования Haskell для реализации алгоритма поиска оптимального каркаса графа. Алгоритм Прима, преимущество перед другими алгоритмами нахождения оптимального каркаса, близких к полным.
курсовая работа [230,2 K], добавлен 13.06.2012Выявление связей входных-выходных переменных. Алгоритм работы системы в режимах нормальной эксплуатации и ручного управления. Построение регрессионной модели и на ее основе определение оптимального режима работы химического реактора. Выбор регулятора.
курсовая работа [9,9 M], добавлен 18.01.2015Анализ вариантов проектных решений и выбор на его основе оптимального решения. Синтез функциональной схемы микропроцессорной системы на основе анализа исходных данных. Процесс разработки аппаратного и программного обеспечения микропроцессорной системы.
курсовая работа [469,1 K], добавлен 20.05.2014Разработка модифицированных алгоритмов поиска оптимального маршрута в графе. Задание дополнительных условий и ограничений. Реализация модели для внутреннего представления транспортной сети. Создание программного комплекса в среде Visual Studio 2010.
курсовая работа [1,1 M], добавлен 16.04.2015Обоснование выбора метода реализации функции выбора наиболее выгодного потребительского кредита. Реализация разрабатываемого web-приложения, тестирование функции рекомендации наиболее выгодного потребительского кредита на основе предпочтений пользователя.
дипломная работа [1,1 M], добавлен 22.10.2016Проектирование информационной модели данных, серверной и клиентской частей приложения. Обеспечение коллективного доступа. Составление оптимального набора тестов. Разработка инструкций по сопровождению и эксплуатации клиент–серверного приложения.
дипломная работа [2,7 M], добавлен 07.07.2012Математическая модель алгоритма с модификацией муравьиной колонии. Выбор аппаратных и программных средств для разработки программы. Особенность построения оптимального маршрута обхода пациентов. Характеристика тестирования и отладки данного проекта.
дипломная работа [1,9 M], добавлен 17.11.2017Сущность теории графов и сетевого моделирования. Выбор оптимального пути и стоимости переезда коммивояжера с помощью метода ветвей и границ. Разработка программы выбора самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу.
курсовая работа [3,5 M], добавлен 08.08.2013Методы решения задачи оптимального резервирования технической системы. Решение задачи методами неопределенных множителей Лагранжа и динамического программирования. Построение оптимальной схемы системы при нагруженном резервировании ее элементов.
лабораторная работа [31,5 K], добавлен 10.06.2009Определение и описание "генетического алгоритма", идея которого состоит в организации эволюционного процесса, конечной целью которого является получение оптимального решения в сложной комбинаторной задаче. Пример его тривиальной реализации на C++.
контрольная работа [172,1 K], добавлен 24.05.2010Структурная схема объекта управления (ОУ). Граничные условия, критерий качества вида. Вид возмущающего воздействия. Аналитическое выражение оптимального программного управляющего воздействия u*(t), переводящее ОУ из начального состояния в конечное.
практическая работа [419,8 K], добавлен 21.11.2008Формирование инвестиционного портфеля. Диверсификация портфеля. Портфель Марковица минимального риска. Задача формирования портфеля максимальной эффективности из всех портфелей, имеющих риск не более заданного. Расчет оптимального набора ценных бумаг.
курсовая работа [574,6 K], добавлен 22.04.2012