目次:
- 基準レベル判定マトリックスの記入方法
- スキームレベルでの判定マトリクスの記入方法
- 判定マトリックスと整合性マトリックスに関する補足知識
- 整合性チェックの手順
- 判定マトリックスによる重みの計算方法(3つの方法)と対応するコード例
基準層の判定行列を埋める:
基準レベル判定マトリックスに記入する目的は、例えば、最適な観光地の選択において、各基準(指標)の割合を決定し、階層分析表の指標の重み欄に記入することです。景観、費用、居住地、食事、交通の指標がそれぞれどのくらいの割合を占めるのか、これらの指標の割合から各選択肢の合計スコアを計算することができます。
記入方法は尺度表に基づいて指標の重要度をペアで比較するため、10回の比較で基準層の判定マトリクスの記入が完了します。
スキームレベルでの判断マトリクスの入力
スキームレベルで判定マトリックスを埋める目的は、特定の指標に対して、各代替スキームにおけるその特定のスコアを与えること、つまり、階層分析テーブルの各水平行のデータを与えることです。方法は、スケール表に従って判定マトリクスを記入することです。評価指標はいくつかあるので、このプログラムレベルの判断マトリクスをいくつ埋める必要があるのか。
追加の知識ポイント:
判定行列(正逆行列)
- まず行列が正方行列であることを判断します
Aij
指標とj
比較した判定マトリックスの各データi
の重要性- この
i=j
とき、2つの指標は同じであるため、重要度は同等であり、1として記録されるため、判定行列の対角要素は1となります - 各要素がゼロより大きく、かつ
Aij * Aji=1
AHP では、構築する行列は判定行列です。
一貫性マトリックス
- マトリックスはまず判定マトリックスの特性をすべて満たします。
- 判定行列が を満たす場合
Aij * Ajk = Aik
、直感的には行列の行(列)が倍数であることを意味します。
注: 判定マトリックスを使用して重みを求める前に、整合性をチェックする必要があります。
整合性チェックの手順:
ステップ 1: 一貫性指数 CI を計算する
CI = λ max − nn − 1 CI\,\,=\,\,\frac{\lambda _{\max}-n}{n-1}CI _=n−1私マックス−ん
ステップ 2: 対応する平均ランダム一貫性インデックス RI を見つける
ステップ 3: 一貫性率を計算する CR
CR = CIRI CR\,\,=\,\,\frac{CI}{RI}C R=R ICI _
判定: CR<0.1 の場合、判定証拠の一貫性は許容できると考えられます。そうでない場合は、判定マトリックスを変更する必要があります。
整合性チェック用の MATLAB コードは次のとおりです。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
[V,D] = eig(A);%求出矩阵A的特征值和特征向量
Max_eig = max(max(D));%找到矩阵A的最大特征值
% 下面是计算一致性比例CR的环节 %
CI = (Max_eig - n) / (n-1);
RI=[0 0.0001 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
%注意哦,这里的RI最多支持 n = 15
% 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
else
disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end
行列を判断して重みを求める
方法1. 算術平均法による重量の計算
ステップ 1: 判定行列を列ごとに正規化します (各要素をデバイスが配置されている列の合計で割ります)
ステップ 2: 正規化された列を合計する (行ごとに合計)
ステップ 3: 追加されたベクトルの各要素を n で除算して、重みベクトルを取得します。
具体的な数式:
判定行列が次の行列 A であるとします。
A = [ a 11 a 12 ⋯ a 1 na 21 a 22 ⋯ a 2 n ⋮ …… ⋱ ⋮ an 1 an 2 ⋯ ann ] A=\left[ \begin{matrix } a_{ 11}& a_{12}& \cdots& a_{1n}\\ a_{21}& a_{22}& \cdots& a_{2n}\\ \vdots& \vdots& \ddots& \vdots\\ a_{n1 }& a_ {n2}& \cdots& a_{nn}\\ \end{行列} \right]あ=⎣⎢⎢⎢⎡ある1 1ある2 1⋮あるn1 _ある1 2ある2 2⋮あるn2 _⋯⋯⋱⋯ある1n _ある2n _⋮あるん_⎦⎥⎥⎥⎤
この場合、算術平均法によって得られる重みベクトルは次のようになります。
wi = 1 n ∑ j = 1 naij ∑ k = 1 nakj w_i=\frac{1}{n}\sum_{j=1}^n{\frac{a_ { ij}}{\sum_{k=1}^n{a_{kj}}}}\,\,w私は=n1j = 1∑ん∑k = 1んあるkj _ある私は
MATLAB コードは次のとおりです。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
Sum_A = sum(A); %sum函数默认是对矩阵的每一列进行累加,即按行求和
SUM_A = repmat(Sum_A,n,1); %将Sum_A这个行向量,重复n行,重复一列
Stand_A = A ./ SUM_A; %将矩阵A归一化,即每一个元素除以其所在列的和
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2)./n) %把归一化的矩阵的每一行累加,然后除以n,得到权重
方法2. 幾何平均法により重量を計算する
ステップ 1: A の要素を行ごとに乗算して、新しい列ベクトルを取得します。
ステップ 2: 新しい列ベクトルの各成分を n 乗で除算します。
ステップ 3: 列ベクトルを正規化して重みベクトルを取得する
判定行列が次の行列 A であるとします。
A = [ a 11 a 12 ⋯ a 1 na 21 a 22 ⋯ a 2 n ⋮ …… ⋱ ⋮ an 1 an 2 ⋯ ann ] A=\left[ \begin{matrix } a_{ 11}& a_{12}& \cdots& a_{1n}\\ a_{21}& a_{22}& \cdots& a_{2n}\\ \vdots& \vdots& \ddots& \vdots\\ a_{n1 }& a_ {n2}& \cdots& a_{nn}\\ \end{行列} \right]あ=⎣⎢⎢⎢⎡ある1 1ある2 1⋮あるn1 _ある1 2ある2 2⋮あるn2 _⋯⋯⋱⋯ある1n _ある2n _⋮あるん_⎦⎥⎥⎥⎤
この場合、幾何平均法によって得られる重みベクトルは次のようになります。
wi = ( ∏ j = 1 naij ) 1 n ∑ k = 1 n ( ∏ j = 1 nakj ) 1 n , ( i = 1 , 2 , … , n ) w_i = \frac{\left( \prod_{j=1}^n{a_{ij}} \right) ^{\frac{1}{n}}}{\sum_{k=1}^n{\left ( \prod_{j=1}^n{a_{kj}} \right) ^{\frac{1}{n}}}},\left( i=1,2,...\text{,} n \right )w私は=∑k = 1ん( ∏j = 1んあるkj _)n1( ∏j = 1んある私は)n1、(私は=1 、2 、…, n )
注: 各方法で得られた重みの合計は 1 である必要があり、丸めによって生じる誤差は無視でき、一般的な結果は小数点以下 4 桁を保持します。
MATLAB コードは次のとおりです。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A); %获得矩阵A的行和列的大小
Prduct_A = prod(A,2); %把矩阵A的每一行累乘,即按照列累乘
Prduct_n_A = Prduct_A .^ (1/n); %将新的列向量的每个分量开n次方
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A)) %对该列向量进行归一化即可得到权重向量
方法 3. 重量を計算するための固有値法 (一般的に使用される)
知識ポイントのリマインダー: 一貫した行列は n の 1 つの固有値を持ち、残りの固有値は 0 であり、行列の固有値が n のとき、対応する固有ベクトルは k [ 1 a 11 、 1 a 12 、 … , 1
a 1 n ] T , ( k ≠ 0 ) k\left[ \frac{1}{a_{11}},\frac{1}{a_{12}},...,\frac{1}{ a_{1n} } \right] ^T,\left( k\ne 0 \right)k[ある1 11、ある1 21、…、ある1n _1】T、( k=0 )
最初のステップ: 行列 A とそれに対応する固有ベクトルの最大固有値合計を見つけます。
ステップ 2: 取得した固有ベクトルを正規化して、取得した重みを取得します。
MATLAB コードは次のとおりです。
disp('请输入判断矩阵A')
A=input('A=');
%求矩阵A的全部特征值,构成对角阵D,求A的特征向量构成V的列向量(V的每一列都是D中与之相同列的特征值的特征向量)
[V,D] = eig(A);
Max_eig = max(max(D)); %求出矩阵A的最大的特征值
[r,c]=find(D == Max_eig , 1); %返回最大特征值所在的行和列,其中C记录所在列
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) ) %对最大特征值对应的特征向量进行归一化处理
注意: コンテストでは 3 つの方法をすべてリストすることが推奨されますが、計算には固有値法によって得られた重量結果のみが使用されます。
AHP関連の古典的な受賞論文やモデリング用紙のテンプレート、その他の素材については、公式アカウントに注目し、「AHP」と返信すると無料で入手できます。!!