modeling python(DEMATEL-ISM模型的Python实现——方法介绍以及代码复现)
前言
本文源于笔者的《系统工程》课程的小组作业 ,笔者尝试运用DEMATEL-ISM方法来进行分析 ,建模求解 ,但在网络上并没有找到相应的 ,特别是集合DEMATEL-ISM方法的代码 。因此自己码了DEMATEL-ISM模型的Python代码 ,并作为第一个博客发布~
参考文献中 ,笔者主要参考了李广利等1的研究 ,本文也将依此论文进行方法解读和代码复现 。
网上查找资料的过程中 ,笔者发现了一个MCDA方法的python代码库2 ,里面有很多多准则决策分析模型的相关代码,其中就有DEMATEL的代码 ,笔者做了一定的参考 。
DEMATEL-ISM分析方法
方法简介
DEMATEL(Decision Making Trial and Evaluation Laboratory) ,全称为“决策试验和评价实验法 ”,是一种运用图论与矩阵工具进行系统要素分析的方法 ,通过分析系统中各要素之间的逻辑关系与直接影响关系 ,可以判断要素之间关系的有无及其强弱评价 。ISM(Interpretative Structural Modelling)法全称为“解释结构模型 ”,其特点是把复杂的系统分解为若干子系统(要素) ,通过代数运算将系统构造成一个多级递阶的结构模型 。
DEMATEL 模型可利用矩阵运算求出因素间的因果关系和影响强度 ,通过可视化因素间的因果关
系 ,得以揭示复杂问题中的关键影响因素及影响程度;但该方法无法有效识别系统中因素的层级结
构 。ISM 法则通过分析构成系统的各子系统( 因素或要素) 之间的直接二元相关关系 ,基于布尔代数运算等 ,构造多级递阶有向拓扑图 ,但无法确定要素对系统的影响程度 。将两种方法结合 ,可以识别系统中关键要素及其影响程度 ,并构建要素的层级结构 。DEMATEL-ISM方法的过程如下:
步骤
明确系统要素明确分析系统所构成的要素 ,将构成系统的要素标记为
x
1
x_1
x1,x
2
x_2
x2,x
3
x_3
x3,…
\ldots
…,x
n
x_n
xn 。 确定直接影响矩阵采用专家打分法,比较
x
i
x_i
xi对x
j
x_j
xj的影响 ,由于因素与自身比较为没有影响 ,直接影响矩阵的对角线值为0。通过比较得到直接影响矩阵A
A
A。
A
=
[
x
12
⋯
x
1
n
x
21
⋯
x
2
n
⋮
⋮
⋱
⋮
x
m
1
x
m
2
…
]
\begin{align} A= \begin{bmatrix} 0&x_{12}&\cdots&x_{1n}\\ x_{21}&0&\cdots&x_{2n}\\ \vdots &\vdots&\ddots &\vdots \\ x_{m1}&x_{m2}&\dots &0 \end{bmatrix} \end{align}
A=0x21⋮xm1x120⋮xm2⋯⋯⋱…x1nx2n⋮0 式中因素x
i
j
(
i
=
1
,
2
,
…
,
m
;
j
=
1
,
2
,
…
,
n
;
i
≠
j
)
x_{ij}(i=1,2, \ldots, m;j=1,2, \ldots,n;i\neq j)
xij(i=1,2,…,m;j=1,2,…,n;i=j)表示因素x
i
x_i
xi对x
j
x_j
xj的直接影响 。i
=
j
i=j
i=j时,x
i
j
=
x_{ij}=0
xij=0。 规范影响矩阵归一化原始关系矩阵得到规范影响矩阵 。归一化方法有很多种 ,这里可以采用行最大值法进行归一化 ,即将矩阵
A
A
A的每一行求和,在这些值中取最大值 ,将矩阵A
A
A中元素除以最大值 ,得到规范直接影响矩阵B
B
B。
B
=
x
i
j
m
a
x
(
∑
j
=
1
n
x
i
j
)
\begin{align} B=\frac{x_{ij}}{max(\sum\limits_{j=1}^n x_{ij})} \end{align}
B=max(j=1∑nxij)xij 计算综合影响矩阵综合系统矩阵体现系统中各个元素间的影响的综合效应 ,规范影响矩阵不断自乘后矩阵的所有值会趋近于0 ,即
lim
k
→
∞
B
k
=
\lim\limits_{k \to \infty} B^k=0
k→∞limBk=0。计算综合影响矩阵时 ,得到
T
=
(
B
+
B
2
+
⋯
+
B
k
)
=
∑
k
=
1
∞
B
k
=
B
(
I
−
B
)
−
1
\begin{align} T=(B+B^2+\dots +B^k)=\sum\limits_{k=1}^\infty B^k=B(I-B)^{-1} \end{align}
T=(B+B2+⋯+Bk)=k=1∑∞Bk=B(I−B)−1 式中为I
I
I单位矩阵 。 计算各个要素的影响度 、被影响度 、中心度和原因度影响度指矩阵
T
T
T中各行值和 ,表示各行要素对其他所有要素的综合影响值 ,记作D
i
D_i
Di,有:
D
i
=
∑
j
=
1
n
x
i
j
,
(
i
=
1
,
2
,
…
,
n
)
\begin{align} D_i=\sum\limits_{j=1}^n x_{ij},(i=1,2,\dots,n) \end{align}
Di=j=1∑nxij,(i=1,2,…,n) 被影响度指矩阵T
T
T中各列值和 ,表示各列要素对其他所有要素的综合影响值,记作C
i
C_i
Ci,有:
C
i
=
∑
j
=
1
n
x
j
i
,
(
i
=
1
,
2
,
…
,
n
)
\begin{align} C_i=\sum\limits_{j=1}^n x_{ji},(i=1,2,\dots,n) \end{align}
Ci=j=1∑nxji,(i=1,2,…,n) 中心度表示因素在评价体系中的位置及其所起作用的大小 ,某要素的中心度为其影响度于被影响度之和,记作M
i
M_i
Mi,有:
M
i
=
D
i
+
C
i
\begin{align} M_i=D_i+C_i \end{align}
Mi=Di+Ci原因度由某要素的影响度和被影响度相减得到 ,记作,有:
R
i
=
D
i
−
C
i
\begin{align} R_i=D_i-C_i \end{align}
Ri=Di−Ci 当原因度大于0时 ,表示该要素对其他要素的影响程度大 ,称其为原因要素 ,当原因度小于0时 ,该要素为结果要素 。 绘制因果图将中心度
M
i
M_i
Mi为横坐标 ,将原因度R
i
R_i
Ri作为纵坐标 ,绘制因果关系图 。该图可以直观体现因果关系 。 确定整体影响矩阵整体影响矩阵由综合影响矩阵和单位矩阵相加得到 。
确定可达矩阵确定可达矩阵时需要引入一个阈值
λ
\lambda
λ以剔除因素之间影响程度较小的关系 ,从而明确层级结构的划分 。引入阈值λ
\lambda
λ对整体影响矩阵E
E
E进行处理 ,可以得到可达矩阵F
F
F。则有:
f
i
j
=
{
1
e
i
j
≥
λ
(
i
,
j
=
1
,
2
,
…
,
n
)
e
i
j
<
λ
(
i
,
j
=
1
,
2
,
…
,
n
)
\begin{equation} f_{ij}= \begin{cases} 1 & & {e_{ij}\geq\lambda(i,j=1,2,\dots,n)}\\ 0 & & {e_{ij}<\lambda(i,j=1,2,\dots,n)} \end{cases} \end{equation}
fij={10eij≥λ(i,j=1,2,…,n)eij<λ(i,j=1,2,…,n) 划分层级由可达矩阵
F
F
F的第i
i
i行上值为1的列对应的因素求得可达集R
(
x
1
)
=
{
x
i
∣
F
i
j
=
1
}
R(x_1)=\{x_i|F_{ij} =1\}
R(x1)={xi∣Fij=1} ,表示从因素x
i
x_i
xi出发可以达到的全部因素的合集,由可达矩阵F
F
F的第i
i
i列上值为1的行对应的因素求得先行集S
(
x
1
)
=
{
x
i
∣
F
j
i
=
1
}
S(x_1)=\{x_i|F_{ji} =1\}
S(x1)={xi∣Fji=1},表示可以达到因素的全部因素的合集 。如果R
(
x
1
)
R(x_1)
R(x1)和S
(
x
1
)
S(x_1)
S(x1)满足R
(
x
1
)
∩
S
(
x
1
)
=
R
(
x
1
)
R(x_1)\cap S(x_1)=R(x_1)
R(x1)∩S(x1)=R(x1) ,则表示中对应的元素均能在中找到前因 ,将该元素称为高层级的元素 。然后从可达矩阵中去除对应的行和列,再从矩阵中抽取最高级的因素 ,不断重复该过程 ,直到所有的行和列均被去除。 绘制因素之间的递阶层次结构根据去除因素的顺序,绘制系统要素间多级递阶有向拓扑图 。
实例与代码
DEMATEL-ISM计算这里笔者直接给出一组数据 ,10项因素 ,直接影响矩阵
A
A
A如下 。
下面是DEMETAL-ISM计算的Python代码:
#导入所需库 import numpy as np import pandas as pd #直接影响矩阵A A = np.array([[0, 2, 0, 2, 3, 2, 3, 2, 3, 2], [0, 0, 0, 1, 3, 2, 0, 1, 1, 2], [0, 1, 0, 0, 2, 1, 0, 0, 0, 1], [0, 2, 0, 0, 3, 2, 0, 0, 0, 1], [1, 3, 0, 2, 0, 1, 1, 0, 1, 1], [0, 2, 0, 2, 1, 0, 1, 1, 0, 2], [2, 2, 0, 0, 2, 1, 0, 1, 2, 1], [0, 2, 0, 0, 1, 1, 1, 0, 1, 2], [3, 2, 0, 1, 2, 2,创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!