多准测决策(Multi-criteria decision making)方法-北太天元学习20
决策是管理者从事管理工作的基础,但是决策不仅对管理重要,对人的一生都非常重要。实际上,我们每天都在做决策,不断做出选择, 每一个岔路的选择都会影响后面人生的发展历程。初中毕业生要选择上哪所高中,高中毕业生要决定选哪个专业。 妈妈们决定让孩子每天玩手机的时间。厨师们选择做菜时放多少盐。中国人民银行对加息还是降息要要作出决策。面对疫情是采取“清零防疫”还是“与病毒共存”也需要作出决策。这些决策可能是仅仅只影响到个人,也可能是具有全球影响力的决策,还可能是介于两者之间的。能够做出正确的决定可以对个人的生活设置产生巨大的积极影响。
然而,做出正确的决定往往说起来容易做起来难。首先,假设决策者知道他们的选择,他们需要在这些选择中确定哪一个能够最大程度地满足自己的目标。举个简单的例子,小芳是一个高中生毕业生,她正试图在人工智能和数学两个专业之间做出选择哪一个专业的决定。她需要知道她看重专业的哪些因素:个人喜好、发展空间或就业前景。小芳的目标是选择一个专业让自己看重的这些因素达到最大值。 作为一个决策者, 小芳需要确定每种选择在多大程度上满足了他们的目标。可是小芳如何确定这些她看重的因素的占比是多少呢? 即使小芳知道人工智能和数学对是否更好满足这些她看重的因素有明确的想法,她的判断仍然可能表现出不一致性,或者可能随着时间的推移而变化。
小芳面临的问题就是一个多准则决策问题。面对这样的问题,决策者往往是左右摇摆。我们在互联网上往往也看到“既要..., 又要..., 还要....”这样的表述,实际上就是要解决这样的问题,
也就是说要做一个决策,而且要满足多个准则。
层次分析法是解决多准则决策问题的一个方法,
我在前面发了一个视频简单介绍了这个方法,请看【北太天元实现层次分析法-以如何选购汽车为例】 https://www.bilibili.com/video/BV1Zh4y1973i/?share_source=copy_web&vd_source=2adc5aa7a702b808eb8b31dbd210f954
这里,我不再详细的描述层次分析法,而是给一些自己的简单理解。
这个方法用到的数学工具是 特征值和特征向量, 我感觉和page rank 算法有相通的地方。
还是拿小芳选专业的例子来说,要选择的专业是 人工智能(AI) 和 数学 (MATH)
要考虑的准则有 个人喜好(love), 发展空间(space) 和 就业前景(money)
目标: 是选择一个专业尽量满足上面三个准则。
如果小芳就要100%的按照 love 来选择, 那事情就简单,就看AI和 MATH 她更喜欢哪一个了。但是往往事情没有那么简单,作为一个不是生活在真空的人,
她往往是要“既要...又要...还要...”。 但要定量地给出来这三个因素的比例(或者归一成
一个概率)是很难的。 我说得归一成概率,也就是说让我考虑1万次,我可能5000次先考虑
的是 love, 3000次考虑是 space, 2000次考虑的是money . 那么,我们可以给出
这个三个因素的重要性是 0.7, 0.3, 0.2.
那这么一看,这个问题就解决了,但是往往决策的因素更多,同时给这些因素排个队
往往很难。因此层次分析法 是通过对每两个因素进行排队,然后计算出所有因素的排序。
我们对两个因素排队往往相对容易很多,
例如, 在 love 和 space 之间, 你更看重哪一个因素,如果love 的重要性是1的话,
space 的重要性是几? 而且是个选择题, 可以选择 1/7,1/5,1/3, 1,3,5,7 这
7个选项,分别表示 非常不重要, 不重要,一点点不重要,同等重要,有点重要,重要,非常重要。
于是我们就得到下面的矩阵 (数据通过让小芳填写调查表获取)
love space money
love 1 1/3 1/7
space 3 1 1/3
money 7 3 1
Input [18] >> A = [ 1 1/3 1/7; 3 1 1/3; 7 3 1]
A =
3x3 double
1 1/3 1/7
3 1 1/3
7 3 1
观察这个矩阵的列和不是1,所以不能把这个矩阵理解成一个转移矩阵,但是这个矩阵每行的
含义更加明确,我们可以把这个矩阵先转置一下
Input [19] >> A = A'
A =
3x3 double
1 3 7
1/3 1 3
1/7 1/3 1
下面涉及到进一步的如何改造这个矩阵,肯定会有人想出不同的方法,我这里借用
page rank的思想,要把A的每一列改造成一个概率分布,我们以第一列为例
A(:,1) 是 [1; 1/3; 1/7]
那么love 是最重要的,space 其次, money 最不重要,我们把这个三个数对应到
选择概率
例如
Input [21] >> A1 = A(:,1)
A1 =
3x1 double
1
1/3
1/7
Input [22] >> A1 = A1/norm(A1,1)
A1 =
3x1 double
21/31
7/31
3/31
经过这样的归一化,我们看到 [1;1/3;1/7] 被转化成
[ 21/31; 7/31/; 3/31]
可以看成我们选择三种因素的概率, 我们最看重 love, 因此选择love的概率最高,是21/31.
其它列,我们也同样做这样的操作, 最后得到
Input [24] >> for j = 1:3
... >> A(:,j) = A(:,j)/norm(A(:,j),1);
... >> end
Input [25] >> A
A =
3x3 double
21/31 9/13 7/11
7/31 3/13 3/11
3/31 1/13 1/11
然后,我们计算这个矩阵的最大特征值对应的特征向量
Input [28] >> [V,D] = eig(A)
V =
3x3 complex double
列 1 -- 2
-0.93866 + 0i 0.67519 + 0i
-0.32059 + 0i -0.50095 + 0.3625i
-0.12705 + 0i -0.17424 - 0.3625i
列 3
0.67519 + 0i
-0.50095 - 0.3625i
-0.17424 + 0.3625i
D =
3x3 complex double
列 1 -- 2
1 + 0i 0 + 0i
0 + 0i -0.00045116 + 0.030035i
0 + 0i 0 + 0i
列 3
0 + 0i
0 + 0i
-0.00045116 - 0.030035i
我们也观察到计算的特征值是复数,因此我们选择模最大的特征值对应的特征向量,
我们仅仅取特征向量的实部
Input [29] >> v1=V(:,1)
v1 =
3x1 complex double
-0.93866 + 0i
-0.32059 + 0i
-0.12705 + 0i
Input [30] >> v1 = real(v1)
v1 =
3x1 double
-0.93866
-0.32059
-0.12705
Input [31] >> v1 =v1/norm(v1,1)
v1 =
3x1 double
-0.6771
-0.23125
-0.091646
Input [32] >> v1 = -v1
v1 =
3x1 double
0.6771
0.23125
0.091646
最后,我们得到 love, space, money 在我们心中的重量的的数值 (这就完成了从定性分析
到定量分析) :
love 0.6771, space 0.23125 , money 0.091646
下面我们就分析 AI 和 MATH 两个专业 对各个因素来说的重要性是多大。
例如
对于 love 而言, AI 的重要性如果是1, 那么MATH 的重要性是多大? 选项有
非常不重要, 不重要, 有点不重要, 同种重要, 有点重要, 重要, 非常重要
分别对应数字 1/7, 1/5, 1/3, 1, 3, 5, 7
于是我们得到一个矩阵
B1 = [ 1 5
1/3 1
];
这里的数字不一定要保持很好的一致性,因为先问AI 是1,小芳可能选了MATH 是 5,
但是但再次问到 MATH 是1, 小芳可能选 AI 是 1/3.
我们也要对 AI 和 MATH 在 LOVE 的重要程度排序,并且给出一个重要性的一个具体数字,
我们对矩阵B1 也做转置,变成列和是1 这样的操作,得到
Input [37] >> B1 = [ 1 5
Input [37] >> 1/3 1
Input [37] >> ];
Input [38] >> B1 = B1';
Input [39] >> for j=1:2
... >> B1(:,j) = B1(:,j)/norm(B1(:,j),1);
... >> end
Input [40] >> B1
B1 =
2x2 double
0.16667 0.25
0.83333 0.75
我们也求B1的模最大的特征值对应的特征向量
Input [41] >> [V1,D1] = eig(B1)
V1 =
2x2 double
-0.70711 -0.28735
0.70711 -0.95783
D1 =
2x2 double
-0.083333 0
0 1
我们对模最大的特征值对应的特征向量做一个缩放,把它变成一个概率
Input [42] >> vb1 = V1(:,2)/norm(V1(:,2),1);
Input [43] >> vb1
vb1 =
2x1 double
-0.23077
-0.76923
Input [44] >> vb1 = - vb1
vb1 =
2x1 double
0.23077
0.76923
那么对于 love 而言,我们就可以得到AI 的重要性是 0.23077, MATH 的重要性是 0.76923.
然后对 space 和 money 都做类似的事情,得到两个专业对space 和 money的重要性。
最后我们总结一下
love, space, money 对目标的重要性贡献率: a1, a2, a3
AI 和 MATH 对 love 的贡献 b_{1,1}, b_{1,2}
AI 和 MATH 对 space 的贡献 b_{2,1}, b_{2,2}
AI 和 MATH 对 money 的贡献 b_{3,1}, b_{3,2}
最后 AI 和 MATH 对目标的重要性的数值为
[a1 a2 a3]*[ b_{1,1}; b_{2,1}; b_{3,1}]
和
[a1 a2 a3]*[ b_{1,2}; b_{2,2}; b_{3,2}]
详情大家可以从网上搜索各种资料来看,可以看到层次分析法的各种变形,
但是从page rank 借鉴而来的做法,我在别的地方还没有查到, 而且由于时间
所限,我也没有对各种方法做比较。 欢迎感兴趣的朋友们进一步研究。