Математическая постановка задачи.
{ 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 < (li.n); i++)(int j = 0; j < (li.n); j++)_t_xr += matr_x[i + 1, j] * matr_r[i, j];(sum_glob > 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++) {i5=i+1; int i6=j+1;q1= tmp.LastIndexOf(i5.ToString());q2 = tmp.LastIndexOf(i6.ToString());(q1 < q2) matr_a[i, j] = 2;(q1 == q2) matr_a[i, j] = 1;(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_strok[i]; // ищутся весовые коэффициенты привлекательности проектов диверсификации[] doli = new double[20];(int i = 0; i < (li.n); i++)[i] = (double)sum_strok[i] / (double)obsh_summa; // Вывод вектора P*= "Вектор P* = (";(int j = 0; j < (li.n); j++) {+= p_vect[j].ToString();(j != (li.n - 1)) tmp += ","; }+= ") - координаты обозначают порядковые номера проектов диверсификации упорядоченных по убыванию. На первом месте стоит порядковый номер проекта наиболее выгодного для развития.\n\r"; //MessageBox.Show(tmp);tmp1="Вектор Z =(";(int i = 0; i < (li.n); i++) {length = 6;(doli[i].ToString().Length < 6) length = doli[i].ToString().Length;+= doli[i].ToString().Substring(0, length);(i != (li.n - 1)) tmp1 += "; "; }.Show(tmp+" \n\r"+tmp1+") - координата Zi обозначает весовой коэффициент привлекательности проекта диверсификации под номером i.","Ответ"); // вывод весовых коэффициентов привлекательности |