赞
踩
学习数学建模,教程为B站数模加油站,这里当笔记 / 心得。
之前看的清风,讲的很长,还不清晰,写了一般,后面看了数模加油站之后转了。
只需要找出三层的各个选项即可,分别为:目标、评价指标、待评价的对象。
判断矩阵:
主要对一个指标相对于另一个指标的重要程度的描述,用矩阵表示应该是方便描述和计算。
这一部分比较主观,所以可能出现问题。
比如:
观察第二行第三列和第四列可以得到:作品数量<颜值<作品质量
但是直接比较作品数量和作品质量,即第四行第三列,可以得出作品数量>作品质量。
得出的结果前后矛盾,所以需要一致性检验。
一致矩阵: a i j = a i k ∗ a k j a_{ij} = a_{ik} * a_{kj} aij=aik∗akj 且 矩阵的各行各列成倍数关系。
条件1:
a
i
j
=
a
i
k
∗
a
k
j
a_{ij} = a_{ik} * a_{kj}
aij=aik∗akj
a
i
k
=
b
i
b
k
a_{ik} =\frac{b_i}{b_k}
aik=bkbi,
a
k
j
=
b
k
b
j
a_{kj} =\frac{b_k}{b_j}
akj=bjbk,
b
k
b_k
bk 约分即可得出。(
b
i
b_i
bi表示k评价指标的重要程度)
条件2:各行各列成倍数关系
以列为例,对于第 k 列和第 j 列有
a
i
k
=
b
j
b
k
a
i
j
a_{ik} = \frac{b_j}{b_k} a_{ij}
aik=bkbjaij,所以第 k 列是第 j 列的
b
j
b
k
\frac{b_j}{b_k}
bkbj倍
一致性检验原理: 检验我们构造的判断矩阵和一致性矩阵是否有太大的差别。
证明就略过了。
一致性检验步骤:
举例:
通过一致性检验后,就可以对每个指标计算权重,再求加权和即可。
计算权重共有三种方法:
import numpy as np # 定义判断矩阵A A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]]) # 计算每列的和 ASum = np.sum(A, axis=0) # 获取A的行和列 n, _ = A.shape # 归一化 Stand_A = A / ASum # 各列相加到同一行 ASumr = np.sum(Stand_A, axis=1) # 计算权重向量 weights = ASumr / n print(weights)
# 将A中每一行元素相乘得到一列向量
prod_A = np.prod(A, axis=1)
# 将新的向量的每个分量开n次方等价求1/n次方
prod_n_A = np.power(prod_A, 1/n)
# 归一化处理
re_prod_A = prod_n_A / np.sum(prod_n_A)
找到最大的特征值对应的特征向量,进行归一化。
# 找出对应的特征向量
max_vector = eig_vectors[:,np.argmax(eig_values)]
# 对特征向量进行归一化处理,得到权重
weights = max_vector / np.sum(max_vector)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。