Метод анализа иерархий для принятия многокритериальных решений

Автор работы: Пользователь скрыл имя, 31 Октября 2017 в 22:46, контрольная работа

Описание работы

Почтовый сервер, сервер электронной почты, мейл-сервер — в системе пересылки электронной почты так обычно называют агент пересылки сообщений (англ. mail transfer agent, MTA). Это компьютерная программа, которая передаёт сообщения от одного компьютера к другому.
От правильного выбора программного обеспечения зависит стабильность вашей работы и сохранность конфиденциальных данных как ваших, так и вашего собеседника по переписке.

Файлы: 1 файл

RGR TPR.docx

— 61.03 Кб (Скачать файл)

 

 

 

Функциональность

1

2

3

4

5

Приоритеты

1. SafeMail

1

0,33

0,33

1

0,2

0,073

2. Liga.net

3

1

1

3

0,33

0,195

3. CommuniCate

3

1

1

3

0,33

0,195

4. MailUA

1

0,33

0,33

1

0,2

0,073

5. CommuniGate

5

3

3

5

1

0,463


 

Индекс согласованности = 0,015

Отношение согласованности = 1,396 %

 

Матрица кроссплатформенности стоится на основе поддерживаемых платформ. Чем больше платформ поддерживается, тем выше оценка.

Кроссплатформенность

Оценка

1. SafeMail

3

2. Liga.net

3

3. CommuniCate

5

4. MailUA

7

5. PleasureLetter

9


 

Кроссплатформенность

1

2

3

4

5

Приоритеты

1. SafeMail

1

1

0,33

0,11

0,11

0,043

2. Liga.net

1

1

0,33

0,2

0,142

0,051

3. CommuniCate

3

3

1

0,33

0,2

0,117

4. MailUA

9

5

3

1

0,33

0,277

5. PleasureLetter

9

7

5

3

1

0,511


 

Индекс согласованности = 0,046

Отношение согласованности = 4,182 %

 

 

 

 

В результате запуска программы отобразим результирующую мастрицу:

Результирующая матрица:

Мультидоменность

Платформы

Простота

Защита

Цена

Функции

Домены

Приоритеты

1. SafeMail

0,43

0,117

0,037

0,072

0,073

0,045

0,054

2. Liga.net

0,051

0,043

0,09

0,387

0,195

0,103

0,150

3. CommuniCate

0,117

0,463

0,097

0,387

0,195

0,245

0,180

4. MailUA

0,277

0,106

0,246

0,04

0,073

0,103

0,168

5. PleasureLetter

0,511

0,269

0,528

0,112

0,463

0,501

0,445


 

В результате получаем, что лучшим почтовым сервером, удовлетворяющем всем заданым критериям, является PleasureLetter.

Графический интерфейс программы:

 

Рис. 1 – графический интерфейс программы

Кодпрограммы:

// RGR

MainMtx = [

    1 3 0.2 0.33 0.33 3;

    0.33 1 0.11 0.33 0.142 1;

    5 9 1 5 3 9;

    3 3 0.2 1 0.33 5;

    3 7 0.33 3 1 7;

    0.33 1 0.11 0.2 0.142 1;

];

 

crossPlatform= [1 1 0.33 0.11 0.11;

            1 1 0.33 0.2 0.142;

            3 3 1 0.33 0.2;

            9 5 3 1 0.33;

            9 7 5 3 1;];

           

simplyUI = [1 3 0.33 1 0.33;

          0.33 1 0.142 0.33 0.142;

          3 7 1 5 3;

          1 3 0.2 1 0.33;

          3 7 0.33 3 1;];

         

safety = [1 0.33 0.33 0.142 0.11;

          3 1 1 0.33 0.142;

          3 1 1 0.33 0.2;

          7 3 3 1 0.33;

          9 7 5 3 1;];

          

 

 

lowCost = [1 0.2 0.2 3 0.33;

         5 1 1 7 5;

         5 1 1 7 5;

         0.33 0.142 0.142 1 0.33;

         3 0.2 0.2 3 1;];

        

usability = [1 0.33 0.33 1 0.2;

              3 1 1 3 0.33;

              3 1 1 3 0.33;

              1 0.33 0.33 1 0.2;

              5 3 3 5 1;];

             

multidomens = [1 0.33 0.2 0.33 0.142;

               3 1 0.33 1 0.2;

               5 3 1 3 0.33;

               3 1 0.33 1 0.2;

               7 5 3 5 1;];

 

// Определим индекс  согласованности по таблице

Iss6 = 1.24;

Iss5 = 1.12;

 

function [relativeConsistency, indexConsistency, vectorPriority]=func(mtrx, randomConsistency)

    // Вектор для расчетов приоритета

    n = length(mtrx(1, :));

    priorityTemp = [];

 

    // Находим максимальный вектор для каждой матрицы

    // Максимальное лямбда для каждой строки

    for i = 1:n

        priorityTemp(i) = 1;

        for j = 1:n

            priorityTemp(i) = priorityTemp(i) .* mtrx(i, j);

        end

    end

    for i = 1:n

        priorityTemp(i) = priorityTemp(i) .^ (1 ./ n);

    end

 

    for i = 1:n

        vectorPriority(i) = priorityTemp(i) ./ sum(priorityTemp);

    end

 

        LambdaMax = 0;

    for j = 1:n

        LambdaMax = LambdaMax + (vectorPriority(j) .* sum(mtrx(:, j)));

    End

    // Считаем информационную согласованность

    indexConsistency = (LambdaMax - n) ./ (n - 1);

    // Считаем относительную согласованность

    relativeConsistency = indexConsistency ./ randomConsistency .* 100;

endfunction

 

 

[relativeConsistency_Gen, Consistency_Gen, vectorPriority_Gen] = func(MainMtx, Iss6);

[relativeConsistency1, indexConsistency1, vectorPriority1] = func(crossPlatform, Iss5); [relativeConsistency2, indexConsistency2, vectorPriority2] = func(simplyUI, Iss5); [relativeConsistency3, indexConsistency3, vectorPriority3] = func(safety, Iss5); [relativeConsistency4, indexConsistency4, vectorPriority4] = func(lowCost, Iss5);

[relativeConsistency5, indexConsistency5, vectorPriority5] = func(usability, Iss5);

[relativeConsistency6, indexConsistency6, vectorPriority6] = func(multidomens, Iss5);

 

// Переведем все  вектора в матрицу, чтобы было  удобней работать

for i = 1:length(vectorPriority1) mr(i, 1) = vectorPriority1(i); end

for i = 1:length(vectorPriority2) mr(i, 2) = vectorPriority2(i); end

for i = 1:length(vectorPriority3) mr(i, 3) = vectorPriority3(i); end

for i = 1:length(vectorPriority4) mr(i, 4) = vectorPriority4(i); end

for i = 1:length(vectorPriority5) mr(i, 5) = vectorPriority5(i); end

for i = 1:length(vectorPriority6) mr(i, 6) = vectorPriority6(i); end

 

// Находим результирующую матрицу

ResultArray = [];

for i =1:length(vectorPriority1)

    ResultArray (i) = 0;

    for j = 1:length(vectorPriority_Gen)

        ResultArray (i) = ResultArray (i) + (vectorPriority_Gen(j) .* mr(i, j));

    end

end

disp("Результирующая матрица ResultArray ult = ");

disp(ResultArray );

 

 

//Ищем тектовый ответ

binAns = [0 0 0 0 0]; // Ответ для диаграммы

if max(ResultArray ) == ResultArray (1) then strResultArray  = "SafeMail"; binAns(1) = 1;

elseif max(ResultArray ) == ResultArray (2) then strResultArray  = "Liga.net"; binAns(2) = 1;

elseif max(ResultArray ) == ResultArray (3) then strResultArray  = "CommuniCate"; binAns(3) = 1;

elseif max(ResultArray ) == ResultArray (4) then strResultArray  = "MailUA"; binAns(4) = 1;

elseif max(ResultArray ) == ResultArray (5) then strResultArray  = "PleasureLetter"; binAns(5) = 1;

end

 

f=figure(); // Создание графического объекта

// Размер окна

set(f,'position',[0,0,700,400]);

// Заголовок

set(f,'figure_name','Результат работы программы');

 

 

 

 

 

 

// Кнопка результата

button9 = uicontrol('style','pushbutton','string','Результирующая матрица','position',[5,340,200,50], 'Callback', 'showMatrix3(mr, ResultArray , strResultArray )';

uicontrol('Style','text','Position',[250,342,250,46],'BackgroundColor',[1 1 1],'String','    Ответ: ' + strResultArray );

uicontrol('Style','text','Position',[250,290,200,30],'BackgroundColor',[1 1 1],'String','   Результаты по матрицам: ');

// Кнопки для  вывода таблиц(матриц)

button1 = uicontrol('style','pushbutton','string','Кроссплатформенность','position',[5,230,200,50], 'Callback', 'showMatrix(crossPlatform, relativeConsistency1, indexConsistency1, vectorPriority1)');

button2 = uicontrol('style','pushbutton','string','Простота','position',[210,230,200,50], 'Callback', 'showMatrix(simplyUI, relativeConsistency2, indexConsistency2, vectorPriority2)');

button3 = uicontrol('style','pushbutton','string','Защищенность','position',[415,230,200,50], 'Callback', 'showMatrix(safety, relativeConsistency3, indexConsistency3, vectorPriority3)');

button4 = uicontrol('style','pushbutton','string','Цена','position',[5,170,200,50], 'Callback', 'showMatrix(lowCost, relativeConsistency4, indexConsistency4, vectorPriority4)');

button5 = uicontrol('style','pushbutton','string','Функциональность','position',[210,170,200,50], 'Callback', 'showMatrix(usability, relativeConsistency5, indexConsistency5, vectorPriority5)');

button6 = uicontrol('style','pushbutton','string','Мультидоменность','position',[415,170,200,50], 'Callback', 'showMatrix(multidomens, relativeConsistency6, indexConsistency6, vectorPriority6)');

button7 = uicontrol('style','pushbutton','string','Главная матрица','position',[250,100,200,50], 'Callback', 'showMatrix2(MainMtx, relativConsistency_Gen, indexConsistency_Gen, vectorPriority_Gen)');

 

// Выводим диаграмму

//function showResultArray ()

//    scf(1);

//    pie(ResultArray ,binAns,["SafeMail","Liga.net","CommuniCate","MailUA","PleasureLetter"]);

//endfunction

// Вывод таблицы 5*5

// w - вектор приоритетов

function showMatrix(mtx, ost, ist, w)

    window=figure(); // Создание графического объекта

    // Размер окна

    set(window,'position',[0,0,600,200]);

 

    // Выводим ИС и ОС

    uicontrol('Style','text','Position',[10,140,200,30],'BackgroundColor',[1 1 1],'String','    ИС: ' + string(ist) + "       ОС: " + string(ost) + " %");

 

    params = ["SafeMail" "Liga.net" "CommuniCate" "MailUA" "PleasureLetter"];

    table = ["" params "Приоритет"; [params' string(mtx(:, 1)) string(mtx(:, 2)) string(mtx(:, 3)) string(mtx(:, 4)) string(mtx(:, 5)) string(w)]];

 

    uicontrol('style','table','string',table,'position',[10 10 500 107]);

endfunction

// Вывод таблицы 6*6

function showMatrix2(mtx, ost, ist, w)

    window=figure(); // Создание графического объекта

    // Размер окна

    set(window,'position',[0,0,600,200]);

 

    // Выводим ИС и ОС

    uicontrol('Style','text','Position',[10,150,200,30],'BackgroundColor',[1 1 1],'String','    ИС: ' + string(ist) + "       ОС: " + string(ost) + " %");

 

    params = ["Платформы" "Простота" "Защита" "Цена" "Функции" "Домены"];

    table = ["" params "Приоритет"; [params' string(mtx(:, 1)) string(mtx(:, 2)) string(mtx(:, 3)) string(mtx(:, 4)) string(mtx(:, 5)) string(mtx(:, 6)) string(w)]];

 

    uicontrol('style','table','string',table,'position',[10 10 550 123]);

endfunction

// Вывод результирующей таблицы

function showMatrix3(mtx, w, ans1)

    window = figure(); // Создание графического объекта

    // Размер окна

    set(window,'position',[0,0,600,200]);

 

    // Выводим ответ

    uicontrol('Style','text','Position',[10,150,200,30],'BackgroundColor',[1 1 1],'String','    Ответ: ' + ans1);

 

    params = ["Кроссплатформенность" "Простота в использовании" "Защищенность данных" "Цена" "Функциональная полнота" "Мультидоменность"];

    params2 = ["SafeMail" "Liga.net" "CommuniCate" "MailUA" "PleasureLetter"];

    table = ["" params "Приоритет"; [params2' string(mtx(:, 1)) string(mtx(:, 2)) string(mtx(:, 3)) string(mtx(:, 4)) string(mtx(:, 5)) string(mtx(:, 6)) string(w)]];

 

    uicontrol('style','table','string',table,'position',[10 10 550 123]);

endfunction

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

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

После все матрицы был вписаны в программу, которая произвела расчет и определила самую оптимальную альтернативу – программа PleasureLetter.

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

 

 


Информация о работе Метод анализа иерархий для принятия многокритериальных решений