层次分析法

例 10.2 (续例 10.1)利用层次分析法对 10 个学生进行评价排序。
用层次分析法进行评价,实际上就是求指标变量 x1,x2,...,x8 的 权重向量 w_{1} ,w_{2} , ... , w_{8} 就会

首先给出指标 x1,x2,...,x8 重要性的两两比较判断矩阵。 

C = [ [1.,2.,4.,4.,4.,6.,6.,6.],[1/2,1.,2.,2.,2.,3.,3.,3.],
     [1/4,1/2,1.,1.,1.,1.,2.,2.],[1/4, 1/2, 1., 1., 1., 1., 2., 2.],
     [1/4, 1/2, 1., 1., 1., 1., 2., 2.],[1/6,1/3,1.,1.,1.,1.,2.,2.],
     [1/6,1/3,1/2,1/2,1/2,1/2,1.,1.],[1/6, 1/3, 1/2, 1/2, 1/2, 1/2, 1., 1.]]

(1)计算得到矩阵C 的最大特征值为 \lambda_{max} = 8.0615 , 归一化 特征向量 : 

v=  [0.36194866 0.18097433 0.0914154  0.0914154  0.0914154  0.08393238  0.04944921 0.04944921]

(2)判断矩阵的一致性指标

                                 CI = \frac{\lambda_{max}-n}{n-1} 

对 n = 1, ,9 ,Saaty 给出的平均随机一致性指标 RI 的值如表  所示。

平均随机一致性指标RI值
n123456789
RI000.580.901.121.241.321.411.45

一致性指标是什么意思? 一定要符合一些传递性 , 比如 A 比 B 漂亮 ,B 比C 漂亮 , 那么 C 如果比A 漂亮就不一致了。

取评价的权重 w = [w_{1},w_{2}...,w_{8}]^{T}  ,则评价函数 为 f = \sum_{j=1}^{8} w_{j}x_{j}  第i 个评价对象的评价值为 :

f_{i}= \sum_{j=1}^{8} w_{j}a_{ij} 。

用MATLAB计算时 ,MATLAB程序如下: 

数据

链接:https://pan.baidu.com/s/1xyyKyDkSd6xGzFu-Qu-E_w 
提取码:tzjq 

clc, clear 
a = load('data3.txt') ; 
c=[1 2 4 4 4 6 6 6;
    1/2 1 2 2 2 3 3 3 ; 
    1/4 1/2 1 1 1 1 2 2;
    1/4 1/2 1 1 1 1 2 2 ; 
    1/4 1/2 1 1 1 1 2 2;
    1/6 1/3 1 1 1 1 2 2;   
    1/6 1/3 1/2 1/2 1/2 1/2 1 1;
    1/6 1/3 1/2 1/2 1/2 1/2 1 1]; 
[w,lamda]=eigs(c,1);  %求最大特征值及对应的特征向量 [ 特征向量, 特征值 ] 
CI = (lamda-8)/7 ; % 计算一致性指标 
CR = CI /1.41 ; % 计算一致性比例
w = w/sum(w) ; % 特征向量归一化
f = a*w ; 
[sf ,ind1] = sort(f,'descend') ; 

python : 

import numpy as np
import pandas as pd

# A = [[1/1,2/1,5/1,3/1],[1/2,1/1,3/1,1/2],
#      [1/5,1/3,1/1,1/4],[1/3,2/1,4/1,1/1]]
A = [ [1.,2.,4.,4.,4.,6.,6.,6.],[1/2,1.,2.,2.,2.,3.,3.,3.],
     [1/4,1/2,1.,1.,1.,1.,2.,2.],[1/4, 1/2, 1., 1., 1., 1., 2., 2.],
     [1/4, 1/2, 1., 1., 1., 1., 2., 2.],[1/6,1/3,1.,1.,1.,1.,2.,2.],
     [1/6,1/3,1/2,1/2,1/2,1/2,1.,1.],[1/6, 1/3, 1/2, 1/2, 1/2, 1/2, 1., 1.]]

Arr = np.array(A)
n = Arr.shape[0]
V,D = np.linalg.eig(A)
D = D.real
V = V.real
D = D.tolist()
V = V.tolist()
# 求出特征值 和 特征向量
print("特征值 : \n" , V)
print("特征向量 :\n"  , D)
#
# # 最大特征值 lambda 及其位置
lamda = np.max(V)
#
loca = V.index(lamda) #最大特征值位置
#
CI = (lamda-n)/(n-1)
CR = CI /0.9
print(CR)
D = np.array(D)
# print(D[:,loca])
W = D[:,loca]
w = W/np.sum(W,axis=0)
print( "w : \n " , w)
w = np.array(w).reshape(8,1)
a = pd.read_excel("data1.xlsx").values[:,1:]
print(a)
print(type(a))
print(type(w))
f = np.dot(a,w)
# 评分
print(f)
print(f.shape)
print(f.argsort(axis=0))




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值