Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Исходные данные
- alts_n = evstr(x_dialog('Кол-во альтернатив', '5'));
- alts = ['ПриватБанк', 'АльфаБанк', 'УкрСоцБанк', 'УкрСибБанк', 'МоноБанк'];
- alts = x_dialog('Альтернативы:', alts);
- crits_n = evstr(x_dialog('Кол-во критериев', '6'));
- crits = ['Надежность', 'Количество банкоматов', 'Репутация', 'Профессионализм персонала', 'Технологичность', 'Тарифная политика'];
- crits = x_dialog('Критерии', crits);
- L = evstr(x_dialog('Максимальное значение шкалы', '20'));
- crits_weights = [17 11 14 20 18 12];
- crits_weights = x_matrix('Весовой параметр каждого критерия', crits_weights);
- crits_matrix = [16 18 13 14 10;
- 12 16 17 11 19;
- 15 10 20 11 13;
- 16 16 13 10 19;
- 19 10 14 16 16;
- 11 17 17 12 16];
- crits_matrix = x_matrix('Матрица критериев:', crits_matrix);
- alts_conf = zeros(crits_n, (alts_n * alts_n - alts_n))
- C= 0.5;
- d = 0.5;
- f1 = figure(); // Создание графического объекта
- set(f1, 'position', [0, 0, 620, 827]); // Размер окна
- uicontrol('style', 'text', ..
- 'position', [10, 797, 600, 20], ..
- 'string', 'Матрица критериев');
- table = ["" alts' "Веса"; [crits string(crits_matrix(:, 1)) string(crits_matrix(:, 2)) string(crits_matrix(:, 3)) string(crits_matrix(:, 4)) string(crits_matrix(:, 5)) string(crits_weights')]];
- uicontrol('style', 'table', ..
- 'string', table, ..
- 'position', [10 660 600 127]);
- // Сравнение конфигураций
- alts_conf = zeros(crits_n, (alts_n * alts_n - alts_n));
- k = 0;
- for j = 1 : alts_n
- for i = 1 : alts_n
- if j <> i then
- k = k + 1;
- for m = 1 : crits_n
- if crits_matrix(m, j) > crits_matrix(m, i) then
- alts_conf(m, k) = 1;
- elseif crits_matrix(m, j) == crits_matrix(m, i) then
- alts_conf(m, k) = 0;
- elseif crits_matrix(m, j) < crits_matrix(m, i) then
- alts_conf(m, k) = -1;
- end
- end
- end
- end
- end
- uicontrol('style', 'text', ..
- 'position', [10, 630, 600, 20], ..
- 'string', 'Сравнение конфигураций (-1 <, 0 =, 1 >)');
- table = ["" string([1 2 3 4 5 6]); [["AB"; "AC"; "AD"; "AE"; "BA"; "BC"; "BD"; "BE"; "CA"; "CB"; "CD"; "CE"; "DA"; "DB"; "DC"; "DE"; "EA"; "EB"; "EC"; "ED"] string(alts_conf'(:, 1)) string(alts_conf'(:, 2)) string(alts_conf'(:, 3)) string(alts_conf'(:, 4)) string(alts_conf'(:, 5)) string(alts_conf'(:, 6))]];
- uicontrol('style', 'table', ..
- 'string', table, ..
- 'position', [10 493 600 127]);
- // Расчёт матрицы несогласия
- disagree_matrix = zeros(alts_n, alts_n);
- is_equal = 0;
- step = 1;
- for j = 1 : alts_n
- for i = 1 : alts_n
- if j <> i then
- for m = 1 : crits_n
- if alts_conf(m, step) == -1 then
- x = j;
- y = i;
- is_equal = 1;
- end
- if is_equal == 1 then
- d = abs(((crits_matrix(m, y) - crits_matrix(m, x)) / L));
- 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));
- is_equal = 0;
- end
- end
- step = step + 1;
- end
- disagree_index = zeros(crits_n, 3);
- end
- end
- // disp(disagree_matrix, 'Матрица несогласия');
- uicontrol('style', 'text', ..
- 'position', [10, 463, 600, 20], ..
- 'string', 'Матрица несогласия');
- alts_aliases = ["A" "B" "C" "D" "E"];
- table = [["" alts_aliases]; [alts_aliases' string(disagree_matrix(:, 1)) string(disagree_matrix(:, 2)) string(disagree_matrix(:, 3)) string(disagree_matrix(:, 4)) string(disagree_matrix(:, 5))]];
- uicontrol('style', 'table', ..
- 'string', table, ..
- 'position', [10 342 600 111]);
- // Расчёт матрицы согласия и подмножеств I+, I=, I
- agree_matrix = zeros(alts_n, alts_n);
- // Вычисление суммы весов критериев подмножеств I+, I=
- sum_plus_equals = zeros(alts_n, alts_n);
- is_equal = 1;
- step = 1;
- for j = 1 : alts_n
- for i = 1 : alts_n
- if j <> i then
- for m = 1 : crits_n
- agree_index = zeros(crits_n, 3);
- if (alts_conf(m, step) == 1 || alts_conf(m, step) == 0) then
- x = j;
- y = i;
- is_equal = 0;
- end
- if is_equal == 0 then
- d = crits_weights(m);
- agree_index_temp(m, 1) = d;
- agree_index_temp(m, 2) = x;
- agree_index_temp(m, 3) = y;
- is_equal = 1;
- elem_sum_equal_plus = sum(agree_index_temp(:, 1));
- sum_plus_equals(x, y) = elem_sum_equal_plus;
- is_equal = 1;
- end
- end
- step = step + 1;
- end
- agree_index_temp = zeros(crits_n, 3);
- end
- end
- // disp(sum_plus_equals, 'Cуммы весов критериев подмножеств I+ и I= ');
- // Вычисление общей суммы весов
- weight_sum = ones(alts_n, alts_n);
- for j = 1 : alts_n
- for i = 1 : alts_n
- if j <> i then
- for m = 1 : crits_n
- x = j;
- y = i;
- d = crits_weights(m);
- agree_index_temp(m, 1) = d;
- agree_index_temp(m, 2) = x;
- agree_index_temp(m, 3) = y;
- elem_sum = sum(agree_index_temp(:, 1));
- weight_sum(x,y) = elem_sum;
- end
- end
- agree_index_temp = zeros(crits_n, 3);
- end
- end
- // disp(weight_sum, 'Общая сумма весов');
- // Вычисление матрицы согласия
- agree_matrix = sum_plus_equals ./ weight_sum;
- // disp(agree_matrix, 'Матрица согласия');
- uicontrol('style', 'text', ..
- 'position', [10, 312, 600, 20], ..
- 'string', 'Матрица согласия');
- table = [["" alts_aliases]; [alts_aliases' string(agree_matrix(:, 1)) string(agree_matrix(:, 2)) string(agree_matrix(:, 3)) string(agree_matrix(:, 4)) string(agree_matrix(:, 5))]];
- uicontrol('style', 'table', ..
- 'string', table, ..
- 'position', [10 191 600 111]);
- // Вычисление превосходства альтернатив и выбор лучшей альтернативы
- // Матрица превосходства
- superior_alts = zeros(alts_n, alts_n);
- for i = 1 : alts_n
- for j = 1 : alts_n
- if agree_matrix(i, j) >= C & disagree_matrix(i, j) <= d then
- superior_alts(i, j) = 1;
- end
- end
- end
- // disp(superior_alts, 'Матрица превосходства вариантов');
- uicontrol('style', 'text', ..
- 'position', [10, 161, 600, 20], ..
- 'string', 'Матрица превосходства вариантов');
- table = [["" alts_aliases]; [alts_aliases' string(superior_alts(:, 1)) string(superior_alts(:, 2)) string(superior_alts(:, 3)) string(superior_alts(:, 4)) string(superior_alts(:, 5))]];
- uicontrol('style', 'table', ..
- 'string', table, ..
- 'position', [10 40 600 111]);
- // Выбор лучшей альтернативы
- best_alt = zeros(1, alts_n);
- best_alt = sum(superior_alts, 'c');
- max_best_alt = max(best_alt);
- disp('------------------------------');
- disp('Результат:');
- for i = 1 : alts_n
- disp(best_alt(i), alts(i));
- end
- disp('------------------------------');
- disp('Лучшая альтернатива:');
- for i = 1 : alts_n
- if best_alt(i) == max_best_alt then
- disp(max_best_alt, alts(i));
- answer = alts(i);
- break;
- end
- end
- uicontrol('style', 'text', ..
- 'position', [10, 10, 600, 20], ..
- 'string', 'Лучшая альтернатива - ' + answer);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement