Математические модели диверсификации (на примере теплоэнергетического предприятия)

Дипломная работа - Менеджмент

Другие дипломы по предмету Менеджмент

рым будут оцениваться проекты. После ввода наименований параметров задаются значения aji элементов матрицы A, где aji это значение параметра с номером j для направления с номером i.

 

Рис. 1 Пример содержания данных в файле input.txt

При запуске программы открывается форма, на которой требуется проставить флаги для тех значений параметров, значение которых для каждого проекта, требуется упорядочить по убыванию, и нажать кнопку Запустить.

 

Рис. 2. Форма, открывающаяся при запуске программы

 

После нажатия на кнопку Запустить выполняется основной программный код, который является реализацией алгоритма поиска решений для задачи выбора наиболее выгодного проекта диверсификации. Открывается форма, на которой приведен вектор, координаты которого являются порядковыми номерами проектов, наиболее выгодных для развития. Так же на форме выводится вектор Z = (z1,…zn), где координаты zi обозначают весовые коэффициенты привлекательности проекта с порядковым номером i.

 

Рис. 3. Форма, содержащая решение задачи

 

Ниже приведен программный код, с комментариями.

class loadinput // Класс loadinput используется для загрузки матрицы A из файла input.txt

{double[,] in1 = new double[20,20];int m, n; // Размерность матрицы Astring[] Desc = new string[20];loadinput()

{ }void load()

{sr = new StreamReader("input.txt", System.Text.Encoding.GetEncoding(1251));= Convert.ToInt32(sr.ReadLine());= Convert.ToInt32(sr.ReadLine());(int j = 1; j < (m + 1); j++)[j] = sr.ReadLine();r1;m1;(int j = 1; j < (m+1); j++)

(\t+)|(\r+))", RegexOptions.IgnoreCase | RegexOptions.Compiled);(m1 = r1.Match(line); m1.Success; m1 = m1.NextMatch())">{line = "";= sr.ReadLine();tmp = 0;int i=0;= new Regex("(?(\t+)|(\r+))", RegexOptions.IgnoreCase | RegexOptions.Compiled);(m1 = r1.Match(line); m1.Success; m1 = m1.NextMatch())

{++;[j, i] = Convert.ToDouble(line.Substring(tmp, m1.Groups["1"].Index - tmp));= m1.Groups["1"].Index;

}++;[j, i] = Convert.ToDouble(line.Substring(tmp, line.Length-tmp));

}

}

}recurs // Класс recurs используется для рекурсивного перебора элементов матрицы X

{int n = 0; //кол-во столбцов матрицы Xint y = 0; //кол-во строк матрицы Xint[] mas = new int [20];bool stop = false;recurs(int n1, int y1)

{= n1; y = y1-1;(int i = 0; i < n; i++)[i] = 0;

}void next(int x)

{(mas[x] < y) mas[x] = mas[x] + 1;

{(x == 0) { stop = true; }

{[x] = 0;(x - 1);

}

}

}

}Points // Класс Points используется для ранжирования элементов матрицы A по строкам

{int x; // Порядковый номер столбца матрицы Adouble y; // Значение элемента матрицы APoints (int key1, double key2)

{= key1;= key2;

}double Y

{

{y;

}

}

}myComparer : IComparer // Класс myComparer используется для ранжирования элементов матрицы A по возрастанию

{IComparer.Compare(object obj1, object obj2)

{(((Points)obj1).Y ((Points)obj2).Y) return 1;return 0;

}

}myComparer2 : IComparer // Класс myComparer2 используется для ранжирования элементов матрицы A по убыванию

{IComparer.Compare(object obj1, object obj2)

{(((Points)obj2).Y ((Points)obj1).Y) return 1;return 0;

}

}partial class Form1 : Form // Основное тело программы

{li;Form1()

{();= new loadinput();.load(); // функция загрузки элементов матрицы A из файла.txt(int i = 0; i < li.m; i++) // Вывод на экран параметров по

которым будут оценены проекты.Items.Insert(i, li.Desc[i + 1]);

}void button2_Click(object sender, EventArgs e)

{.Enabled = false;[,] p = new int[20,20];(int i = 0; i < (li.m); i++)

{[] itArr = new Points[li.n];// массив объектов класса.(int j = 0; j < (li.n); j++) //каждый объект

характеризуется порядковым

номером и значением

элемента в строке матрицы A[j] = new Points(j, li.in1[i + 1, j + 1]); if (checkedListBox1.GetItemChecked(i) == true)

{ myComparer2 c = new myComparer2(); System.Array.Sort(itArr, c); } // упорядочивание объектов

класса Points по убыванию

(возрастанию) значений

элемента в строке матрицы A

{ myComparer c = new myComparer(); System.Array.Sort(itArr, c); }(int j = 0; j < (li.n); j++)[i, j] = itArr[j].x; // вычисление матрицы P строка

матрицы P - вектор Pj, элементы

которого Pji обозначают порядковый

номер проекта занимающий согласноому частному критерию i-ое место[] kk = new int[20];(int j = 0; j < (li.n); j++)[p[i, j]] = j;(int j = 0; j < (li.n); j++)[i, j] = kk[j]; // преобразование матрицы P в

матрицу П, где строка матрицы P

состоит из векторов Пj, элементы

которого Пji обозначают число

проектов которые согласно j-ому

частному критерию являются

предпочтительней чем проекты с

номером i[,] matr_r = new int[20, 20];(int k = 0; k < (li.n); k++)(int l = 0; l < (li.n); l++)

{sum = 0;(int j = 0; j < (li.m); j++)

{+= Math.Abs(l-p[j,k]);

}_r[k, l] = sum; // Расчет матрицы R - матрицы потерь

}

// решается задача о назначении Симплекс-методом[,] matr_x = new int[20, 20];[,] matr_x2 = new int[20, 20];[] p_vect = new int[20];sum_glob = 99999999;recu2 = new recurs(li.n, li.n+1);(recu2.stop != true)

{.next(li.n - 1);ok = true;(int i = 0; i < (li.n); i++)

{(ok == false) break;(int j = 0; j < (li.n); j++)

{((recu2.mas[i] == recu2.mas[j]) &&(i!=j))

{= false; break;

}(recu2.mas[i] == 0) { ok = false; break; }

}

}(ok == true)

{(int i = 0; i < (li.n); i++)(int j = 0; j < (li.n+1); j++)

{((recu2.mas[i] == j)&&(j!=0)) matr_x[j, i] = 1;matr_x[j, i] = 0;

}sum_t_xr=0;

// вычисление произведения матриц R и X(int i = 0; i sum_t_xr)

{_glob = sum_t_xr;

//сохраним матрицу X*(int i = 1; i < (li.n + 1); i++)(int j = 0; j < (li.n); j++)_x2[i, j] = matr_x[i, j];

// алгоритм построяния вектора p* - наиболее точно

отражающих мнения экспертов о привлекательности

проектов(int j = 0; j < (li.n); j++)_vect[j] = recu2.mas[j];

}

}

}tmp = "Вектор P* \n\r(";(int j = 0; j < (li.n); j++)+= p_vect[j].ToString();+= ")\n\r";

// строется матрица парных сравнений L

int[,] matr_a = new int[20, 20];(int i = 0; i < (li.n); i++)(int j = 0; j < (li.n); j++)

q2)matr_a[i,j]=0;">{i5=i+1; int i6=j+1;q1= tmp.LastIndexOf(i5.ToString());q2 = tmp.LastIndexOf(i6.ToString());(q1 q2) matr_a[i, j] = 0;

}

// найдем сумму элементов матрицы парных стравнений по строкам[] sum_strok = new int[20];(int i = 0; i < (li.n); i++)

{sum2 = 0;(int j = 0; j < (li.n); j++)

{+= matr_a[i, j];

}_strok[i] = sum2;

}

// найдем сумму всех элементов матрицы парных сравненийobsh_summa = 0;(int i = 0; i < (li.n); i++)_summa += sum_st