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

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

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

Цель: Найти оптимальное решение, обоснованное с помощью метода анализа иерархий.
Задание:
2.1. Выбрать согласно варианту задачу выбора для лабораторной работы (например, выбор города проживания). Задача должна включать не менее 5 возможных альтернатив и 6-9 критериев.
2.2. Изучить ситуацию выбора для конкретного варианта. Согласовать задачу с преподавателем.
2.3. Составить программу в системе Scilab. Предусмотреть удобный интерфейс программы. Произвести расчёты.
2.4. Произвести выбор альтернативы.
2.5. Сделать выводы по работе.

Файлы: 1 файл

тпр ргр.doc

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

Теперь будем рассчитывать индексы «согласия» и «несогласия».   Для этого сначала необходимо сравнить оценки в баллах при различных конфигурациях серверов. Превосходящие факторы обозначим «+», равноценные « = », остальные  « - ».

 

Таблица 2 -  Сравнение конфигураций почтовых серверов

 

 

Факторы конкурентоспособности

11

22

3

4

5

6

AB

=

+

+

=

-

+

BA

=

-

-

=

+

-

AC

+

+

+

+

+

+

CA

-

-

-

-

-

-

AD

=

=

+

=

-

=

DA

=

=

-

=

+

=

AF

=

+

-

+

+

+

FA

=

-

+

-

-

-

BC

+

+

=

+

+

+

CB

-

-

=

-

-

-

BD

=

-

+

=

+

-

DB

=

+

-

=

-

+

BF

=

=

-

+

+

=

FB

=

=

+

-

-

=

CD

-

-

+

-

-

-

DC

+

+

-

+

+

+

CF

-

-

-

-

+

-

FC

+

+

+

+

-

+

DF

=

+

-

+

+

+

FD

=

-

+

-

-

-


 

Исходя из таблицы 2, мы подставляем в формулы соответствующие весовые параметры из таблицы 1, таким образом, рассчитывая индексы «согласия» и «несогласия».

Вычисляем важности подмножеств по которым X «предпочтительнее» Y, «равноценно» ему, либо  Y «предпочтительнее» X (см. таблицу 3).

 

Таблица 3 - Важность подмножеств Р+(x, у), Р =(x, у), Р‾ (х, у)

 

A

B

C

D

E

A                               Р+

*

43

94

20

61

Р=

*

33

0

56

13

Р‾

*

18

0

18

20

   

94

94

94

94

B         Р+

18

*

74

38

38

Р=

33

*

20

33

36

Р‾

43

*

0

23

20

 

94

 

94

94

94

 

C        Р+

 

0

 

0

 

*

 

20

 

18

Р=

0

20

*

0

0

Р‾

94

74

*

74

76

       

94

94

D         Р+

18

23

74

*

61

Р=

56

33

0

*

13

  Р‾

20

38

20

*

20

         

94

E          P+

20

20

76

20

*

Р=

13

36

0

13

*

  Р‾

61

38

18

61

*




 

 

 

 

                            

 

 

 

Теперь строим матрицы индексов «согласия» и «несогласия. При построении матрицы индексов «несогласия» выбирают максимальные показатели.

 

 

Таблица 4 - Матрица несогласия

 

A

B

C

D

E

A

-

0,30

0,75

0,15

0,35

B

0,45

-

0,00

0,45

0,05

C

0,75

0,35

-

0,75

0,05

D

0,35

0,2

0,2

-

0,7

E

0,65

0,3

0,05

0,65

-


 

Таблица 5 - Матрица согласия

 

A

B

C

D

E

A

-

2,38

94

1,11

3,05

B

0,418

-

74

1,65

1,9

C

0

0

-

0,270

0,236

D

0,9

0,605

3,7

-

3,05

E

0,327

0,526

4,222

0,327

-


 

 

В соответствии с правилами об индексах согласия и несогласия – в качестве пороговых значений зададим c2 = 0,5 и d2 = 0,4 и таким образом найдем значения превосходства одного почтового сервера над другим.

 

8 - Таблица превосходства вариантов

 

A

B

C

D

E

A

+

+

+

B

+

+

C

D

+

+

E

+


 

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

Диаграмма:

В результате получаем, что хорошим почтовым сервером является CommuniGate Pro. Он хоть и дорог по стоимости, однако сильно защищен и многофункционален.

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

funcprot(0)

a = [19, 20, 13, 20, 14, 17];

b = [19, 11, 10, 20, 20, 10];

c = [14, 5, 10, 15, 13, 7];

d = [15, 20, 6, 20, 17, 17];

e = [19, 11, 16, 18, 8, 10];

 

MainMtx = [a; b; c; d; e];

 

mg = [13; 7; 20; 20; 18; 16];

maxim = 0;

factorss = [];

function [factorss]=fun1(obj1, obj2)

    for i = 1:length(obj1)

        if obj1(i) == obj2(i) then factorss(:,i) = 0

        elseif obj1(i) > obj2(i) then factorss(:,i) = 1

        elseif obj1(i) < obj2(i) then factorss(:,i) = -1

        end

    end

endfunction

 

function [maxim]=getDisagreement(obj1, obj2)

    for i =1:length(MainMtx)

    diffe = obj1-obj2;

    if diffe < 0 then kek = abs(diffe/20)

    else kek = diffe/20

    end

    maxim = max(kek)

end

endfunction

DsgrMatrix = [];

for i =1:5

    for j = 1:5

        if i ~= j then

             DsgrMatrix(i,j) = getDisagreement(MainMtx(j,:),MainMtx(i,:));

         else DsgrMatrix(i,j) = -1

        end

    end

end

 

suma = 0;

function [suma]=getPlus(obj1, obj2)

    for i =1:length(obj1)

        if (obj1(i) - obj2(i)) > 0 then

            suma = suma + mg(i);

        end

    end

endfunction

function [suma]=getDiffer(obj1, obj2)

    for i =1:length(obj1)

        if (obj1(i) - obj2(i)) < 0 then

            suma = suma + mg(i);

        end

    end

endfunction

 

WiPlus = [];

for i = 1:5

    for j = 1:5

        if i ~= j then

            WiPlus(i, j) = getPlus(MainMtx(i,:), MainMtx(j,:));

        else WiPlus(i, j) = -10

        end

    end

end

WiMinus = [];

for i = 1:5

    for j = 1:5

        if i ~= j then

            WiMinus(i, j) = getDiffer(MainMtx(i,:), MainMtx(j,:));

        else WiMinus(i, j) = -10

        end

    end

end

 

ConsentMatrix = [];

for i = 1:5

    for j = 1:5

        if i ~= j then

            if WiMinus(i, j) ~= 0

                ConsentMatrix(i, j) = WiPlus(i,j)/WiMinus(i, j);

            else ConsentMatrix(i, j) = WiPlus(i,j);

            end

        else ConsentMatrix(i, j) = -10

        end

   end

end

 

c2 = 0.5;

d2 = 0.4;

 

prevoshodTable = [];

 

for i = 1:5

    for j = 1:5

        if i ~= j then

            if ConsentMatrix(i, j) >= c2 & DsgrMatrix(i,j) <= d2 then

                prevoshodTable(i, j) = "+"

            else prevoshodTable(i, j) = "-"

            end

        else prevoshodTable(i, j) = "-"

        end

    end

end

 

for i = 1:5

    MainMtx(i,7) = mg(i);

end

 

count = [0 0 0 0 0];

for i = 1:5

    for j = 1:5

        if prevoshodTable(i, j) == "+" then

            count(i) = count(i) + 1;

        end

    end

end

 

// ПОСТРОЕНИЕ ГРАФИЧЕСКОГО  ИНТЕРФЕЙСА

 

binAns = [0 0 0 0 0];

if max(count) == count(1) then strRes = "iRedMail"; binAns(1) = 1;

elseif max(count) == count(2) then strRes = "IndiMail"; binAns(2) = 1;

elseif max(count) == count(3) then strRes = "Rumble"; binAns(3) = 1;

elseif max(count) == count(4) then strRes = "Axigen"; binAns(4) = 1;

elseif max(count) == count(5) then strRes = "CommuniGate"; binAns(5) = 1;

end

 

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

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

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

// Заголовок

set(f,'figure_name','РЕЗУЛЬТАТ');

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

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

button1 = uicontrol('style','pushbutton','string','Таблица превосходства','position',[5,270,200,50], 'Callback', 'showMatrix(prevoshodTable)');

button2 = uicontrol('style','pushbutton','string','Матрица  согласия','position',[210,270,200,50], 'Callback', 'showMatrix(ConsentMatrix)');

button3 = uicontrol('style','pushbutton','string','Матрица несогласия','position',[415,270,200,50], 'Callback', 'showMatrix(DsgrMatrix)');

button4 = uicontrol('style','pushbutton','string','Исходная  матрица','position',[5,200,200,50], 'Callback', 'showMatrix2(MainMtx)');

button5 = uicontrol('style','pushbutton','string','Диаграмма результата','position',[210,200,200,50], 'Callback', 'showRes');

 

function r=showRes()

    scf(0);

    pie(count,binAns,["iRedMail","IndiMail","Rumble","Axigen","CommuniGate"]);

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