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

 

 

 

 

 

 

Расчетно-графическая работа

по дисциплине: “Теория принятия решений”

Вариант № 7

 

 

 

 

 

Тема:Метод анализа иерархий для принятия многокритериальных решений. Выбор почтового сервера.

Цель:Найти оптимальное решение, обоснованное с помощью метода анализа иерархий.

Задание:

2.1. Выбрать согласно варианту задачу выбора для лабораторной работы (например, выбор города проживания). Задача должна включать не менее 5 возможных альтернатив и 6-9 критериев.

2.2. Изучить ситуацию выбора для конкретного варианта. Согласовать задачу с преподавателем.

2.3. Составить программу в системе Scilab. Предусмотреть удобный интерфейс программы. Произвести расчёты.

2.4. Произвести выбор альтернативы.

2.5. Сделать выводы по работе.

 

Ход выполнения работы

Вариант вычисляется по формуле ,где х – это >> x=ceil(rand(60,1)*3). Если М = 1 – это метод иерархий, если М = 2 – это метод ЭЛЕКТРА 1, если М = 3 – это метод ЭЛЕКТРА 2.

Рис. 1 – расчет варианта

Рис. 2 – результат расчета варианта.

Получаем:

Согласно варианту, метод расчета – метод анализа иерархий; тема исследования - выбор почтового сервера.

Актуальность выбора:

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

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

Определим альтернативы и критерии

Для выбора почтового сервера определим набор альтернатив и критериев.

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

1. SafeMail

2. Liga.net

3. CommuniCate

4. MailUA

5. PleasureLetter

Критерии:

  1. Поддержка нескольких доменов

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

  1. Цена

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

3. Простота в использовании

Часто пользователь может быть не ознакомлен с ПО, которое было установлено на его компьютер. Чтобы продукт имел популярность, его функционал должен быть интуитивно понятен.

4. Защищенность

Конфиденциальность пользовательских данных – главная задача почтового сервера.

5. Полноценность функционала

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

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

Далеко не все пользователи пользуются ОС Windows, именно поэтому хороший почтовый сервер будет запускаться и на UNIXоподобных системах.

 

 3. Создание таблиц и оценка альтернатив и критериев

Для начала составим матрицу попарных сравнений критериев.

Критерии

1

2

3

4

5

6

Приоритеты

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

1

0,33

0,2

0,33

0,33

0,33

0,083

2. Цена

3

1

0,11

0,33

0,142

1

0,037

  1. Простота

5

9

1

5

3

9

0,464

  1. 4. Защищенность

3

3

0,2

1

0,33

5

0,130

5. Полноценность

3

7

1

3

1

7

0,249

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

3

1

0,11

0,2

0,142

1

0,034


 

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

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

 

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

 

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

Оценка

1. SafeMail

3

2. Liga.net

5

3. CommuniCate

7

4. MailUA

5

5. PleasureLetter

9


 

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

1

2

3

4

5

Приоритеты

1. SafeMail

1

0,33

0,2

0,33

0,142

0,045

2. Liga.net

3

1

0,33

1

0,2

0,103

3. CommuniCate

5

3

1

3

0,33

0,245

4. MailUA

3

1

0,33

1

0,2

0,103

5. PleasureLetter

7

5

3

5

1

0,502


 

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

Отношение согласованности = 2,978 %

 

Чем ниже цена – тем приоритетнее становится использование программы

Цена

Оценка

1. SafeMail

5

2. Liga.net

9

3. CommuniCate

9

4. MailUA

3

5. PleasureLetter

7


 

Цена

1

2

3

4

5

Приоритеты

1. SafeMail

1

0,2

0,2

3

0,33

0,072

2. Liga.net

5

1

1

7

5

0,387

3. CommuniCate

5

1

1

7

5

0,387

4. MailUA

0,33

0,142

0,142

1

0,33

0,040

5. PleasureLetter

3

0,2

0,2

3

1

0,112


 

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

Отношение согласованности = 3,734 %

Оценка простоты использования:

Простота

Оценка

1. SafeMail

5

2. Liga.net

3

3. CommuniCate

9

4. MailUA

5

5. PleasureLetter

7


 

Простота

1

2

3

4

5

Приоритеты

1. SafeMail

1

3

0,33

1

0,33

0,117

2. Liga.net

0,33

1

0,142

0,33

0,142

0,043

3. CommuniCate

3

7

1

5

3

0,463

4. MailUA

1

3

0,2

1

0,33

0,106

5. PleasureLetter

3

7

0,33

3

1

0,269


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

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

Защищенность необходимо оценивать с точки зрения используемых программами протоков безопасности, на подобии TSL/SSL и множество других, методик защиты от подбора паролей и так далее. Также оценивается качество данных технологий.

Защищенность

Оценка

1. SafeMail

3

2. Liga.net

5

3. CommuniCate

5

4. MailUA

7

5. PleasureLetter

9


 

Защищенность

1

2

3

4

5

Приоритеты

1. SafeMail

1

0,33

0,33

0,142

0,11

0,037

2. Liga.net

3

1

1

0,33

0,142

0,090

3. CommuniCate

3

1

1

0,33

0,2

0,097

4. MailUA

7

3

3

1

0,33

0,246

5. PleasureLetter

9

7

5

3

1

0,528


 

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

Отношение согласованности = 2,409 %

 

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

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

Оценка

1. SafeMail

5

2. Liga.net

7

3. CommuniCate

7

4. MailUA

5

5. PleasureLetter

9


 

 

 

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

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.

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

 

 


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