1. 程式人生 > 實用技巧 >Topsis優劣解距離法 mlx程式碼

Topsis優劣解距離法 mlx程式碼

請參考https://blog.csdn.net/qq_36384657/article/details/98188769

mlx程式碼

topsis 優劣解距離法
引數說明:
分數、獲獎次數、價值等 屬於極大型指標(效益型)
不及格次數、被批評次數、成本等 屬於極小型指標(成本型)
clc;clear;
judge1 = [89 60 74 99]'; % 分數
judge2 = [89 60 74 99; 2 0 1 3]'; % 分數 和 被批評次數
演算法核心:
一個指標的情況:
(排序不就行了???)
多個指標的情況:
https://blog.csdn.net/qq_36384657/article/details/98188769
% 1.將指標【轉化為極大型】 x = max - x;
judge2(:,2) = max(judge2(:,2)) - judge2(:,2);

% 2.【標準化】處理 [每個元素除以其所在列各元素平方和的開方]
judge2 = judge2 ./ sqrt( sum(judge2 .^ 2)  );

% 3.【找出距離】 找出與最大最小值的距離
% 這裡的最大(小)值 (max1,max2,max3,...)為各列的最大(小)值
nmax = max(judge2);
nmin = min(judge2);

distanceMax =  sqrt(sum((judge2 - nmax) .^ 2 ,2)); % 減去最大值,平方,按照行求和,開根號
distanceMin =  sqrt(sum((judge2 - nmin) .^ 2 ,2)); % 減去最小值,平方,按照行求和,開根號

% 4.【計算分值】 (x - min) / (max - min)
score = distanceMin ./ (distanceMax + distanceMin);

% 5.【歸一化】
score = score ./ sum(score);
end
% 顯示名次
[~,I] = sort(score);
disp('最終排名:');
disp([score I])