Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- funcprot(0);
- clear();
- clc();
- //-------------------------БЛОК ФУНКЦИЙ--------------------------------
- //СРАВНЕНИЕ КОНФИГУРАЦИЙ
- function [alternative_config] = compare_alternatives(criteria_amount, alternatives_count, criteria_values)
- alternative_config = zeros(criteria_amount, (alternatives_count*alternatives_count-alternatives_count));
- k = 0;
- for j = 1 : alternatives_count
- for i = 1 : alternatives_count
- if j <> i then
- k = k + 1;
- for m = 1 : criteria_amount
- if criteria_values(m,j) > criteria_values(m,i) then
- alternative_config(m,k) = 1;
- elseif criteria_values(m,j) == criteria_values(m,i) then
- alternative_config(m,k) = 0;
- elseif criteria_values(m,j) < criteria_values(m,i) then
- alternative_config(m,k) = -1;
- end
- end
- end
- end
- end
- disp(alternative_config, 'Сравнения конфигураций');
- endfunction
- //РАСЧЁТ МАТРИЦЫ НЕСОГЛАСИЯ
- function [disagree_matrix] = find_disagree_value(criteria_amount, alternatives_count, criteria_values, alternative_config, weight_maximum)
- disagree_matrix = zeros(alternatives_count, alternatives_count);
- equals_flag = 0;
- step = 1;
- for j = 1 : alternatives_count
- for i = 1 : alternatives_count
- if j <> i then
- for m = 1 : criteria_amount
- if alternative_config(m, step) == -1 then
- x = j;
- y = i;
- equals_flag = 1;
- end
- if equals_flag == 1 then
- d = abs( ( ( criteria_values(m, y) - criteria_values(m, x) ) / weight_maximum ) );
- disagree_index(m, 1) = d;
- disagree_index(m, 2) = x;
- disagree_index(m,3) = y;
- disagree_matrix( disagree_index(m,2), disagree_index(m,3) ) = max( disagree_index(:,1) );
- equals_flag = 0;
- end
- end
- step = step + 1;
- end
- disagree_index = zeros(criteria_amount, 3);
- end
- end
- disp(disagree_matrix, 'Матрица несогласия');
- endfunction
- //РАСЧЁТ МАТРИЦЫ СОГЛАСИЯ
- function [agree_matrix] = find_agree_value(alternatives_count, criteria_amount, alternative_config, weight_parameters)
- agree_matrix = zeros(alternatives_count, alternatives_count);
- // ВЫЧИСЛЕНИЕ СУММЫ ВЕСОВ КРИТЕРИЕВ ПОДМНОЖЕСТВА I+
- sum_plus = zeros(alternatives_count, alternatives_count);
- equals_flag = 1;
- step = 1;
- for j = 1 : alternatives_count
- for i = 1 : alternatives_count
- if j<>i then
- for m = 1 : criteria_amount
- agree_index = zeros(criteria_amount, 3);
- if ( alternative_config(m, step) == 1 ) then
- x = j;
- y = i;
- equals_flag = 0;
- end
- if equals_flag == 0 then
- d = weight_parameters(m);
- agree_index_temporary(m, 1) = d;
- agree_index_temporary(m, 2) = x;
- agree_index_temporary(m, 3) = y;
- equals_flag = 1;
- element_plus = sum(agree_index_temporary(:, 1));
- sum_plus(x, y) = element_plus;
- equals_flag = 1;
- end
- end
- step = step + 1;
- end
- agree_index_temporary = zeros(criteria_amount, 3);
- end
- end
- disp(sum_plus, 'Cуммы весов критериев подмножества I+');
- // ВЫЧИСЛЕНИЕ СУММЫ ВЕСОВ КРИТЕРИЕВ ПОДМНОЖЕСТВА I-
- sum_minus = ones(alternatives_count, alternatives_count);
- equals_flag = 1;
- step = 1;
- for j = 1 : alternatives_count
- for i = 1 : alternatives_count
- if j<>i then
- for m = 1 : criteria_amount
- agree_index = zeros(criteria_amount, 3);
- if ( alternative_config(m, step) == -1 ) then
- x = j;
- y = i;
- equals_flag = 0;
- end
- if equals_flag == 0 then
- d = weight_parameters(m);
- disagree_indexTemp(m, 1) = d;
- disagree_indexTemp(m, 2) = x;
- disagree_indexTemp(m, 3) = y;
- equals_flag = 1;
- elementsum_minus = sum(disagree_indexTemp(:, 1));
- sum_minus(x, y) = elementsum_minus;
- equals_flag = 1;
- end
- end
- step = step + 1;
- end
- disagree_indexTemp = zeros(criteria_amount, 3);
- end
- end
- disp(sum_minus, 'Cуммы весов критериев подмножеств I- ');
- agree_matrix = sum_plus ./ sum_minus;
- disp(agree_matrix, 'Матрица согласия');
- endfunction
- //ВЫБОР ЛУЧШЕЙ АЛЬТЕРНАТИВЫ
- function [best_alternative] = find_optimal_alternative(c, d, alternatives_count, agree_matrix, disagree_matrix, alternatives_names)
- // Матрица превосходства
- best_alternative = zeros( alternatives_count, alternatives_count);
- for i = 1 : alternatives_count
- for j = 1 : alternatives_count
- if agree_matrix(i, j) >= c & disagree_matrix( i,j ) <= d then
- best_alternative(i, j) = 1;
- end
- end
- end
- disp(best_alternative, 'Матрица превосходства вариантов');
- optimal_alternative = zeros(1, alternatives_count);
- optimal_alternative = sum(best_alternative, 'c');
- optimal_alternative_max = max(optimal_alternative);
- disp('------------------------------');
- disp('Результат:');
- for i = 1 : alternatives_count
- disp(optimal_alternative(i), alternatives_names(i));
- end
- disp('------------------------------');
- disp('Лучшая альтернатива:');
- for i = 1 : alternatives_count
- if optimal_alternative(i) == optimal_alternative_max then
- disp(optimal_alternative_max, alternatives_names(i));
- end
- end
- endfunction
- //БЛОК ВЫПОЛНЕНИЯ ПРОГРАММЫ
- alternatives_count = evstr(x_dialog('Введите количество альтернатив:', '5'));
- alternatives_names = ['InSky', 'Join UP!', 'Van Der Tour', 'Хороший Отдых', 'Поехали с нами'];
- alternatives_names = x_dialog('Перечислите альтернативы:', alternatives_names);
- criteria_amount = evstr(x_dialog('Введите количество критериев:', '6'));
- criteria_names = ['Стаж работы', 'Ценовая политика', 'Ассортимент туров','Месторасположение турагенства' , 'Прозрачность условий и документооборота', 'Качество обслуживания клиентов']
- criteria_names = x_dialog('Укажите критерии:', criteria_names);
- weight_maximum = evstr(x_dialog('Укажите максимальное значение шкалы:', '20'));
- weight_parameters = [17 20 18 12 16 17];
- weight_parameters = x_matrix('Введите весовые параметры критериев:', weight_parameters);
- criteria_values = [15 18 20 17 13;
- 16 15 11 18 13;
- 16 19 15 10 9;
- 19 16 16 15 14;
- 14 15 17 13 20;
- 17 20 12 16 20];
- criteria_values = x_matrix('Матрица критериев:', criteria_values);
- alternative_config = zeros(criteria_amount, (alternatives_count*alternatives_count-alternatives_count))
- c = 0.5;
- d = 0.5;
- alternative_config = compare_alternatives(criteria_amount, alternatives_count, criteria_values);
- disagree_matrix = find_disagree_value(criteria_amount, alternatives_count, criteria_values, alternative_config, weight_maximum);
- agree_matrix = find_agree_value(alternatives_count, criteria_amount, alternative_config, weight_parameters);
- find_optimal_alternative(c, d, alternatives_count, agree_matrix, disagree_matrix, alternatives_names);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement