Метод аналізу ієрархій

Побудова матриць попарних порівнянь альтернатив за критеріями та аспектів відносно втрат від придбання програмного забезпечення. Розробка рекомендацій щодо обрання варіанту реалізації проекту системи консолідованої інформації по методу аналізу ієрархій.

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

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

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

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"

Кафедра інформаційних систем та мереж

Розрахункова робота з курсу:

"Технологія підтримки процесів прийняття рішень"

на тему: "Метод аналізу ієрархій"

Виконав: ІСМ-11м Коринкевич Р.Б.

Прийняв:

доц. каф. ІСМ Верес О.М.

ЛЬВІВ 2011

Задача

В процесі проектування системи консолідованої інформації виникла необхідність обрання варіанту проекту її реалізації. Були конкретизовані альтернативні варіанти, критерії оцінювання їх якості, а також основні аспекти впровадження та використання системи консолідованої інформації. Відповідно до цього були побудовані дві ієрархії: вигоди від закупівлі програмного забезпечення; втрати (витрати), зумовлені придбанням та експлуатацією придбаного програмного забезпечення. Крім того, в результаті опитування експертів виявлені відносні переваги у вигляді матриць попарних порівнянь. Необхідно, використовуючи метод аналізу ієрархій (МАІ), розробити рекомендації щодо обрання того чи іншого варіанту реалізації проекту СКІ.

Матриці попарних порівнянь альтернатив за критеріями

Матриці попарних порівнянь критеріїв за аспектами

Матриця попарних порівнянь аспектів (факторів) відносно вигод від придбання ПЗ

Матриці попарних порівнянь альтернатив за критеріями

Матриці попарних порівнянь критеріїв за аспектами

Матриця попарних порівнянь аспектів (факторів) відносно втрат від придбання ПЗ

матриця порівняння альтернатива консолідований ієрархія

Розв'язання

Обчислимо відповідні характеристики для множин таблиць попарних порівнянь - оцінювання альтернатив. Тобто визначимо середнє геометричне рядків матриці попарних порівнянь А з подальшою нормалізацією всіх складових отриманого вектора за формулою:

Для ієрархії від вигод закупівлі програмного забезпечення

Рис.1. Вектори пріоритетів для альтернатив за критеріями для матриць вигод

Для ієрархії від втрат закупівлі програмного забезпечення

Рис.2. Вектори пріоритетів для альтернатив за критеріями для матриць втрат

Обчислимо відповідні характеристики для множин таблиць попарних порівнянь - оцінювання аспектів. Тобто визначимо середнє геометричне рядків матриці попарних порівнянь А з подальшою нормалізацією всіх складових отриманого вектора:

Для ієрархії від вигод закупівлі програмного забезпечення

Вектори пріоритетів для критеріїв за аспектами для матриць вигод

Для ієрархії від втрат закупівлі програмного забезпечення

Вектори пріоритетів для критеріїв за аспектами для матриць вигод

Обчислимо відповідні характеристики для множин таблиць попарних порівнянь - оцінювання аспектів (факторів). Тобто визначимо середнє геометричне рядків матриці попарних порівнянь А з подальшою нормалізацією всіх складових отриманого вектора:

Вектор пріоритетів

1

4

1

0,4974

1/4

1

1/3

0,0718

1

3

1

0,4308

Вектори пріоритетів для критеріїв за аспектами відносно вигод від придбання ПЗ

Вектори пріоритетів для критеріїв за аспектами відносно втрат від придбання ПЗ

Ми отримали результуючі вектори щодо ієрархії, як по ієрархії вигод, так і по ієрархії втрат, тобто вектори глобальних пріоритетів альтернатив з точки зору глобальної мети. Тепер поділимо отримані вектори один на інший (вектор вигод на вектор втрат) та пронормуємо результат.

Пронормуємо вектор, для цього використаємо формулу:

0,5370

0,2273

0,1391

0,0966

В результаті отримаємо такі рекомендації щодо обрання того чи іншого варіанту реалізації проекту:

Альтернатива

Значення вектора

Варіант вибору

В1

0,5370

1

В2

0,2273

2

В4

0,1391

3

В3

0,0966

4

Текст програми

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <string.h>

void read_q(float ***q, int n, FILE *fp, int m)

{

int i, j, k;

char buffer[100], *ptr;

for (i = 0 ; i < n ; i++)

{

for (j = 0 ; j < m ; j++)

{

fgets(buffer, 99, fp);

ptr = buffer;

for (k = 0 ; k < m ; k++)

{

sscanf(ptr, "%f", &q[i][j][k]);

ptr = strchr(ptr, 0x09);

ptr++;

}

}

fgets(buffer, 99, fp);

}

}

void print_q(float ***q, int n, FILE *fp, int m)

{

int i, j, k;

for (i = 0 ; i < n ; i++)

{

for (j = 0 ; j < m ; j++)

{

for (k = 0 ; k < m ; k++)

{

printf("%0.4f ", q[i][j][k]);

}

printf("\n");

}

printf("\n");

}

}

void get_num(float **q, int n, int m, float sqrt_num)

{

int i, j;

double res = 0, *pot_res;

pot_res = (double *) malloc(m * sizeof(float));

for (i = 0 ; i < m ; i++)

{

pot_res[i] = 1;

for (j = 0 ; j < m ; j++)

{

pot_res[i] *= q[i][j];

}

pot_res[i] = pow(pot_res[i], sqrt_num);

res += pot_res[i];

}

for (i = 0 ; i < m ; i++)

{

q[i][m] = pot_res[i] / res;

printf("%0.4f ", q[i][m]);

}

printf("\n");

}

void get_aspects(float **res_matrix, float ***q, float **q_res, int m, int a, int b, int x)

{

int i, j, k = 0, z;

for (j = 0 ; j < m ; j++)

{

for (res_matrix[j][x] = 0, z = 0 ; z < m-1 ; z++)

{

res_matrix[j][x] += q[z+a-1][j][m] * q_res[z][m-1];

}

printf("%0.4f ", res_matrix[j][x]);

}

printf("\n");

}

float *vygody_res(float **res_matrix, float **q, int m)

{

int i, j;

float *res;

res = (float *) calloc(m, sizeof(float));

for (i = 0 ; i < m ; i++)

{

for (j = 0 ; j < m-1 ; j++)

{

res[i] += res_matrix[i][j] * q[j][m-1];

}

printf("%0.4f ", res[i]);

}

printf("\n");

return res;

}

void normuvanya(float *res, int m)

{

int i;

float res_tmp = 0;

printf("\nNormovanuy result: ");

for (i = 0 ; i < m ; i++)

{

res_tmp += res[i];

}

for (i = 0 ; i < m ; i++)

{

res[i] /= res_tmp;

printf("%f ", res[i]);

}

}

int main(void)

{

float ***q1, ***q2, ***q3, sqrt_num, ***w1, ***w2, ***w3;

float **res_matrix1, **res_matrix2, *res1, *res2;

FILE *fp;

int n, i, j, k, z, a, b;

const int m = 4;

char buffer[20];

if ( (fp = fopen("D:/1.txt", "r")) == NULL)

{

printf("error opening file\n");

return 0;

}

fgets(buffer, 99, fp);

sscanf(buffer, "%u", &n);

q1 = (float ***) malloc(n * sizeof(float **));

w1 = (float ***) malloc(n * sizeof(float **));

for (i = 0 ; i < n ; i++)

{

q1[i] = (float **) malloc(m * sizeof(float *));

w1[i] = (float **) malloc(m * sizeof(float *));

for (j = 0 ; j < m ; j++)

{

q1[i][j] = (float *) malloc((m+1) * sizeof(float));

w1[i][j] = (float *) malloc((m+1) * sizeof(float));

}

}

printf("\nthird level q1...q%u: matrix\n", n);

read_q(q1, n, fp, m);

//print_q(q1, n, fp, m);

sqrt_num = (float) 1/m;

for (i = 0 ; i < n ; i++)

{

get_num(q1[i], n, m, sqrt_num);

}

fgets(buffer, 99, fp);

sscanf(buffer, "%u", &k);

q2 = (float ***) malloc(k * sizeof(float **));

w2 = (float ***) malloc(k * sizeof(float **));

for (i = 0 ; i < k ; i++)

{

q2[i] = (float **) malloc(m-1 * sizeof(float *));

w2[i] = (float **) malloc(m-1 * sizeof(float *));

for (j = 0 ; j < m-1 ; j++)

{

q2[i][j] = (float *) malloc(m * sizeof(float));

w2[i][j] = (float *) malloc(m * sizeof(float));

}

}

printf("\nsecond level q1...q%u: matrix\n", k);

read_q(q2, k, fp, m-1);

//print_q(q2, k, fp, m-1);

printf("\n Varianty q1..q3: ");

sqrt_num = (float) 1/(m-1);

for (i = 0 ; i < k ; i++)

{

get_num(q2[i], k, m-1, sqrt_num);

}

fgets(buffer, 99, fp);

sscanf(buffer, "%u", &z);

q3 = (float ***) malloc(z * sizeof(float **));

w3 = (float ***) malloc(z * sizeof(float **));

for (i = 0 ; i < z ; i++)

{

q3[i] = (float **) malloc(m-1 * sizeof(float *));

w3[i] = (float **) malloc(m-1 * sizeof(float *));

for (j = 0 ; j < m-1 ; j++)

{

q3[i][j] = (float *) malloc(m-1 * sizeof(float));

w3[i][j] = (float *) malloc(m-1 * sizeof(float));

}

}

printf("\nfirst level q1...q%u: matrix\n", z);

read_q(q3, z, fp, m-1);

//print_q(q3, z, fp, m-1);

sqrt_num = (float) 1/(m-2);

for (i = 0 ; i < z ; i++)

{

get_num(q3[i], z, m-1, sqrt_num);

}

res_matrix1 = (float **) malloc(m * sizeof(float *));

res_matrix2 = (float **) malloc(m * sizeof(float *));

for (j = 0 ; j < m ; j++)

{

res_matrix1[j] = (float *) malloc(m-1 * sizeof(float));

res_matrix2[j] = (float *) malloc(m-1 * sizeof(float));

}

printf("\n Aspekty q1..q3: ");

fgets(buffer, 99, fp);

for (i = 0 ; i < m-1 ; i++)

{

fgets(buffer, 99, fp);

sscanf(buffer, "%u %u", &a, &b);

get_aspects(res_matrix1, q1, q2[i], m, a, b, i);

}

printf("\n Vygodu q1..q3: ");

res1 = vygody_res(res_matrix1, q3[0], m);

sqrt_num = (float) 1/m;

printf("\nthird level w1...w%u: matrix\n", n);

read_q(w1, n, fp, m);

//print_q(w1, n, fp, m);

for (i = 0 ; i < n ; i++)

{

get_num(w1[i], n, m, sqrt_num);

}

printf("\nsecond level w1...w%u: matrix\n", k);

read_q(w2, k, fp, m-1);

//print_q(w2, k, fp, m-1);

sqrt_num = (float) 1/(m-1);

for (i = 0 ; i < k ; i++)

{

get_num(w2[i], k, m-1, sqrt_num);

}

w2[0][0][m-1] = 0.772; w2[0][1][m-1] = 0.2467; w2[0][2][m-1] = 0.6761;

w2[1][0][m-1] = 0.3793; w2[1][1][m-1] = 0.3313; w2[1][2][m-1] = 0.2894;

w2[2][0][m-1] = 0.88; w2[2][1][m-1] = 0.12;

printf("\nfirst level w1...w%u: matrix\n", z);

read_q(w3, z, fp, m-1);

//print_q(w3, z, fp, m-1);

printf("\n Varianty w1..w3: ");

sqrt_num = (float) 1/(m-2);

for (i = 0 ; i < z ; i++)

{

get_num(w3[i], z, m-1, sqrt_num);

}

printf("\n Aspekty w1..w3: ");

fgets(buffer, 99, fp);

for (i = 0 ; i < m-1 ; i++)

{

fgets(buffer, 99, fp);

sscanf(buffer, "%u %u", &a, &b);

get_aspects(res_matrix2, w1, w2[i], m, a, b, i);

}

printf("\n Vygodu w1..w3: ");

res2 = vygody_res(res_matrix2, w3[0], m);

printf("\nresult: ");

for (i = 0 ; i < m ; i++)

{

res1[i] = res1[i] / res2[i];

printf("%f ", res1[i]);

}

normuvanya(res1, m);

return 0;

}

Результати роботи програми

Висновок

В процесі виконання розрахункової роботи на основі конкретизованих альтернативних варіантів, критеріїв оцінювання їх якості, а також основних аспектів впровадження та використання системи консолідованої інформації, а також на основі матриць попарних порівнянь, за допомогою методу аналізу ієрархій (МАІ) було розроблено рекомендації щодо обрання того чи іншого варіанту реалізації проекту СКІ. На основі проведених розрахунків можна зробити висновки, що найкращим варіантом для впровадження системи консолідованої інформації буде Альтернатива В1, близькою до неї є Альтернатива В2. Найгіршим варіантом впровадження системи консолідованої інформації є Альтернатива В3.

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


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

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