数理モデリング研究ノート(28)評価カテゴリー:TOPSISモデル

理想解との類似性による順序選好手法のフルネームであるTopsis法は、中国語で優劣解の距離法と訳されることが多く、既存のデータに基づいて個人を評価・ランク付けすることができます。限られた数の評価対象が理想化された対象に近いかどうかでソートする方法は、既存の対象間の相対的な長所と短所を評価することです。
ここに画像の説明を挿入します
理解するための実際的な例を紹介します。
例:次の表は、5人の生徒の身体的パラメータを示しています。TOPSISメソッドを使用して、生徒の体調を総合的に評価して
ここに画像の説明を挿入します
ください上記の4つの指標の方向は同じで、
ここに画像の説明を挿入します
異なる指標を測定する必要があります。ポジティブ:
1。非常に小さい指標
ここに画像の説明を挿入します
2.中間指標
ここに画像の説明を挿入します
3.間隔指標
ここに画像の説明を挿入します
異なる機能の寸法が異なるため、指標は後で標準化する必要があります

最良および最悪の計画セットの決定:

1.一方で、決定要因自体に限界値があるかどうかを確認します。限界値は、実際的な重要性を満たす必要があります。

2.ないか、見つけるのが難しい場合は、すべての評価セットでMAX値とMIN値を見つけます

距離の計算:
1。正の距離の式:
ここに画像の説明を挿入します
2。負の距離の式:
ここに画像の説明を挿入します
3。評価指標値:
ここに画像の説明を挿入します
Xiaomingを例として、評価指標値を計算します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
さらに拡張:
上記の例の計算では、評価要素の重要性を前提としています。は同じですが、実際にはそうではないことが多く、さまざまな要因によって重要度に違いがあります。各要素の重要性をどのように設定しますか?
ここに画像の説明を挿入します
重みは、AHPまたはエントロピー法によって決定されます
(この列の3番目の部分では、EXCELのエントロピー法を紹介しました)

matlab:TOPSISと組み合わせたエントロピー法


%基于熵权法对于TOPSIS的修正
clear;clc;
load X.mat;
%获取行数列数
r = size(X,1);
c = size(X,2);
%首先,把我们的原始指标矩阵正向化
%第二列中间型--->极大型
middle = input("请输入最佳的中间值:");
M = max(abs(X(:,2)-middle));
for i=1:r
      X(i,2) = 1-abs(X(i,2)-middle)/M;
end
%第三列极小型--->极大型
max_value = max(X(:,3)); 
X(:,3) = abs(X(:,3)-max_value);
%第四列区间型--->极大型
a = input("请输入区间的下界:");
b = input("请输入区间的下界:");
M = max(a-min(X(:,4)),max(X(:,4))-b);
for i=1:r
       if (X(i,4)<a)
            X(i,4) = 1-(a-X(i,4))/M;
       elseif (X(i,4)<=b&&X(i,4)>=a)
           X(i,4) = 1;
       else
           X(i,4) = 1-(X(i,4)-b)/M;
       end
end
disp("正向化后的矩阵为:");
disp(X);
%然后对正向化后的矩阵进行熵权法赋权重
tempX = X;   %代替X进行计算的辅助变量,避免X受到影响而发生改变
%测试:tempX = [1,2,3;-1,0,-6;5,-3,2];
%标准化矩阵,消除负数项,并且把数值控制在0-1区间
min = min(tempX);
max = max(tempX);
min = repmat(min,size(tempX,1),1);
max = repmat(max,size(tempX,1),1);
tempX = (tempX-min)./(max-min);
%求出矩阵的概率矩阵,即能取到该值的概率
sumX = repmat(sum(tempX),size(tempX,1),1);
pX = tempX./sumX;
%求出信息熵矩阵,信息熵越大,能获得的信息就越少
temp = pX.*mylog(pX);
n = size(tempX,1);
sum1 = sum(temp);
eX =  sum1.*(-1/log(n));
%求出信息效用值
dX = 1-eX;
%求出每个指标的熵权
wX = dX./(sum(dX));
%打印输出
disp("每个指标依次的熵权为:");
disp(wX);

エントロピー法:

    function [W] = Entropy_Method(Z)
    % 计算有n个样本,m个指标的样本所对应的的熵权
    % 输入
    % Z : n*m的矩阵(要经过正向化和标准化处理,且元素中不存在负数)
    % 输出
    % W:熵权,m*1的行向量
     
    %% 计算熵权
        [n,m] = size(Z);
        D = zeros(1,m);  % 初始化保存信息效用值的行向量
        for i = 1:m
            x = Z(:,i);  % 取出第i列的指标
            p = x / sum(x);
            % 注意,p有可能为0,此时计算ln(p)*p时,Matlab会返回NaN,所以这里我们自己定义一个函数
            e = -sum(p .* mylog(p)) / log(n); % 计算信息熵
            D(i) = 1- e; % 计算信息效用值
        end
        W = D ./ sum(D);  % 将信息效用值归一化,得到权重    
    end

おすすめ

転載: blog.csdn.net/qq1198768105/article/details/113652262