多优先级决策算法的Python实现

mcdm的Python项目详细描述


麦当劳

多准则决策算法的Python实现

安装

可以使用Python 3的pip从PyPI安装mcdm包:

$ pip3 install mcdm

或者,您可以从其GitHub存储库安装mcdm包的最新版本:

^{pr2}$

您可以使用以下命令执行mcdm包的所有测试:

$ python3 -m unittest discover mcdm

特点

下表包括mcdm包支持的评分、权重、相关性和规范化方法。在

评分方法

Short NameFull NameReferences
SAWSimple Additive Weighting[1], [4]
MEWMultiplicative Exponential Weighting[4]
TOPSISTechnique for Order Preference by Similarity to Ideal Solution[1]
mTOPSISModified Technique for Order Preference by Similarity to Ideal Solution[5]

加权方法

^{tb2}$

相关方法

^{3}$

归一化方法

Short NameFull NameReferences
Linear1Linear Normalization (1)[1], [6]
Linear2Linear Normalization (2)[1], [6]
Linear3Linear Normalization (3)[1], [6]
VectorVector Normalization[1], [6]

使用

导入mcdm包后,可以使用内置的help函数查看其内容:

>>> import mcdm
>>> help(mcdm)

可以类似地查看其子包的内容,例如:

>>> help(mcdm.weighting)

mcdm包可以通过其rank函数计算备选方案的排名,这些方案作为array_like对象提供。 默认情况下,rank函数使用SAW评分法,即MW加权法,并假设决策矩阵包含具有标准化收益标准的未命名备选方案:

>>> x_matrix = [
...     [0.00, 1.00],
...     [0.25, 0.75],
...     [0.50, 0.50],
...     [0.75, 0.25],
...     [1.00, 0.00],
... ]
>>> mcdm.rank(x_matrix)
[('a1', 0.5), ('a2', 0.5), ('a3', 0.5), ('a4', 0.5), ('a5', 0.5)]

您可以选择使用新的评分方法,而不更改其余的默认选择,如下所示:

>>> x_matrix = [
...     [0.00, 1.00],
...     [0.25, 0.75],
...     [0.50, 0.50],
...     [0.75, 0.25],
...     [1.00, 0.00],
... ]
>>> mcdm.rank(x_matrix, s_method="MEW")
[('a3', 0.5000000000000001), ('a2', 0.4330127018922193), ('a4', 0.4330127018922193), ('a1', 0.0), ('a5', 0.0)]

或者,您也可以使用TOPSIS评分方法和预定义的权重,如下所示:

>>> x_matrix = [
...     [0.00, 1.00],
...     [0.25, 0.75],
...     [0.50, 0.50],
...     [0.75, 0.25],
...     [1.00, 0.00],
... ]
>>> mcdm.rank(x_matrix, w_vector=[0.7, 0.3], s_method="TOPSIS")
[('a5', 0.7), ('a4', 0.6504133360970108), ('a3', 0.5), ('a2', 0.3495866639029891), ('a1', 0.3)]

您也可以使用TOPSIS评分法,并将效益和成本标准结合起来,如下所示:

>>> x_matrix = [
...     [0.00, 1.00],
...     [0.25, 0.75],
...     [0.50, 0.50],
...     [0.75, 0.25],
...     [1.00, 0.00],
... ]
>>> mcdm.rank(x_matrix, is_benefit_x=[True, False], s_method="TOPSIS")
[('a5', 1.0), ('a4', 0.75), ('a3', 0.5), ('a2', 0.25000000000000006), ('a1', 0.0)]

或者,您也可以使用TOPSIS评分法、SD加权法和向量归一化法,并将其命名为以下备选方案:

>>> x_matrix = [
...     [4,  5, 10],
...     [3, 10,  6],
...     [3, 20,  2],
...     [2, 15,  5],
... ]
>>> alt_names = ["A", "B", "C", "D"]
>>> mcdm.rank(x_matrix, alt_names=alt_names, n_method="Vector", w_method="SD", s_method="TOPSIS")
[('A', 0.5623140105790617), ('D', 0.472563994792934), ('C', 0.4474283120076966), ('B', 0.43874437587505694)]

类似地,您可以使用SAW评分法、临界加权法和Linear2规范化方法,并将其命名为以下选项:

>>> x_matrix = [
...     [4,  5, 10],
...     [3, 10,  6],
...     [3, 20,  2],
...     [2, 15,  5],
... ]
>>> alt_names = ["A", "B", "C", "D"]
>>> mcdm.rank(x_matrix, alt_names=alt_names, n_method="Linear2", w_method="CRITIC", s_method="SAW")
[('C', 0.5864039798997854), ('A', 0.5363555775174913), ('B', 0.42272592958624855), ('D', 0.41815995516110754)]

此外,您还可以使用mTOPSIS评分方法、EM加权方法和Linear3标准化方法以及命名的备选方案,如下所示:

>>> x_matrix = [
...     [4,  5, 10],
...     [3, 10,  6],
...     [3, 20,  2],
...     [2, 15,  5],
... ]
>>> alt_names = ["A", "B", "C", "D"]
>>> mcdm.rank(x_matrix, alt_names=alt_names, n_method="Linear3", w_method="EM", s_method="mTOPSIS")
[('A', 0.5671982017516887), ('D', 0.4737709007480381), ('B', 0.44023602515388915), ('C', 0.43979056725587967)]

此外,您还可以使用新评分法、VIC加权法和Linear1标准化方法以及命名备选方案,如下所示:

>>> x_matrix = [
...     [4,  5, 10],
...     [3, 10,  6],
...     [3, 20,  2],
...     [2, 15,  5],
... ]
>>> alt_names = ["A", "B", "C", "D"]
>>> mcdm.rank(x_matrix, alt_names=alt_names, n_method="Linear1", w_method="VIC", s_method="MEW")
[('A', 0.596199006150288), ('B', 0.5926510141687035), ('D', 0.5816528401371021), ('C', 0.507066254464828)]

最后,您可以使用mcdm包的load函数从文本文件(例如,example09.tsv文件)加载一个决策矩阵,然后使用新的评分方法和VIC加权方法计算其备选方案的排名,如下所示:

>>> x_matrix, alt_names = mcdm.load("./mcdm/tests/data/example09.tsv", delimiter="\t", skiprows=1, labeled_rows=True)
>>> mcdm.rank(x_matrix, alt_names=alt_names, w_method="VIC", s_method="MEW")
[('COORD.PRoPHET', 0.47540101629920883), ('DF.PRoPHET', 0.4720540449389032), ('CnR.LTS', 0.38076976314696165), ('SimBetTS.L8', 0.3800058193419937), ('SimBetTS.L16', 0.3799920328578032), ('CnR.DestEnc', 0.37944808013507936), ('LSF-SnW.L16', 0.37739981242275067), ('DF.DestEnc', 0.3737879965369727), ('COORD.DestEnc', 0.3735362169300779), ('SimBetTS.L4', 0.372439515643607), ('LSF-SnW.L8', 0.3689450285406012), ('DF.LTS', 0.36604297140966213), ('COORD.LTS', 0.36532018876831296), ('LSF-SnW.L4', 0.34498575401083065), ('CnF.PRoPHET', 0.344899433667112), ('CnF.DestEnc', 0.34080904510687654), ('CnF.LTS', 0.33682425293123014), ('SnF.L8', 0.3338134560941729), ('SnF.L4', 0.3310799577048607), ('CnR.PRoPHET', 0.3283706628162786), ('SnF.L2', 0.3282710142810222), ('SnF.L16', 0.325965295985982), ('SimBetTS.L2', 0.3198197170434966), ('LSF-SnW.L2', 0.28336307866897725), ('CnR.Enc', 0.25388909503755097), ('DF.Enc', 0.19642752820544426), ('COORD.Enc', 0.18527125018989776), ('Epidemic', 0.17618218317052287), ('Direct', 0.14463684900589485), ('EBR.L16', 0.14427544773753895), ('SnW.L16', 0.14419569083973272), ('EBR.L2', 0.139576851541699), ('SnW.L2', 0.1393465080643217), ('SnW.L8', 0.13728835719879856), ('EBR.L8', 0.13728300706136987), ('EBR.L4', 0.13654721879934206), ('SnW.L4', 0.1364251455180083), ('CnF.Enc', 0.11713353969310777)]

参考文献

[1]C.-L.Hwang和K.Yoon,多属性决策。经济学和数学系统的讲稿。柏林海德堡施普林格出版社,1981年,第186卷,ISBN:9783540105589。在

J.L.Rodgers和W.A.Nicewander,《十三种看待相关系数的方法》,《美国统计学家》第42卷第1期,第59-66页,1988年。DOI:10.2307/2685263。在

《多准则问题中目标权重的确定:批评方法》,第22卷,第7期,第763-770页,1995年。DOI:10.1016/0305-0548(94)00059-H。在

《多属性决策:选择方法的模拟比较》,S.H.Zanakis,A.Solomon,N.Wishart,和S.Dublish,“多属性决策:选择方法的模拟比较”,欧洲运筹学杂志,第107卷,第3期,第507-529页,1998年。DOI:10.1016/S0377-2217(97)00147-1。在

《利用改进的TOPSIS与客观权重进行公司间比较》,第27卷,第10期,第963-9732000页。DOI:10.1016/S0305-0548(99)00069-6。在

[a11}H.-S.Shih,H.-J.Shyur,E.S.Lee,“群体决策的TOPSIS扩展”,《数学与计算机建模》,第45卷,第7-8期,第801-8132007页。DOI:10.1016/j.mcm.2006.03.023。在

斯泽克利,M、 L.Rizzo和N.K.Bakirov,“通过距离相关性测量和检验相关性”,《统计学年鉴》,第35卷,第6期,第2769-2794页,2007年。DOI:10.1214/009053607000000505。在

[8]G.J.Székely和M.L.Rizzo,“布朗距离协方差,应用统计学年鉴,第3卷,第4期,第1236-12652009页。DOI:10.1214/09-AOAS312。在

[9]D.-G.Akestoridis and E.Papapetrou,“机会网络中路由协议评估框架”,计算机通信,第145卷,第14-28页,2019年。DOI:10.1016/j.comcom.2019.06.003。在

许可证

版权所有(c)2020 Dimitrios Georgios Akestoridis

这个项目是根据麻省理工学院的许可条款授权的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无JPA的纯Hibernate ORM java SpringBoot配置   安卓会生成一组唯一的java数字   java我的自定义阵列列表每次启动时都会崩溃我不确定为什么会一直崩溃   Java继承;将子类传递给超类的抽象方法   java从没有if语句的数组中获取instanceof type   java中使用对象的温度转换   存储库接口的JavaSpringDataMongoDBeanXML配置   java JAXWS为iBM websphere、iBM web服务客户端添加寻址   数组试图返回Java中两个对象的面积之和   apache Spark java:columnNameOfCorruptRecord和badRecordsPath在加载csv时不工作   java无法创建。txt文件   java Hibernate与MySQL插入查询不一致   不考虑java Hazelcast分布式地图的最大大小   bash Java如何在父进程中设置环境变量