当前位置:   article > 正文

学习day1 数学建模

学习day1 数学建模

学习数学建模,教程为B站数模加油站,这里当笔记 / 心得。
之前看的清风,讲的很长,还不清晰,写了一般,后面看了数模加油站之后转了。

层次分析法(AHP)

在这里插入图片描述
在这里插入图片描述

基本步骤

  1. 建立递阶层次结构模型
  2. 构造出各层的所有判断矩阵
  3. 一致性检验
  4. 求权重后进行评价

建立递阶层次结构模型

在这里插入图片描述
只需要找出三层的各个选项即可,分别为:目标、评价指标、待评价的对象。

构造出各层的所有判断矩阵

判断矩阵:
在这里插入图片描述
主要对一个指标相对于另一个指标的重要程度的描述,用矩阵表示应该是方便描述和计算。
在这里插入图片描述
这一部分比较主观,所以可能出现问题。

比如:
观察第二行第三列和第四列可以得到:作品数量<颜值<作品质量
但是直接比较作品数量和作品质量,即第四行第三列,可以得出作品数量>作品质量。

得出的结果前后矛盾,所以需要一致性检验。

一致性检验

一致矩阵: a i j = a i k ∗ a k j a_{ij} = a_{ik} * a_{kj} aij=aikakj 且 矩阵的各行各列成倍数关系。

条件1: a i j = a i k ∗ a k j a_{ij} = a_{ik} * a_{kj} aij=aikakj
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

在这里插入图片描述

一致性检验原理: 检验我们构造的判断矩阵和一致性矩阵是否有太大的差别。

证明就略过了。

一致性检验步骤:

  1. 计算一致性指标 C I = λ m a x − n n − 1 CI = \frac{\lambda_{max}-n}{n-1} CI=n1λmaxn λ m a x \lambda_{max} λmax为一致矩阵最大的特征值,n为指标个数)
  2. 查找对应的平均随机一致性指标RI(查表)
    在这里插入图片描述
  3. 计算一致性比例CR
    在这里插入图片描述

举例:

在这里插入图片描述

求权重后进行评价

通过一致性检验后,就可以对每个指标计算权重,再求加权和即可。

计算权重共有三种方法:

  1. 算数平均值
  2. 几何平均值
  3. 特征向量
算数平均值
  1. 将每列进行归一化
  2. 每个指标的权重为每行求算术平均值
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
几何平均值
  1. 每行求几何平均值。(相乘开n次方)
  2. 将得到的几何平均值进行归一化。
# 将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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
特征向量

找到最大的特征值对应的特征向量,进行归一化。

# 找出对应的特征向量
max_vector = eig_vectors[:,np.argmax(eig_values)]

# 对特征向量进行归一化处理,得到权重
weights = max_vector / np.sum(max_vector)
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/948690
推荐阅读
相关标签
  

闽ICP备14008679号