pydecision 4.5.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pydecision-4.5.9/LICENSE +14 -0
- pydecision-4.5.9/PKG-INFO +170 -0
- pydecision-4.5.9/README.md +159 -0
- pydecision-4.5.9/pyDecision/__init__.py +1 -0
- pydecision-4.5.9/pyDecision/algorithm/__init__.py +80 -0
- pydecision-4.5.9/pyDecision/algorithm/ahp.py +35 -0
- pydecision-4.5.9/pyDecision/algorithm/aras.py +65 -0
- pydecision-4.5.9/pyDecision/algorithm/borda.py +51 -0
- pydecision-4.5.9/pyDecision/algorithm/bwm.py +63 -0
- pydecision-4.5.9/pyDecision/algorithm/bwm_s.py +32 -0
- pydecision-4.5.9/pyDecision/algorithm/cilos.py +35 -0
- pydecision-4.5.9/pyDecision/algorithm/cocoso.py +67 -0
- pydecision-4.5.9/pyDecision/algorithm/codas.py +65 -0
- pydecision-4.5.9/pyDecision/algorithm/copeland.py +65 -0
- pydecision-4.5.9/pyDecision/algorithm/copras.py +61 -0
- pydecision-4.5.9/pyDecision/algorithm/cradis.py +58 -0
- pydecision-4.5.9/pyDecision/algorithm/critic.py +29 -0
- pydecision-4.5.9/pyDecision/algorithm/dematel.py +64 -0
- pydecision-4.5.9/pyDecision/algorithm/e_i.py +224 -0
- pydecision-4.5.9/pyDecision/algorithm/e_i_s.py +213 -0
- pydecision-4.5.9/pyDecision/algorithm/e_i_v.py +223 -0
- pydecision-4.5.9/pyDecision/algorithm/e_ii.py +404 -0
- pydecision-4.5.9/pyDecision/algorithm/e_iii.py +289 -0
- pydecision-4.5.9/pyDecision/algorithm/e_iv.py +295 -0
- pydecision-4.5.9/pyDecision/algorithm/e_tri_b.py +264 -0
- pydecision-4.5.9/pyDecision/algorithm/edas.py +64 -0
- pydecision-4.5.9/pyDecision/algorithm/entropy.py +28 -0
- pydecision-4.5.9/pyDecision/algorithm/fucom.py +50 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_ahp.py +44 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_ahp_ppf.py +70 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_aras.py +78 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_bwm.py +133 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_copras.py +110 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_critic.py +45 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_dematel.py +86 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_edas.py +108 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_fucom.py +122 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_merec.py +41 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_moora.py +83 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_ocra.py +93 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_topsis.py +101 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_vikor.py +129 -0
- pydecision-4.5.9/pyDecision/algorithm/fuzzy_waspas.py +93 -0
- pydecision-4.5.9/pyDecision/algorithm/gra.py +54 -0
- pydecision-4.5.9/pyDecision/algorithm/idocriw.py +60 -0
- pydecision-4.5.9/pyDecision/algorithm/mabac.py +62 -0
- pydecision-4.5.9/pyDecision/algorithm/macbeth.py +58 -0
- pydecision-4.5.9/pyDecision/algorithm/mairca.py +66 -0
- pydecision-4.5.9/pyDecision/algorithm/mara.py +68 -0
- pydecision-4.5.9/pyDecision/algorithm/marcos.py +77 -0
- pydecision-4.5.9/pyDecision/algorithm/maut.py +102 -0
- pydecision-4.5.9/pyDecision/algorithm/merec.py +31 -0
- pydecision-4.5.9/pyDecision/algorithm/moora.py +63 -0
- pydecision-4.5.9/pyDecision/algorithm/moosra.py +63 -0
- pydecision-4.5.9/pyDecision/algorithm/multimoora.py +90 -0
- pydecision-4.5.9/pyDecision/algorithm/ocra.py +63 -0
- pydecision-4.5.9/pyDecision/algorithm/opa.py +117 -0
- pydecision-4.5.9/pyDecision/algorithm/oreste.py +59 -0
- pydecision-4.5.9/pyDecision/algorithm/p_ec.py +308 -0
- pydecision-4.5.9/pyDecision/algorithm/p_i.py +176 -0
- pydecision-4.5.9/pyDecision/algorithm/p_ii.py +121 -0
- pydecision-4.5.9/pyDecision/algorithm/p_iii.py +176 -0
- pydecision-4.5.9/pyDecision/algorithm/p_iv.py +107 -0
- pydecision-4.5.9/pyDecision/algorithm/p_v.py +145 -0
- pydecision-4.5.9/pyDecision/algorithm/p_vi.py +160 -0
- pydecision-4.5.9/pyDecision/algorithm/p_xgaia.py +137 -0
- pydecision-4.5.9/pyDecision/algorithm/piv.py +53 -0
- pydecision-4.5.9/pyDecision/algorithm/psi.py +57 -0
- pydecision-4.5.9/pyDecision/algorithm/psi_m.py +21 -0
- pydecision-4.5.9/pyDecision/algorithm/rafsi.py +79 -0
- pydecision-4.5.9/pyDecision/algorithm/regime.py +120 -0
- pydecision-4.5.9/pyDecision/algorithm/roc.py +30 -0
- pydecision-4.5.9/pyDecision/algorithm/rov.py +62 -0
- pydecision-4.5.9/pyDecision/algorithm/rrw.py +31 -0
- pydecision-4.5.9/pyDecision/algorithm/rsw.py +29 -0
- pydecision-4.5.9/pyDecision/algorithm/saw.py +53 -0
- pydecision-4.5.9/pyDecision/algorithm/seca.py +49 -0
- pydecision-4.5.9/pyDecision/algorithm/smart.py +57 -0
- pydecision-4.5.9/pyDecision/algorithm/spotis.py +54 -0
- pydecision-4.5.9/pyDecision/algorithm/todim.py +67 -0
- pydecision-4.5.9/pyDecision/algorithm/topsis.py +65 -0
- pydecision-4.5.9/pyDecision/algorithm/vikor.py +85 -0
- pydecision-4.5.9/pyDecision/algorithm/waspas.py +67 -0
- pydecision-4.5.9/pyDecision/algorithm/wings.py +58 -0
- pydecision-4.5.9/pyDecision/algorithm/wisp.py +81 -0
- pydecision-4.5.9/pyDecision/compare/__init__.py +1 -0
- pydecision-4.5.9/pyDecision/compare/compare.py +539 -0
- pydecision-4.5.9/pyDecision/util/LLM.py +171 -0
- pydecision-4.5.9/pyDecision/util/__init__.py +2 -0
- pydecision-4.5.9/pyDecision/util/ga.py +124 -0
- pydecision-4.5.9/pydecision.egg-info/PKG-INFO +170 -0
- pydecision-4.5.9/pydecision.egg-info/SOURCES.txt +95 -0
- pydecision-4.5.9/pydecision.egg-info/dependency_links.txt +1 -0
- pydecision-4.5.9/pydecision.egg-info/requires.txt +7 -0
- pydecision-4.5.9/pydecision.egg-info/top_level.txt +1 -0
- pydecision-4.5.9/setup.cfg +4 -0
- pydecision-4.5.9/setup.py +27 -0
pydecision-4.5.9/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Copyright © 2022 by Valdecy Pereira
|
|
2
|
+
|
|
3
|
+
pyDecision is free software: you can redistribute it and/or modify
|
|
4
|
+
it under the terms of the GNU General Public License as published by
|
|
5
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
6
|
+
(at your option) any later version.
|
|
7
|
+
|
|
8
|
+
pyDecision is distributed in the hope that it will be useful,
|
|
9
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
GNU General Public License for more details.
|
|
12
|
+
|
|
13
|
+
You should have received a copy of the GNU General Public License
|
|
14
|
+
along with pyDecision. If not, see <http://www.gnu.org/licenses/>.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pydecision
|
|
3
|
+
Version: 4.5.9
|
|
4
|
+
Summary: A MCDA Library Incorporating a Large Language Model to Enhance Decision Analysis
|
|
5
|
+
Home-page: https://github.com/Valdecy/pyDecisions
|
|
6
|
+
Author: Valdecy Pereira
|
|
7
|
+
Author-email: valdecy.pereira@gmail.com
|
|
8
|
+
License: GNU
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
|
|
12
|
+
# pyDecision
|
|
13
|
+
|
|
14
|
+
## Introduction
|
|
15
|
+
|
|
16
|
+
A python library with the following MCDA methods: **AHP** (Analytic Hierarchy Process); **Fuzzy AHP**; **PPF AHP** (Proportional Picture Fuzzy AHP); **ARAS** (Additive Ratio ASsessment); **Fuzzy ARAS**; **Borda**; **BWM** (Best-Worst Method); **Simplified BWM**; **Fuzzy BWM**; **CILOS** (Criterion Impact LOSs); **CoCoSo** (COmbined COmpromise SOlution); **CODAS** (Combinative Distance-based Assessment); **Copeland**; **COPRAS** (Complex PRoportional Assessment); **Fuzzy COPRAS**; **CRADIS** (Compromise Ranking of Alternatives from Distance to Ideal Solution); **CRITIC** (CRiteria Importance Through Intercriteria Correlation); **Fuzzy CRITIC**; **DEMATEL** (DEcision MAking Trial and Evaluation Laboratory); **Fuzzy DEMATEL**; **EDAS** (Evaluation based on Distance from Average Solution); **Fuzzy EDAS**; **Entropy**; **ELECTRE** (I, I_s, I_v, II, III, IV, Tri-B); **FUCOM** (Full Consistency Method); **Fuzzy FUCOM**; **GRA** (Grey Relational Analysis); **IDOCRIW** (Integrated Determination of Objective CRIteria Weights); **MABAC** (Multi-Attributive Border Approximation area Comparison); **MACBETH** (Measuring Attractiveness by a Categorical Based Evaluation TecHnique); **MAIRCA** (Multi-Attributive Ideal-Real Comparative Analysis); **MARA** (Magnitude of the Area for the Ranking of Alternatives) ; **MARCOS** (Measurement of Alternatives and Ranking according to COmpromise Solution); **MAUT** (Multi-attribute Utility Theory); **MEREC** (MEthod based on the Removal Effects of Criteria); **MOORA** (Multi-Objective Optimization on the basis of Ratio Analysis); **Fuzzy MOORA**; **MOOSRA** (Multi-Objective Optimisation on the Basis of Simple Ratio Analysis); **MULTIMOORA** (Multi-Objective Optimization on the basis of Ratio Analisys Multiplicative Form); **OCRA** (Operational Competitiveness RAting); **Fuzzy OCRA** ; **OPA** (Ordinal Priority Approach); **ORESTE** (Organisation Rangement Et SynThesE de donnees relationnelles); **PIV** (Proximity Indexed Value); **PROMETHEE** (I, II, III, IV, V, VI, Gaia); **EC PROMETHEE**; **RAFSI** (Ranking of Alternatives through Functional mapping of criterion sub-intervals into a Single Interval); **REGIME** (REGIonal Multicriteria Elimination); **ROC** (Rank Ordered Centroid); **ROV** (Range Of Value); **RRW** (Rank Reciprocal Weighting); **RSW** (Rank Summed Weight); **SAW** (Simple Additive Weighting); **SECA** (Simultaneous Evaluation of Criteria and Alternatives); **SMART** (Simple Multi-Attribute Rating Technique); **SPOTIS** (Stable Preference Ordering Towards Ideal Solution); **TODIM** (TOmada de Decisao Interativa e Multicriterio - Interactive and Multicriteria Decision Making); **PSI** (Preference Selection Index); **MPSI** (Modified Preference Selection Index); **TOPSIS** (Technique for Order of Preference by Similarity to Ideal Solution); **Fuzzy TOPSIS**; **VIKOR** (VIseKriterijumska Optimizacija I Kompromisno Resenje); **Fuzzy VIKOR**; **WINGS** (Weighted Influence Non-linear Gauge System); **WISP** (Integrated Simple Weighted Sum Product); **Simple WISP**; **WSM** (Weighted Sum Model); **Fuzzy WSM**; **WPM** (Weighted Product Model); **Fuzzy WPM**; **WASPAS** (Weighted Aggregates Sum Product Assessment); **Fuzzy WASPAS**.
|
|
17
|
+
|
|
18
|
+
pyDecision offers an array of features, including the **comparison of ranking alternatives** and **comparison of criterion weights** from various methods. The library is also fully integrated with **chatGPT**, elevating result interpretation through AI. Additionally, pyDecision provides the flexibility to import results from custom methods or those not yet implemented in the library for swift comparison.
|
|
19
|
+
|
|
20
|
+
## Citation
|
|
21
|
+
|
|
22
|
+
PEREIRA, V.; BASILIO, M.P.; SANTOS, C.H.T (2024). Enhancing Decision Analysis with a Large Language Model: pyDecision a Comprehensive Library of MCDA Methods in Python. arXiv. https://arxiv.org/abs/2404.06370
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
1. Install
|
|
27
|
+
```bash
|
|
28
|
+
pip install pyDecision
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
2. Import
|
|
32
|
+
|
|
33
|
+
```py3
|
|
34
|
+
|
|
35
|
+
# Import AHP
|
|
36
|
+
from pyDecision.algorithm import ahp_method
|
|
37
|
+
|
|
38
|
+
# Parameters
|
|
39
|
+
weight_derivation = 'geometric' # 'mean'; 'geometric' or 'max_eigen'
|
|
40
|
+
|
|
41
|
+
# Dataset
|
|
42
|
+
dataset = np.array([
|
|
43
|
+
#g1 g2 g3 g4 g5 g6 g7
|
|
44
|
+
[1 , 1/3, 1/5, 1 , 1/4, 1/2, 3 ], #g1
|
|
45
|
+
[3 , 1 , 1/2, 2 , 1/3, 3 , 3 ], #g2
|
|
46
|
+
[5 , 2 , 1 , 4 , 5 , 6 , 5 ], #g3
|
|
47
|
+
[1 , 1/2, 1/4, 1 , 1/4, 1 , 2 ], #g4
|
|
48
|
+
[4 , 3 , 1/5, 4 , 1 , 3 , 2 ], #g5
|
|
49
|
+
[2 , 1/3, 1/6, 1 , 1/3, 1 , 1/3], #g6
|
|
50
|
+
[1/3, 1/3, 1/5, 1/2, 1/2, 3 , 1 ] #g7
|
|
51
|
+
])
|
|
52
|
+
|
|
53
|
+
# Call AHP Function
|
|
54
|
+
weights, rc = ahp_method(dataset, wd = weight_derivation)
|
|
55
|
+
|
|
56
|
+
# Weigths
|
|
57
|
+
for i in range(0, weights.shape[0]):
|
|
58
|
+
print('w(g'+str(i+1)+'): ', round(weights[i], 3))
|
|
59
|
+
|
|
60
|
+
# Consistency Ratio
|
|
61
|
+
print('RC: ' + str(round(rc, 2)))
|
|
62
|
+
if (rc > 0.10):
|
|
63
|
+
print('The solution is inconsistent, the pairwise comparisons must be reviewed')
|
|
64
|
+
else:
|
|
65
|
+
print('The solution is consistent')
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
3. Try it in **Colab**:
|
|
70
|
+
|
|
71
|
+
- AHP ([ Colab Demo ](https://colab.research.google.com/drive/1qwFQs5xkTZ8K-Ul_wWcCtPjLH0QooU9g?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1016/0377-2217(90)90057-I))
|
|
72
|
+
- Fuzzy AHP ([ Colab Demo ](https://colab.research.google.com/drive/1RtEMOLGL5wtmheMRZv8emcO5wbjYVBCo?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/S0165-0114(83)80082-7))
|
|
73
|
+
- PPF AHP ([ Colab Demo ](https://colab.research.google.com/drive/1wI-8z2aysGKhSI3PLxN6vOZ4jsbPmKYl?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2023.122354))
|
|
74
|
+
- ARAS ([ Colab Demo ](https://colab.research.google.com/drive/1rwQgXjvC3E6pRhOs7CkcCV8Vw2bXEPLy?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/tede.2010.10))
|
|
75
|
+
- Fuzzy ARAS ([ Colab Demo ](https://colab.research.google.com/drive/1kZDkEWsw0d0nFhDQQk8azZXRod7RnfZr?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/transport.2010.52))
|
|
76
|
+
- Borda ([ Colab Demo ](https://colab.research.google.com/drive/1t5RVtG7_yXK-nPxM0MVd4U01qfTQYW4k?usp=sharing)) ( [ Paper ](http://gerardgreco.free.fr/IMG/pdf/MA_c_moire-Borda-1781.pdf))
|
|
77
|
+
- BWM ([ Colab Demo ](https://colab.research.google.com/drive/1XkacTmtSBvZmx_5K9cfz8t1Ao5j-D-bZ?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.omega.2014.11.009))
|
|
78
|
+
- Simplified BWM ([ Colab Demo ](https://colab.research.google.com/drive/1v3QfSdprM8gwxL4VWmh75mPiPn2YWOZn?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/su13084487))
|
|
79
|
+
- Fuzzy BWM ([ Colab Demo ](https://colab.research.google.com/drive/1hBTXyOLpBoC7oE-hsolPH2O0ekzp4VU0?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.knosys.2017.01.010))
|
|
80
|
+
- CILOS ([ Colab Demo ](https://colab.research.google.com/drive/1RnSqO_VEPyvXAMHdneloYvA0TzPx55kw?usp=sharing)) ( [ Paper ](https://doi.org/10.1142/S0219622016500036))
|
|
81
|
+
- CoCoSo ([ Colab Demo ](https://colab.research.google.com/drive/1U8a3NZzQaxDkJdUT3uKIeeoqFtT_3Mnx?usp=sharing)) ( [ Paper ](https://doi.org/10.1108/MD-05-2017-0458))
|
|
82
|
+
- CODAS ([ Colab Demo ](https://colab.research.google.com/drive/1hm7__urqFeBHM6nVQJcBzGPF72DFuoLr?usp=sharing)) ( [ Paper ](https://ideas.repec.org/a/cys/ecocyb/v50y2016i3p25-44.html))
|
|
83
|
+
- Copeland ([ Colab Demo ](https://colab.research.google.com/drive/1ObP3AkQAzoCxT6et5Qkyk1trlER7mcdH?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/BF01212012))
|
|
84
|
+
- COPRAS ([ Colab Demo ](https://colab.research.google.com/drive/1TZJtSjXqwYEwuL7-wfLcPQ8ZBtDq3lth?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/20294913.2012.762953))
|
|
85
|
+
- Fuzzy COPRAS ([ Colab Demo ](https://colab.research.google.com/drive/1AIGgxBkmcA6YHKx06VeYcGf2EV8dPffW?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/s00500-021-05762-w))
|
|
86
|
+
- CRADIS ([ Colab Demo ](https://colab.research.google.com/drive/1p7AQmPIOsZFxaypqMsiRIWW8mIvDtoLi?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/s10668-021-01902-2))
|
|
87
|
+
- CRITIC ([ Colab Demo ](https://colab.research.google.com/drive/1D5SaBHa1-Eo_KYSXHkFjsHYu29M21l_F?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0305-0548(94)00059-H))
|
|
88
|
+
- Fuzzy CRITIC ([ Colab Demo ](https://colab.research.google.com/drive/1wofFhWDw6fn-XpLQoQjveKjyaId-AsEw?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.engappai.2022.104942))
|
|
89
|
+
- DEMATEL ([ Colab Demo ](https://colab.research.google.com/drive/1T04qEft9uwTyQx--gADN6V_vUrT21Xo6?usp=sharing)) ( [ Paper ](https://doi.org/10.1155/2018/3696457))
|
|
90
|
+
- Fuzzy DEMATEL ([ Colab Demo ](https://colab.research.google.com/drive/15e9dMDROr3cxjbWRXg3_t4TScuQtQDpR?usp=sharing)) ( [ Paper ](https://www.sciencedirect.com/science/article/abs/pii/S0957417405003593))
|
|
91
|
+
- EDAS ([ Colab Demo ](https://colab.research.google.com/drive/1xsMdwH-IH-zvOW-1kv6ztQnKGt7p5JnY?usp=sharing)) ( [ Paper ](https://doi.org/10.15388/Informatica.2015.57))
|
|
92
|
+
- Fuzzy EDAS ([ Colab Demo ](https://colab.research.google.com/drive/1kw2LwztNAU9Asjj6BvBmvk11wvk8R3V6?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/978-981-32-9072-3_63))
|
|
93
|
+
- Entropy ([ Colab Demo ](https://colab.research.google.com/drive/1LOCef2KFxoV2qUEQRi4DqfzrgnMgtwT9?usp=sharing)) ( [ Paper ](https://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf))
|
|
94
|
+
- ELECTRE I ([ Colab Demo ](https://colab.research.google.com/drive/1KFqRPBRyv-fxiu2B1y7VNkP5pCCbILF1?usp=sharing)) ( [ Paper ](https://github.com/Valdecy/Datasets/blob/master/MCDA/E01.pdf))
|
|
95
|
+
- ELECTRE I_s ([ Colab Demo ](https://colab.research.google.com/drive/1ngxsQPh2QULjd1_AifFofbukq5zIOePd?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
96
|
+
- ELECTRE I_v ([ Colab Demo ](https://colab.research.google.com/drive/1moonq95gqXqmbRe2KvgqbN2IfowJ12C-?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
97
|
+
- ELECTRE II ([ Colab Demo ](https://colab.research.google.com/drive/1UeAjICH6_tjVr3O9H-fC65HHYMVZgTKc?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
98
|
+
- ELECTRE III ([ Colab Demo ](https://colab.research.google.com/drive/1smeD5ZoPgBnAAUyooAXSrkxHgqZPmUC9?usp=sharing)) ( [ Paper ](https://github.com/Valdecy/Datasets/raw/master/MCDA/E03.pdf))
|
|
99
|
+
- ELECTRE IV ([ Colab Demo ](https://colab.research.google.com/drive/178x062yC-Es6lstEiFaFprbMsTJZwnC-?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
100
|
+
- ELECTRE Tri-B ([ Colab Demo ](https://colab.research.google.com/drive/1hu0fJcxdBAiEDrVngmKQfpINpjTF-osE?usp=sharing)) ( [ Paper ](https://drive.google.com/file/d/1oWOI_sX3EEYdRbavoBTT7vUmPII1yPgE/view?usp=sharing))
|
|
101
|
+
- FUCOM ([ Colab Demo ](https://colab.research.google.com/drive/1eWP3xf3-9iLLW_l_9JuAe6BEeoMsqzcL?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/sym10090393))
|
|
102
|
+
- Fuzzy FUCOM ([ Colab Demo ](https://colab.research.google.com/drive/1bkelWth_7TOW_gIz8mBNe_4W5Ox84FUB?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/su14094972 ))
|
|
103
|
+
- GRA ([ Colab Demo ](https://colab.research.google.com/drive/1aMMI0Cuo5kpzTDefqEwJhf0wWpBOP_JL?usp=sharing)) ( [ Paper ](https://uranos.ch/research/references/Julong_1989/10.1.1.678.3477.pdf))
|
|
104
|
+
- IDOCRIW ([ Colab Demo ](https://colab.research.google.com/drive/1zt8uPFZGcHaSnpiT7tDnrDjvs0pK_7vS?usp=sharing)) ( [ Paper ](https://doi.org/10.1142/S0219622016500036))
|
|
105
|
+
- MABAC ([ Colab Demo ](https://colab.research.google.com/drive/1BMqO-HnBXdcOZfZoULpx1H4MLPoUGucJ?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2014.11.057))
|
|
106
|
+
- MACBETH ([ Colab Demo ](https://colab.research.google.com/drive/1GqM9uPgbaWCGyj4l-XjkoifY2JJoVyf2?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0969-6016(94)90010-8))
|
|
107
|
+
- MAIRCA ([ Colab Demo ](https://colab.research.google.com/drive/1gfqgrBAFGVygwm1j3lTjfy5wTsLgT_j5?usp=sharing)) ( [ Paper ](https://doi.org/10.1080/1331677X.2018.1506706))
|
|
108
|
+
- MARA ([ Colab Demo ](https://colab.research.google.com/drive/1Ggg5e7TKVF_JN4yZRq9zThJO-PRBSI-N?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/systems10060248))
|
|
109
|
+
- MARCOS ([ Colab Demo ](https://colab.research.google.com/drive/13MI2Qrakm5VzHN3r5O2RqggCzQwRxCs-?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.cie.2019.106231))
|
|
110
|
+
- MAUT ([ Colab Demo ](https://colab.research.google.com/drive/1qm3ARgQm68GUK2irGiCB-B49vnVHazB7?usp=sharing)) ( [ Paper ](https://doi.org/10.1017/CBO9781139174084))
|
|
111
|
+
- MEREC ([ Colab Demo ](https://colab.research.google.com/drive/1XE3AIzS84w-gw_1MEtV7xvkU1Gj_tRPd?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/sym13040525))
|
|
112
|
+
- Fuzzy MEREC ([ Colab Demo ](https://colab.research.google.com/drive/1yJ1eOXoGNp3amhoyBtEFCXr5PqwI9S5T?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/math11061544))
|
|
113
|
+
- MOORA ([ Colab Demo ](https://colab.research.google.com/drive/1FpKl0QAdwGgCVvLYsRHvMWhz7yOp17B5?usp=sharing)) ( [ Paper ](http://matwbn.icm.edu.pl/ksiazki/cc/cc35/cc35213.pdf))
|
|
114
|
+
- Fuzzy MOORA ([ Colab Demo ](https://colab.research.google.com/drive/1ydHzGeA8WBVY5Gyu8K7Oq6kofQ5XbK3P?usp=sharing)) ( [ Paper ](https://pdfs.semanticscholar.org/6d33/ca3f14c9ed44d23742fd4e9cf94cebcaf148.pdf))
|
|
115
|
+
- MOOSRA ([ Colab Demo ](https://colab.research.google.com/drive/1KYyA4f3OsipPA5e63Ja4A0OGmHvNY6dj?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.15623/ijret.2014.0315105))
|
|
116
|
+
- MULTIMOORA ([ Colab Demo ](https://colab.research.google.com/drive/1JAT8qqHPNoFfMV6a-CzF6BgRwtcUF3-e?usp=sharing)) ( [ Paper ](https://journals.vilniustech.lt/index.php/TEDE/article/view/5832/5078))
|
|
117
|
+
- OCRA ([ Colab Demo ](https://colab.research.google.com/drive/1yQ41lOdjhiANtD1SOXoxA7gVim7A4X4P?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.5937/sjm10-6802))
|
|
118
|
+
- Fuzzy OCRA ([ Colab Demo ](https://colab.research.google.com/drive/1SniY4RLsR6jR9SnI3AR9k0wGlBWH6Pm8?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.5755/j01.ee.30.5.20546))
|
|
119
|
+
- OPA ([ Colab Demo ](https://colab.research.google.com/drive/1RjryznPElHZUTuXQ2-ZKwJqMAVfJWKDC?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.asoc.2019.105893))
|
|
120
|
+
- ORESTE ([ Colab Demo ](https://colab.research.google.com/drive/1USVCt6KJHJK9NXaknY8wTA4L0d4r2kWw?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0377-2217(82)90131-X))
|
|
121
|
+
- PIV ([ Colab Demo ](https://colab.research.google.com/drive/1PwJoBqYn1O2s22MqC9euP89Uyv4sedS0?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.cie.2018.03.045))
|
|
122
|
+
- PROMETHEE I ([ Colab Demo ](https://colab.research.google.com/drive/1WsagC7-Y_5X-Xl90pMz8YwUkKfxf2vol?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
123
|
+
- PROMETHEE II ([ Colab Demo ](https://colab.research.google.com/drive/143TUtTBy9y6gW0kMVAfhANBhuw1bKvBB?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
124
|
+
- PROMETHEE III ([ Colab Demo ](https://colab.research.google.com/drive/11DBaEBBT8B-B3poXubvZ41HELOHok0Rz?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-3-030-15009-9_5
|
|
125
|
+
))
|
|
126
|
+
- PROMETHEE IV ([ Colab Demo ](https://colab.research.google.com/drive/1X2evE6pIf4F7qiKjt1fSU2PqT-NaA5sJ?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-3-319-11949-6_14))
|
|
127
|
+
- PROMETHEE V ([ Colab Demo ](https://colab.research.google.com/drive/1IaZCCtq5m8vBBxrBLMCp6xB5U2j8ZNRc?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
128
|
+
- PROMETHEE VI ([ Colab Demo ](https://colab.research.google.com/drive/14QdhifGitj4GK-QijRr1vj_dmGU2Pfh4?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
129
|
+
- PROMETHEE Gaia ([ Colab Demo ](https://colab.research.google.com/drive/1lj7IRKXcuRjrpoBp_KmQn_3sI3P_Qxju?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
130
|
+
- EC PROMETHEE ([ Colab Demo ](https://colab.research.google.com/drive/1YxXXuc2urj7_sUreZAROFldAhE0o6gio?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/math11214432))
|
|
131
|
+
- PSI ([ Colab Demo ](https://colab.research.google.com/drive/1u9tN8cYl2mx6KK6yLW2oz6fuVoy8xcCI?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.matdes.2009.11.020))
|
|
132
|
+
- MPSI ([ Colab Demo ](https://colab.research.google.com/drive/1zj2AS6W_VWmG5mYgY4b-dnCK0q3AG1-K?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/systems10060248))
|
|
133
|
+
- RAFSI ([ Colab Demo ](https://colab.research.google.com/drive/13N85L87uh3wJXyja0zYvNglSju3-xVxU?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.3390/math8061015))
|
|
134
|
+
- REGIME ([ Colab Demo ](https://colab.research.google.com/drive/1jcAcjAS92rxvE2urhc6HPixvzJ60HqEg?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/BF00221383))
|
|
135
|
+
- ROC ([ Colab Demo ](https://colab.research.google.com/drive/1uUFXlCsZkFnh8HemNJ_hppvDC1eAwu4W?usp=sharing)) ( [ Paper ](https://doi.org/10.1002/(SICI)1099-0771(199806)11:2<85::AID-BDM282>3.0.CO;2-K))
|
|
136
|
+
- ROV ([ Colab Demo ](https://colab.research.google.com/drive/1sQAPCem0pcS29uf6-n4TpncXMXNx9JDh?usp=sharing)) ( [ Paper ](https://doi.org/10.5267/j.dsl.2015.12.001))
|
|
137
|
+
- RRW ([ Colab Demo ](https://colab.research.google.com/drive/1Pd13mNOosg0bxKAhALA3U9ppQYMB6yp_?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0030-5073(81)90015-5))
|
|
138
|
+
- RSW ([ Colab Demo ](https://colab.research.google.com/drive/1IvAmwypsA6J3JRKGQsi0fmwnlGmL3rKM?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0030-5073(81)90015-5))
|
|
139
|
+
- SAW ([ Colab Demo ](https://colab.research.google.com/drive/1R4cIsu0jBP9-6zwww_bNxEEnVGrhnS2d?usp=sharing)) ( [ Paper ](https://media.neliti.com/media/publications/326766-simple-additive-weighting-saw-method-in-f8f093e8.pdf))
|
|
140
|
+
- SECA ([ Colab Demo ](https://colab.research.google.com/drive/1Hs2zeOPJdkpdeXnfg6_GeWN6zo5JrIzn?usp=sharing)) ( [ Paper ](https://doi.org/10.15388/Informatica.2018.167))
|
|
141
|
+
- SMART ([ Colab Demo ](https://colab.research.google.com/drive/1K93HXHBR_v2da95Hh_CB6AmTCqta-k3D?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/978-1-4612-3982-6_4))
|
|
142
|
+
- SPOTIS ([ Colab Demo ](https://colab.research.google.com/drive/1TyjDn-xwut3w6Rf0zMiugdwytwmGY_NE?usp=sharing)) ( [ Paper ](https://doi.org/10.23919/FUSION45008.2020.9190347))
|
|
143
|
+
- TODIM ([ Colab Demo ](https://colab.research.google.com/drive/1EQqhhBQHHb8HT0TfuuVeFA2kwezsQYT1?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.ejor.2007.10.046))
|
|
144
|
+
- TOPSIS ([ Colab Demo ](https://colab.research.google.com/drive/1s87DC5_oa9GvgVe98oAP1UIhduac09CB?usp=sharing)) ( [ Paper ](https://doi.org/10.1057/jors.1987.44))
|
|
145
|
+
- Fuzzy TOPSIS ([ Colab Demo ](https://colab.research.google.com/drive/1eKx7AOYrnG-kZcsBt28rMEtCrUO-j3J-?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.procs.2016.07.088))
|
|
146
|
+
- VIKOR ([ Colab Demo ](https://colab.research.google.com/drive/1egZiTNvI2eE-tyJ2m85MM6B3-qhiSjPG?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/S0377-2217(03)00020-1))
|
|
147
|
+
- Fuzzy VIKOR ([ Colab Demo ](https://colab.research.google.com/drive/1anfCnU2TSrW-Z5vMkS_qXFrYZ0ciQE53?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2011.04.097))
|
|
148
|
+
- WINGS ([ Colab Demo ](https://colab.research.google.com/drive/1li1_cPxwEM3NOZ4hbI8RROXyOmXeoWew?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.ejor.2013.02.007))
|
|
149
|
+
- WISP, Simple WISP ([ Colab Demo ](https://colab.research.google.com/drive/1xyJf3aydLdVPqhWpNyVXXD8T4PsrX0du?usp=sharing)) ( [ Paper ](https://doi.org/10.1109/TEM.2021.3075783))
|
|
150
|
+
- WSM, WPM, WASPAS ([ Colab Demo ](https://colab.research.google.com/drive/1HbLwXI4HkrmI-lsNzDtBOlCiwxfJltHi?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.acme.2013.07.006))
|
|
151
|
+
- Fuzzy WSM, Fuzzy WPM, Fuzzy WASPAS ([ Colab Demo ](https://colab.research.google.com/drive/1PcN_PaXwPHawzCU05UiHE504SkgF6vQ2?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.15837/ijccc.2015.6.2078))
|
|
152
|
+
|
|
153
|
+
4. Compare Methods:
|
|
154
|
+
- Compare Ranks & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1RfLNEJjaHjtn3Lb2cfEDqS-iblaC4GQZ?usp=sharing))
|
|
155
|
+
- Compare Fuzzy Ranks & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1pRO-E9xnk6DYEj_0DaEHUrUiCeIjmnXx?usp=sharing))
|
|
156
|
+
- Compare Weights & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/169hTJxP2APHrDA1h0fD1YEeu9s29wu0T?usp=sharing))
|
|
157
|
+
- Compare Fuzzy Weights & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1nWDF8lrTmXlc-TE4_X1-MPhraFjytj1Z?usp=sharing))
|
|
158
|
+
|
|
159
|
+
5. Advanced MCDA Methods:
|
|
160
|
+
|
|
161
|
+
- [3MOAHP](https://github.com/Valdecy/Method_3MOAHP) - Inconsistency Reduction Technique for AHP and Fuzzy-AHP Methods
|
|
162
|
+
- [pyMissingAHP](https://github.com/Valdecy/pyMissingAHP) - A Method to Infer AHP Missing Pairwise Comparisons
|
|
163
|
+
- [ELECTRE-Tree](https://github.com/Valdecy/ELECTRE-Tree) - Algorithm to infer the ELECTRE Tri-B method parameters
|
|
164
|
+
- [Ranking-Trees](https://github.com/Valdecy/Ranking-Trees) - Algorithm to infer the ELECTRE II, III, IV, and PROMETHEE I, II, III, IV method parameters
|
|
165
|
+
|
|
166
|
+
# Acknowledgement
|
|
167
|
+
|
|
168
|
+
This section is dedicated to everyone who helped improve or correct the code. Thank you very much!
|
|
169
|
+
|
|
170
|
+
* Sabir Mohammedi Taieb (23.JANUARY.2023) - https://sabir97.github.io/ - Université Abdelhamid Ibn Badis Mostaganem (Algeria)
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# pyDecision
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
A python library with the following MCDA methods: **AHP** (Analytic Hierarchy Process); **Fuzzy AHP**; **PPF AHP** (Proportional Picture Fuzzy AHP); **ARAS** (Additive Ratio ASsessment); **Fuzzy ARAS**; **Borda**; **BWM** (Best-Worst Method); **Simplified BWM**; **Fuzzy BWM**; **CILOS** (Criterion Impact LOSs); **CoCoSo** (COmbined COmpromise SOlution); **CODAS** (Combinative Distance-based Assessment); **Copeland**; **COPRAS** (Complex PRoportional Assessment); **Fuzzy COPRAS**; **CRADIS** (Compromise Ranking of Alternatives from Distance to Ideal Solution); **CRITIC** (CRiteria Importance Through Intercriteria Correlation); **Fuzzy CRITIC**; **DEMATEL** (DEcision MAking Trial and Evaluation Laboratory); **Fuzzy DEMATEL**; **EDAS** (Evaluation based on Distance from Average Solution); **Fuzzy EDAS**; **Entropy**; **ELECTRE** (I, I_s, I_v, II, III, IV, Tri-B); **FUCOM** (Full Consistency Method); **Fuzzy FUCOM**; **GRA** (Grey Relational Analysis); **IDOCRIW** (Integrated Determination of Objective CRIteria Weights); **MABAC** (Multi-Attributive Border Approximation area Comparison); **MACBETH** (Measuring Attractiveness by a Categorical Based Evaluation TecHnique); **MAIRCA** (Multi-Attributive Ideal-Real Comparative Analysis); **MARA** (Magnitude of the Area for the Ranking of Alternatives) ; **MARCOS** (Measurement of Alternatives and Ranking according to COmpromise Solution); **MAUT** (Multi-attribute Utility Theory); **MEREC** (MEthod based on the Removal Effects of Criteria); **MOORA** (Multi-Objective Optimization on the basis of Ratio Analysis); **Fuzzy MOORA**; **MOOSRA** (Multi-Objective Optimisation on the Basis of Simple Ratio Analysis); **MULTIMOORA** (Multi-Objective Optimization on the basis of Ratio Analisys Multiplicative Form); **OCRA** (Operational Competitiveness RAting); **Fuzzy OCRA** ; **OPA** (Ordinal Priority Approach); **ORESTE** (Organisation Rangement Et SynThesE de donnees relationnelles); **PIV** (Proximity Indexed Value); **PROMETHEE** (I, II, III, IV, V, VI, Gaia); **EC PROMETHEE**; **RAFSI** (Ranking of Alternatives through Functional mapping of criterion sub-intervals into a Single Interval); **REGIME** (REGIonal Multicriteria Elimination); **ROC** (Rank Ordered Centroid); **ROV** (Range Of Value); **RRW** (Rank Reciprocal Weighting); **RSW** (Rank Summed Weight); **SAW** (Simple Additive Weighting); **SECA** (Simultaneous Evaluation of Criteria and Alternatives); **SMART** (Simple Multi-Attribute Rating Technique); **SPOTIS** (Stable Preference Ordering Towards Ideal Solution); **TODIM** (TOmada de Decisao Interativa e Multicriterio - Interactive and Multicriteria Decision Making); **PSI** (Preference Selection Index); **MPSI** (Modified Preference Selection Index); **TOPSIS** (Technique for Order of Preference by Similarity to Ideal Solution); **Fuzzy TOPSIS**; **VIKOR** (VIseKriterijumska Optimizacija I Kompromisno Resenje); **Fuzzy VIKOR**; **WINGS** (Weighted Influence Non-linear Gauge System); **WISP** (Integrated Simple Weighted Sum Product); **Simple WISP**; **WSM** (Weighted Sum Model); **Fuzzy WSM**; **WPM** (Weighted Product Model); **Fuzzy WPM**; **WASPAS** (Weighted Aggregates Sum Product Assessment); **Fuzzy WASPAS**.
|
|
6
|
+
|
|
7
|
+
pyDecision offers an array of features, including the **comparison of ranking alternatives** and **comparison of criterion weights** from various methods. The library is also fully integrated with **chatGPT**, elevating result interpretation through AI. Additionally, pyDecision provides the flexibility to import results from custom methods or those not yet implemented in the library for swift comparison.
|
|
8
|
+
|
|
9
|
+
## Citation
|
|
10
|
+
|
|
11
|
+
PEREIRA, V.; BASILIO, M.P.; SANTOS, C.H.T (2024). Enhancing Decision Analysis with a Large Language Model: pyDecision a Comprehensive Library of MCDA Methods in Python. arXiv. https://arxiv.org/abs/2404.06370
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
1. Install
|
|
16
|
+
```bash
|
|
17
|
+
pip install pyDecision
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
2. Import
|
|
21
|
+
|
|
22
|
+
```py3
|
|
23
|
+
|
|
24
|
+
# Import AHP
|
|
25
|
+
from pyDecision.algorithm import ahp_method
|
|
26
|
+
|
|
27
|
+
# Parameters
|
|
28
|
+
weight_derivation = 'geometric' # 'mean'; 'geometric' or 'max_eigen'
|
|
29
|
+
|
|
30
|
+
# Dataset
|
|
31
|
+
dataset = np.array([
|
|
32
|
+
#g1 g2 g3 g4 g5 g6 g7
|
|
33
|
+
[1 , 1/3, 1/5, 1 , 1/4, 1/2, 3 ], #g1
|
|
34
|
+
[3 , 1 , 1/2, 2 , 1/3, 3 , 3 ], #g2
|
|
35
|
+
[5 , 2 , 1 , 4 , 5 , 6 , 5 ], #g3
|
|
36
|
+
[1 , 1/2, 1/4, 1 , 1/4, 1 , 2 ], #g4
|
|
37
|
+
[4 , 3 , 1/5, 4 , 1 , 3 , 2 ], #g5
|
|
38
|
+
[2 , 1/3, 1/6, 1 , 1/3, 1 , 1/3], #g6
|
|
39
|
+
[1/3, 1/3, 1/5, 1/2, 1/2, 3 , 1 ] #g7
|
|
40
|
+
])
|
|
41
|
+
|
|
42
|
+
# Call AHP Function
|
|
43
|
+
weights, rc = ahp_method(dataset, wd = weight_derivation)
|
|
44
|
+
|
|
45
|
+
# Weigths
|
|
46
|
+
for i in range(0, weights.shape[0]):
|
|
47
|
+
print('w(g'+str(i+1)+'): ', round(weights[i], 3))
|
|
48
|
+
|
|
49
|
+
# Consistency Ratio
|
|
50
|
+
print('RC: ' + str(round(rc, 2)))
|
|
51
|
+
if (rc > 0.10):
|
|
52
|
+
print('The solution is inconsistent, the pairwise comparisons must be reviewed')
|
|
53
|
+
else:
|
|
54
|
+
print('The solution is consistent')
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
3. Try it in **Colab**:
|
|
59
|
+
|
|
60
|
+
- AHP ([ Colab Demo ](https://colab.research.google.com/drive/1qwFQs5xkTZ8K-Ul_wWcCtPjLH0QooU9g?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1016/0377-2217(90)90057-I))
|
|
61
|
+
- Fuzzy AHP ([ Colab Demo ](https://colab.research.google.com/drive/1RtEMOLGL5wtmheMRZv8emcO5wbjYVBCo?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/S0165-0114(83)80082-7))
|
|
62
|
+
- PPF AHP ([ Colab Demo ](https://colab.research.google.com/drive/1wI-8z2aysGKhSI3PLxN6vOZ4jsbPmKYl?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2023.122354))
|
|
63
|
+
- ARAS ([ Colab Demo ](https://colab.research.google.com/drive/1rwQgXjvC3E6pRhOs7CkcCV8Vw2bXEPLy?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/tede.2010.10))
|
|
64
|
+
- Fuzzy ARAS ([ Colab Demo ](https://colab.research.google.com/drive/1kZDkEWsw0d0nFhDQQk8azZXRod7RnfZr?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/transport.2010.52))
|
|
65
|
+
- Borda ([ Colab Demo ](https://colab.research.google.com/drive/1t5RVtG7_yXK-nPxM0MVd4U01qfTQYW4k?usp=sharing)) ( [ Paper ](http://gerardgreco.free.fr/IMG/pdf/MA_c_moire-Borda-1781.pdf))
|
|
66
|
+
- BWM ([ Colab Demo ](https://colab.research.google.com/drive/1XkacTmtSBvZmx_5K9cfz8t1Ao5j-D-bZ?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.omega.2014.11.009))
|
|
67
|
+
- Simplified BWM ([ Colab Demo ](https://colab.research.google.com/drive/1v3QfSdprM8gwxL4VWmh75mPiPn2YWOZn?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/su13084487))
|
|
68
|
+
- Fuzzy BWM ([ Colab Demo ](https://colab.research.google.com/drive/1hBTXyOLpBoC7oE-hsolPH2O0ekzp4VU0?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.knosys.2017.01.010))
|
|
69
|
+
- CILOS ([ Colab Demo ](https://colab.research.google.com/drive/1RnSqO_VEPyvXAMHdneloYvA0TzPx55kw?usp=sharing)) ( [ Paper ](https://doi.org/10.1142/S0219622016500036))
|
|
70
|
+
- CoCoSo ([ Colab Demo ](https://colab.research.google.com/drive/1U8a3NZzQaxDkJdUT3uKIeeoqFtT_3Mnx?usp=sharing)) ( [ Paper ](https://doi.org/10.1108/MD-05-2017-0458))
|
|
71
|
+
- CODAS ([ Colab Demo ](https://colab.research.google.com/drive/1hm7__urqFeBHM6nVQJcBzGPF72DFuoLr?usp=sharing)) ( [ Paper ](https://ideas.repec.org/a/cys/ecocyb/v50y2016i3p25-44.html))
|
|
72
|
+
- Copeland ([ Colab Demo ](https://colab.research.google.com/drive/1ObP3AkQAzoCxT6et5Qkyk1trlER7mcdH?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/BF01212012))
|
|
73
|
+
- COPRAS ([ Colab Demo ](https://colab.research.google.com/drive/1TZJtSjXqwYEwuL7-wfLcPQ8ZBtDq3lth?usp=sharing)) ( [ Paper ](https://doi.org/10.3846/20294913.2012.762953))
|
|
74
|
+
- Fuzzy COPRAS ([ Colab Demo ](https://colab.research.google.com/drive/1AIGgxBkmcA6YHKx06VeYcGf2EV8dPffW?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/s00500-021-05762-w))
|
|
75
|
+
- CRADIS ([ Colab Demo ](https://colab.research.google.com/drive/1p7AQmPIOsZFxaypqMsiRIWW8mIvDtoLi?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/s10668-021-01902-2))
|
|
76
|
+
- CRITIC ([ Colab Demo ](https://colab.research.google.com/drive/1D5SaBHa1-Eo_KYSXHkFjsHYu29M21l_F?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0305-0548(94)00059-H))
|
|
77
|
+
- Fuzzy CRITIC ([ Colab Demo ](https://colab.research.google.com/drive/1wofFhWDw6fn-XpLQoQjveKjyaId-AsEw?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.engappai.2022.104942))
|
|
78
|
+
- DEMATEL ([ Colab Demo ](https://colab.research.google.com/drive/1T04qEft9uwTyQx--gADN6V_vUrT21Xo6?usp=sharing)) ( [ Paper ](https://doi.org/10.1155/2018/3696457))
|
|
79
|
+
- Fuzzy DEMATEL ([ Colab Demo ](https://colab.research.google.com/drive/15e9dMDROr3cxjbWRXg3_t4TScuQtQDpR?usp=sharing)) ( [ Paper ](https://www.sciencedirect.com/science/article/abs/pii/S0957417405003593))
|
|
80
|
+
- EDAS ([ Colab Demo ](https://colab.research.google.com/drive/1xsMdwH-IH-zvOW-1kv6ztQnKGt7p5JnY?usp=sharing)) ( [ Paper ](https://doi.org/10.15388/Informatica.2015.57))
|
|
81
|
+
- Fuzzy EDAS ([ Colab Demo ](https://colab.research.google.com/drive/1kw2LwztNAU9Asjj6BvBmvk11wvk8R3V6?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/978-981-32-9072-3_63))
|
|
82
|
+
- Entropy ([ Colab Demo ](https://colab.research.google.com/drive/1LOCef2KFxoV2qUEQRi4DqfzrgnMgtwT9?usp=sharing)) ( [ Paper ](https://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf))
|
|
83
|
+
- ELECTRE I ([ Colab Demo ](https://colab.research.google.com/drive/1KFqRPBRyv-fxiu2B1y7VNkP5pCCbILF1?usp=sharing)) ( [ Paper ](https://github.com/Valdecy/Datasets/blob/master/MCDA/E01.pdf))
|
|
84
|
+
- ELECTRE I_s ([ Colab Demo ](https://colab.research.google.com/drive/1ngxsQPh2QULjd1_AifFofbukq5zIOePd?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
85
|
+
- ELECTRE I_v ([ Colab Demo ](https://colab.research.google.com/drive/1moonq95gqXqmbRe2KvgqbN2IfowJ12C-?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
86
|
+
- ELECTRE II ([ Colab Demo ](https://colab.research.google.com/drive/1UeAjICH6_tjVr3O9H-fC65HHYMVZgTKc?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
87
|
+
- ELECTRE III ([ Colab Demo ](https://colab.research.google.com/drive/1smeD5ZoPgBnAAUyooAXSrkxHgqZPmUC9?usp=sharing)) ( [ Paper ](https://github.com/Valdecy/Datasets/raw/master/MCDA/E03.pdf))
|
|
88
|
+
- ELECTRE IV ([ Colab Demo ](https://colab.research.google.com/drive/178x062yC-Es6lstEiFaFprbMsTJZwnC-?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-1-4757-5057-7_3))
|
|
89
|
+
- ELECTRE Tri-B ([ Colab Demo ](https://colab.research.google.com/drive/1hu0fJcxdBAiEDrVngmKQfpINpjTF-osE?usp=sharing)) ( [ Paper ](https://drive.google.com/file/d/1oWOI_sX3EEYdRbavoBTT7vUmPII1yPgE/view?usp=sharing))
|
|
90
|
+
- FUCOM ([ Colab Demo ](https://colab.research.google.com/drive/1eWP3xf3-9iLLW_l_9JuAe6BEeoMsqzcL?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/sym10090393))
|
|
91
|
+
- Fuzzy FUCOM ([ Colab Demo ](https://colab.research.google.com/drive/1bkelWth_7TOW_gIz8mBNe_4W5Ox84FUB?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/su14094972 ))
|
|
92
|
+
- GRA ([ Colab Demo ](https://colab.research.google.com/drive/1aMMI0Cuo5kpzTDefqEwJhf0wWpBOP_JL?usp=sharing)) ( [ Paper ](https://uranos.ch/research/references/Julong_1989/10.1.1.678.3477.pdf))
|
|
93
|
+
- IDOCRIW ([ Colab Demo ](https://colab.research.google.com/drive/1zt8uPFZGcHaSnpiT7tDnrDjvs0pK_7vS?usp=sharing)) ( [ Paper ](https://doi.org/10.1142/S0219622016500036))
|
|
94
|
+
- MABAC ([ Colab Demo ](https://colab.research.google.com/drive/1BMqO-HnBXdcOZfZoULpx1H4MLPoUGucJ?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2014.11.057))
|
|
95
|
+
- MACBETH ([ Colab Demo ](https://colab.research.google.com/drive/1GqM9uPgbaWCGyj4l-XjkoifY2JJoVyf2?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0969-6016(94)90010-8))
|
|
96
|
+
- MAIRCA ([ Colab Demo ](https://colab.research.google.com/drive/1gfqgrBAFGVygwm1j3lTjfy5wTsLgT_j5?usp=sharing)) ( [ Paper ](https://doi.org/10.1080/1331677X.2018.1506706))
|
|
97
|
+
- MARA ([ Colab Demo ](https://colab.research.google.com/drive/1Ggg5e7TKVF_JN4yZRq9zThJO-PRBSI-N?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/systems10060248))
|
|
98
|
+
- MARCOS ([ Colab Demo ](https://colab.research.google.com/drive/13MI2Qrakm5VzHN3r5O2RqggCzQwRxCs-?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.cie.2019.106231))
|
|
99
|
+
- MAUT ([ Colab Demo ](https://colab.research.google.com/drive/1qm3ARgQm68GUK2irGiCB-B49vnVHazB7?usp=sharing)) ( [ Paper ](https://doi.org/10.1017/CBO9781139174084))
|
|
100
|
+
- MEREC ([ Colab Demo ](https://colab.research.google.com/drive/1XE3AIzS84w-gw_1MEtV7xvkU1Gj_tRPd?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/sym13040525))
|
|
101
|
+
- Fuzzy MEREC ([ Colab Demo ](https://colab.research.google.com/drive/1yJ1eOXoGNp3amhoyBtEFCXr5PqwI9S5T?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/math11061544))
|
|
102
|
+
- MOORA ([ Colab Demo ](https://colab.research.google.com/drive/1FpKl0QAdwGgCVvLYsRHvMWhz7yOp17B5?usp=sharing)) ( [ Paper ](http://matwbn.icm.edu.pl/ksiazki/cc/cc35/cc35213.pdf))
|
|
103
|
+
- Fuzzy MOORA ([ Colab Demo ](https://colab.research.google.com/drive/1ydHzGeA8WBVY5Gyu8K7Oq6kofQ5XbK3P?usp=sharing)) ( [ Paper ](https://pdfs.semanticscholar.org/6d33/ca3f14c9ed44d23742fd4e9cf94cebcaf148.pdf))
|
|
104
|
+
- MOOSRA ([ Colab Demo ](https://colab.research.google.com/drive/1KYyA4f3OsipPA5e63Ja4A0OGmHvNY6dj?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.15623/ijret.2014.0315105))
|
|
105
|
+
- MULTIMOORA ([ Colab Demo ](https://colab.research.google.com/drive/1JAT8qqHPNoFfMV6a-CzF6BgRwtcUF3-e?usp=sharing)) ( [ Paper ](https://journals.vilniustech.lt/index.php/TEDE/article/view/5832/5078))
|
|
106
|
+
- OCRA ([ Colab Demo ](https://colab.research.google.com/drive/1yQ41lOdjhiANtD1SOXoxA7gVim7A4X4P?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.5937/sjm10-6802))
|
|
107
|
+
- Fuzzy OCRA ([ Colab Demo ](https://colab.research.google.com/drive/1SniY4RLsR6jR9SnI3AR9k0wGlBWH6Pm8?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.5755/j01.ee.30.5.20546))
|
|
108
|
+
- OPA ([ Colab Demo ](https://colab.research.google.com/drive/1RjryznPElHZUTuXQ2-ZKwJqMAVfJWKDC?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.asoc.2019.105893))
|
|
109
|
+
- ORESTE ([ Colab Demo ](https://colab.research.google.com/drive/1USVCt6KJHJK9NXaknY8wTA4L0d4r2kWw?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0377-2217(82)90131-X))
|
|
110
|
+
- PIV ([ Colab Demo ](https://colab.research.google.com/drive/1PwJoBqYn1O2s22MqC9euP89Uyv4sedS0?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.cie.2018.03.045))
|
|
111
|
+
- PROMETHEE I ([ Colab Demo ](https://colab.research.google.com/drive/1WsagC7-Y_5X-Xl90pMz8YwUkKfxf2vol?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
112
|
+
- PROMETHEE II ([ Colab Demo ](https://colab.research.google.com/drive/143TUtTBy9y6gW0kMVAfhANBhuw1bKvBB?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
113
|
+
- PROMETHEE III ([ Colab Demo ](https://colab.research.google.com/drive/11DBaEBBT8B-B3poXubvZ41HELOHok0Rz?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-3-030-15009-9_5
|
|
114
|
+
))
|
|
115
|
+
- PROMETHEE IV ([ Colab Demo ](https://colab.research.google.com/drive/1X2evE6pIf4F7qiKjt1fSU2PqT-NaA5sJ?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.1007/978-3-319-11949-6_14))
|
|
116
|
+
- PROMETHEE V ([ Colab Demo ](https://colab.research.google.com/drive/1IaZCCtq5m8vBBxrBLMCp6xB5U2j8ZNRc?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
117
|
+
- PROMETHEE VI ([ Colab Demo ](https://colab.research.google.com/drive/14QdhifGitj4GK-QijRr1vj_dmGU2Pfh4?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
118
|
+
- PROMETHEE Gaia ([ Colab Demo ](https://colab.research.google.com/drive/1lj7IRKXcuRjrpoBp_KmQn_3sI3P_Qxju?usp=sharing)) ( [ Paper ](https://www.cin.ufpe.br/~if703/aulas/promethee.pdf))
|
|
119
|
+
- EC PROMETHEE ([ Colab Demo ](https://colab.research.google.com/drive/1YxXXuc2urj7_sUreZAROFldAhE0o6gio?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/math11214432))
|
|
120
|
+
- PSI ([ Colab Demo ](https://colab.research.google.com/drive/1u9tN8cYl2mx6KK6yLW2oz6fuVoy8xcCI?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.matdes.2009.11.020))
|
|
121
|
+
- MPSI ([ Colab Demo ](https://colab.research.google.com/drive/1zj2AS6W_VWmG5mYgY4b-dnCK0q3AG1-K?usp=sharing)) ( [ Paper ](https://doi.org/10.3390/systems10060248))
|
|
122
|
+
- RAFSI ([ Colab Demo ](https://colab.research.google.com/drive/13N85L87uh3wJXyja0zYvNglSju3-xVxU?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.3390/math8061015))
|
|
123
|
+
- REGIME ([ Colab Demo ](https://colab.research.google.com/drive/1jcAcjAS92rxvE2urhc6HPixvzJ60HqEg?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/BF00221383))
|
|
124
|
+
- ROC ([ Colab Demo ](https://colab.research.google.com/drive/1uUFXlCsZkFnh8HemNJ_hppvDC1eAwu4W?usp=sharing)) ( [ Paper ](https://doi.org/10.1002/(SICI)1099-0771(199806)11:2<85::AID-BDM282>3.0.CO;2-K))
|
|
125
|
+
- ROV ([ Colab Demo ](https://colab.research.google.com/drive/1sQAPCem0pcS29uf6-n4TpncXMXNx9JDh?usp=sharing)) ( [ Paper ](https://doi.org/10.5267/j.dsl.2015.12.001))
|
|
126
|
+
- RRW ([ Colab Demo ](https://colab.research.google.com/drive/1Pd13mNOosg0bxKAhALA3U9ppQYMB6yp_?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0030-5073(81)90015-5))
|
|
127
|
+
- RSW ([ Colab Demo ](https://colab.research.google.com/drive/1IvAmwypsA6J3JRKGQsi0fmwnlGmL3rKM?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/0030-5073(81)90015-5))
|
|
128
|
+
- SAW ([ Colab Demo ](https://colab.research.google.com/drive/1R4cIsu0jBP9-6zwww_bNxEEnVGrhnS2d?usp=sharing)) ( [ Paper ](https://media.neliti.com/media/publications/326766-simple-additive-weighting-saw-method-in-f8f093e8.pdf))
|
|
129
|
+
- SECA ([ Colab Demo ](https://colab.research.google.com/drive/1Hs2zeOPJdkpdeXnfg6_GeWN6zo5JrIzn?usp=sharing)) ( [ Paper ](https://doi.org/10.15388/Informatica.2018.167))
|
|
130
|
+
- SMART ([ Colab Demo ](https://colab.research.google.com/drive/1K93HXHBR_v2da95Hh_CB6AmTCqta-k3D?usp=sharing)) ( [ Paper ](https://doi.org/10.1007/978-1-4612-3982-6_4))
|
|
131
|
+
- SPOTIS ([ Colab Demo ](https://colab.research.google.com/drive/1TyjDn-xwut3w6Rf0zMiugdwytwmGY_NE?usp=sharing)) ( [ Paper ](https://doi.org/10.23919/FUSION45008.2020.9190347))
|
|
132
|
+
- TODIM ([ Colab Demo ](https://colab.research.google.com/drive/1EQqhhBQHHb8HT0TfuuVeFA2kwezsQYT1?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.ejor.2007.10.046))
|
|
133
|
+
- TOPSIS ([ Colab Demo ](https://colab.research.google.com/drive/1s87DC5_oa9GvgVe98oAP1UIhduac09CB?usp=sharing)) ( [ Paper ](https://doi.org/10.1057/jors.1987.44))
|
|
134
|
+
- Fuzzy TOPSIS ([ Colab Demo ](https://colab.research.google.com/drive/1eKx7AOYrnG-kZcsBt28rMEtCrUO-j3J-?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.procs.2016.07.088))
|
|
135
|
+
- VIKOR ([ Colab Demo ](https://colab.research.google.com/drive/1egZiTNvI2eE-tyJ2m85MM6B3-qhiSjPG?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/S0377-2217(03)00020-1))
|
|
136
|
+
- Fuzzy VIKOR ([ Colab Demo ](https://colab.research.google.com/drive/1anfCnU2TSrW-Z5vMkS_qXFrYZ0ciQE53?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.eswa.2011.04.097))
|
|
137
|
+
- WINGS ([ Colab Demo ](https://colab.research.google.com/drive/1li1_cPxwEM3NOZ4hbI8RROXyOmXeoWew?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.ejor.2013.02.007))
|
|
138
|
+
- WISP, Simple WISP ([ Colab Demo ](https://colab.research.google.com/drive/1xyJf3aydLdVPqhWpNyVXXD8T4PsrX0du?usp=sharing)) ( [ Paper ](https://doi.org/10.1109/TEM.2021.3075783))
|
|
139
|
+
- WSM, WPM, WASPAS ([ Colab Demo ](https://colab.research.google.com/drive/1HbLwXI4HkrmI-lsNzDtBOlCiwxfJltHi?usp=sharing)) ( [ Paper ](https://doi.org/10.1016/j.acme.2013.07.006))
|
|
140
|
+
- Fuzzy WSM, Fuzzy WPM, Fuzzy WASPAS ([ Colab Demo ](https://colab.research.google.com/drive/1PcN_PaXwPHawzCU05UiHE504SkgF6vQ2?usp=sharing)) ( [ Paper ](http://dx.doi.org/10.15837/ijccc.2015.6.2078))
|
|
141
|
+
|
|
142
|
+
4. Compare Methods:
|
|
143
|
+
- Compare Ranks & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1RfLNEJjaHjtn3Lb2cfEDqS-iblaC4GQZ?usp=sharing))
|
|
144
|
+
- Compare Fuzzy Ranks & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1pRO-E9xnk6DYEj_0DaEHUrUiCeIjmnXx?usp=sharing))
|
|
145
|
+
- Compare Weights & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/169hTJxP2APHrDA1h0fD1YEeu9s29wu0T?usp=sharing))
|
|
146
|
+
- Compare Fuzzy Weights & Ask chatGPT ([ Colab Demo ](https://colab.research.google.com/drive/1nWDF8lrTmXlc-TE4_X1-MPhraFjytj1Z?usp=sharing))
|
|
147
|
+
|
|
148
|
+
5. Advanced MCDA Methods:
|
|
149
|
+
|
|
150
|
+
- [3MOAHP](https://github.com/Valdecy/Method_3MOAHP) - Inconsistency Reduction Technique for AHP and Fuzzy-AHP Methods
|
|
151
|
+
- [pyMissingAHP](https://github.com/Valdecy/pyMissingAHP) - A Method to Infer AHP Missing Pairwise Comparisons
|
|
152
|
+
- [ELECTRE-Tree](https://github.com/Valdecy/ELECTRE-Tree) - Algorithm to infer the ELECTRE Tri-B method parameters
|
|
153
|
+
- [Ranking-Trees](https://github.com/Valdecy/Ranking-Trees) - Algorithm to infer the ELECTRE II, III, IV, and PROMETHEE I, II, III, IV method parameters
|
|
154
|
+
|
|
155
|
+
# Acknowledgement
|
|
156
|
+
|
|
157
|
+
This section is dedicated to everyone who helped improve or correct the code. Thank you very much!
|
|
158
|
+
|
|
159
|
+
* Sabir Mohammedi Taieb (23.JANUARY.2023) - https://sabir97.github.io/ - Université Abdelhamid Ibn Badis Mostaganem (Algeria)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
from .ahp import ahp_method
|
|
2
|
+
from .aras import aras_method
|
|
3
|
+
from .borda import borda_method
|
|
4
|
+
from .bwm import bw_method
|
|
5
|
+
from .bwm_s import simplified_bw_method
|
|
6
|
+
from .cilos import cilos_method
|
|
7
|
+
from .cocoso import cocoso_method
|
|
8
|
+
from .codas import codas_method
|
|
9
|
+
from .copeland import copeland_method
|
|
10
|
+
from .copras import copras_method
|
|
11
|
+
from .cradis import cradis_method
|
|
12
|
+
from .critic import critic_method
|
|
13
|
+
from .dematel import dematel_method
|
|
14
|
+
from .e_i import electre_i
|
|
15
|
+
from .e_i_s import electre_i_s
|
|
16
|
+
from .e_i_v import electre_i_v
|
|
17
|
+
from .e_ii import electre_ii
|
|
18
|
+
from .e_iii import electre_iii
|
|
19
|
+
from .e_iv import electre_iv
|
|
20
|
+
from .e_tri_b import electre_tri_b
|
|
21
|
+
from .edas import edas_method
|
|
22
|
+
from .entropy import entropy_method
|
|
23
|
+
from .fucom import fucom_method
|
|
24
|
+
from .fuzzy_ahp import fuzzy_ahp_method
|
|
25
|
+
from .fuzzy_ahp_ppf import ppf_ahp_method
|
|
26
|
+
from .fuzzy_aras import fuzzy_aras_method
|
|
27
|
+
from .fuzzy_bwm import fuzzy_bw_method
|
|
28
|
+
from .fuzzy_copras import fuzzy_copras_method
|
|
29
|
+
from .fuzzy_critic import fuzzy_critic_method
|
|
30
|
+
from .fuzzy_dematel import fuzzy_dematel_method
|
|
31
|
+
from .fuzzy_edas import fuzzy_edas_method
|
|
32
|
+
from .fuzzy_fucom import fuzzy_fucom_method
|
|
33
|
+
from .fuzzy_merec import fuzzy_merec_method
|
|
34
|
+
from .fuzzy_moora import fuzzy_moora_method
|
|
35
|
+
from .fuzzy_ocra import fuzzy_ocra_method
|
|
36
|
+
from .fuzzy_topsis import fuzzy_topsis_method
|
|
37
|
+
from .fuzzy_vikor import fuzzy_vikor_method
|
|
38
|
+
from .fuzzy_waspas import fuzzy_waspas_method
|
|
39
|
+
from .gra import gra_method
|
|
40
|
+
from .idocriw import idocriw_method
|
|
41
|
+
from .mabac import mabac_method
|
|
42
|
+
from .macbeth import macbeth_method
|
|
43
|
+
from .mairca import mairca_method
|
|
44
|
+
from .mara import mara_method
|
|
45
|
+
from .marcos import marcos_method
|
|
46
|
+
from .maut import maut_method
|
|
47
|
+
from .merec import merec_method
|
|
48
|
+
from .moora import moora_method
|
|
49
|
+
from .moosra import moosra_method
|
|
50
|
+
from .multimoora import multimoora_method
|
|
51
|
+
from .ocra import ocra_method
|
|
52
|
+
from .opa import opa_method
|
|
53
|
+
from .oreste import oreste_method
|
|
54
|
+
from .p_ec import ec_promethee, solution_p_ranking, plot_rank_freq, find_column_modes
|
|
55
|
+
from .p_i import promethee_i
|
|
56
|
+
from .p_ii import promethee_ii
|
|
57
|
+
from .p_iii import promethee_iii
|
|
58
|
+
from .p_iv import promethee_iv
|
|
59
|
+
from .p_v import promethee_v
|
|
60
|
+
from .p_vi import promethee_vi
|
|
61
|
+
from .p_xgaia import promethee_gaia
|
|
62
|
+
from .piv import piv_method
|
|
63
|
+
from .psi import psi_method
|
|
64
|
+
from .psi_m import mpsi_method
|
|
65
|
+
from .rafsi import rafsi_method
|
|
66
|
+
from .regime import regime_method
|
|
67
|
+
from .roc import roc_method
|
|
68
|
+
from .rov import rov_method
|
|
69
|
+
from .rrw import rrw_method
|
|
70
|
+
from .rsw import rsw_method
|
|
71
|
+
from .saw import saw_method
|
|
72
|
+
from .seca import seca_method
|
|
73
|
+
from .smart import smart_method
|
|
74
|
+
from .spotis import spotis_method
|
|
75
|
+
from .todim import todim_method
|
|
76
|
+
from .topsis import topsis_method
|
|
77
|
+
from .vikor import vikor_method, ranking
|
|
78
|
+
from .waspas import waspas_method
|
|
79
|
+
from .wisp import wisp_method
|
|
80
|
+
from .wings import wings_method
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
|
|
3
|
+
# Required Libraries
|
|
4
|
+
import numpy as np
|
|
5
|
+
from functools import reduce
|
|
6
|
+
|
|
7
|
+
###############################################################################
|
|
8
|
+
|
|
9
|
+
# Function: AHP (Analytic Hierarchy Process)
|
|
10
|
+
def ahp_method(dataset, wd = 'm'):
|
|
11
|
+
inc_rat = np.array([0, 0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51, 1.48, 1.56, 1.57, 1.59])
|
|
12
|
+
X = np.copy(dataset)
|
|
13
|
+
weights = np.zeros(X.shape[1])
|
|
14
|
+
if (wd == 'm' or wd == 'mean'):
|
|
15
|
+
weights = np.mean(X/np.sum(X, axis = 0), axis = 1)
|
|
16
|
+
vector = np.sum(X*weights, axis = 1)/weights
|
|
17
|
+
lamb_max = np.mean(vector)
|
|
18
|
+
elif (wd == 'g' or wd == 'geometric'):
|
|
19
|
+
for i in range (0, X.shape[1]):
|
|
20
|
+
weights[i] = reduce( (lambda x, y: x * y), X[i,:])**(1/X.shape[1])
|
|
21
|
+
weights = weights/np.sum(weights)
|
|
22
|
+
vector = np.sum(X*weights, axis = 1)/weights
|
|
23
|
+
lamb_max = np.mean(vector)
|
|
24
|
+
elif (wd == 'me' or wd == 'max_eigen'):
|
|
25
|
+
eigenvalues, eigenvectors = np.linalg.eig(X)
|
|
26
|
+
eigenvalues_real = np.real(eigenvalues)
|
|
27
|
+
lamb_max_index = np.argmax(eigenvalues_real)
|
|
28
|
+
lamb_max = eigenvalues_real[lamb_max_index]
|
|
29
|
+
principal_eigenvector = np.real(eigenvectors[:, lamb_max_index])
|
|
30
|
+
weights = principal_eigenvector / principal_eigenvector.sum()
|
|
31
|
+
cons_ind = (lamb_max - X.shape[1])/(X.shape[1] - 1)
|
|
32
|
+
rc = cons_ind/inc_rat[X.shape[1]]
|
|
33
|
+
return weights, rc
|
|
34
|
+
|
|
35
|
+
###############################################################################
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
|
|
3
|
+
# Required Libraries
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
###############################################################################
|
|
8
|
+
|
|
9
|
+
# Function: Rank
|
|
10
|
+
def ranking(flow):
|
|
11
|
+
rank_xy = np.zeros((flow.shape[0], 2))
|
|
12
|
+
for i in range(0, rank_xy.shape[0]):
|
|
13
|
+
rank_xy[i, 0] = 0
|
|
14
|
+
rank_xy[i, 1] = flow.shape[0]-i
|
|
15
|
+
for i in range(0, rank_xy.shape[0]):
|
|
16
|
+
plt.text(rank_xy[i, 0], rank_xy[i, 1], 'a' + str(int(flow[i,0])), size = 12, ha = 'center', va = 'center', bbox = dict(boxstyle = 'round', ec = (0.0, 0.0, 0.0), fc = (0.8, 1.0, 0.8),))
|
|
17
|
+
for i in range(0, rank_xy.shape[0]-1):
|
|
18
|
+
plt.arrow(rank_xy[i, 0], rank_xy[i, 1], rank_xy[i+1, 0] - rank_xy[i, 0], rank_xy[i+1, 1] - rank_xy[i, 1], head_width = 0.01, head_length = 0.2, overhang = 0.0, color = 'black', linewidth = 0.9, length_includes_head = True)
|
|
19
|
+
axes = plt.gca()
|
|
20
|
+
axes.set_xlim([-1, +1])
|
|
21
|
+
ymin = np.amin(rank_xy[:,1])
|
|
22
|
+
ymax = np.amax(rank_xy[:,1])
|
|
23
|
+
if (ymin < ymax):
|
|
24
|
+
axes.set_ylim([ymin, ymax])
|
|
25
|
+
else:
|
|
26
|
+
axes.set_ylim([ymin-1, ymax+1])
|
|
27
|
+
plt.axis('off')
|
|
28
|
+
plt.show()
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
# Function: ARAS (Additive Ratio Assessment)
|
|
32
|
+
def aras_method(dataset, weights, criterion_type, graph = True, verbose = True):
|
|
33
|
+
X = np.copy(dataset)/1.0
|
|
34
|
+
bst = np.zeros(X.shape[1])
|
|
35
|
+
bsm = np.zeros(X.shape[1])
|
|
36
|
+
for j in range(0, X.shape[1]):
|
|
37
|
+
if ( criterion_type[j] == 'max'):
|
|
38
|
+
bst[j] = np.max(X[:, j])
|
|
39
|
+
bsm[j] = bst[j] + np.sum(X[:, j])
|
|
40
|
+
elif ( criterion_type[j] == 'min'):
|
|
41
|
+
bst[j] = 1/np.min(X[:, j])
|
|
42
|
+
X[:,j] = 1/X[:, j]
|
|
43
|
+
bsm[j] = bst[j] + np.sum(X[:, j])
|
|
44
|
+
for j in range(0, X.shape[1]):
|
|
45
|
+
bst[j] = bst[j]/ bsm[j]
|
|
46
|
+
for i in range(0, X.shape[0]):
|
|
47
|
+
X[i, j] = X[i, j]/ bsm[j]
|
|
48
|
+
X = X * weights
|
|
49
|
+
bst = bst * weights
|
|
50
|
+
n_0 = np.sum(bst)
|
|
51
|
+
n_i = np.sum(X, axis = 1)
|
|
52
|
+
k_i = n_i/n_0
|
|
53
|
+
flow = np.copy(k_i)
|
|
54
|
+
flow = np.reshape(flow, (k_i.shape[0], 1))
|
|
55
|
+
flow = np.insert(flow, 0, list(range(1, k_i.shape[0]+1)), axis = 1)
|
|
56
|
+
if (verbose == True):
|
|
57
|
+
for i in range(0, flow.shape[0]):
|
|
58
|
+
print('a' + str(int(flow[i,0])) + ': ' + str(round(flow[i,1], 3)))
|
|
59
|
+
if (graph == True):
|
|
60
|
+
flow = flow[np.argsort(flow[:, 1])]
|
|
61
|
+
flow = flow[::-1]
|
|
62
|
+
ranking(flow)
|
|
63
|
+
return flow
|
|
64
|
+
|
|
65
|
+
###############################################################################
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
|
|
3
|
+
# Required Libraries
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
###############################################################################
|
|
8
|
+
|
|
9
|
+
# Function: Rank
|
|
10
|
+
def ranking(flow):
|
|
11
|
+
rank_xy = np.zeros((flow.shape[0], 2))
|
|
12
|
+
for i in range(0, rank_xy.shape[0]):
|
|
13
|
+
rank_xy[i, 0] = 0
|
|
14
|
+
rank_xy[i, 1] = flow.shape[0]-i
|
|
15
|
+
for i in range(0, rank_xy.shape[0]):
|
|
16
|
+
plt.text(rank_xy[i, 0], rank_xy[i, 1], 'a' + str(int(flow[i,0])), size = 12, ha = 'center', va = 'center', bbox = dict(boxstyle = 'round', ec = (0.0, 0.0, 0.0), fc = (0.8, 1.0, 0.8),))
|
|
17
|
+
for i in range(0, rank_xy.shape[0]-1):
|
|
18
|
+
plt.arrow(rank_xy[i, 0], rank_xy[i, 1], rank_xy[i+1, 0] - rank_xy[i, 0], rank_xy[i+1, 1] - rank_xy[i, 1], head_width = 0.01, head_length = 0.2, overhang = 0.0, color = 'black', linewidth = 0.9, length_includes_head = True)
|
|
19
|
+
axes = plt.gca()
|
|
20
|
+
axes.set_xlim([-1, +1])
|
|
21
|
+
ymin = np.amin(rank_xy[:,1])
|
|
22
|
+
ymax = np.amax(rank_xy[:,1])
|
|
23
|
+
if (ymin < ymax):
|
|
24
|
+
axes.set_ylim([ymin, ymax])
|
|
25
|
+
else:
|
|
26
|
+
axes.set_ylim([ymin-1, ymax+1])
|
|
27
|
+
plt.axis('off')
|
|
28
|
+
plt.show()
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
# Function: Borda
|
|
32
|
+
def borda_method(dataset, criterion_type, graph = True, verbose = True):
|
|
33
|
+
X = np.zeros((dataset.shape[0], dataset.shape[1]))
|
|
34
|
+
for j in range(0, dataset.shape[1]):
|
|
35
|
+
if (criterion_type[j] == 'max'):
|
|
36
|
+
X[:,j] = np.argsort(np.argsort(-dataset[:,j]))+1
|
|
37
|
+
else:
|
|
38
|
+
X[:,j] = np.argsort(np.argsort(dataset[:,j]))+1
|
|
39
|
+
total = np.sum(X, axis = 1)
|
|
40
|
+
if (verbose == True):
|
|
41
|
+
for i in range(0, total.shape[0]):
|
|
42
|
+
print('a' + str(i+1) + ': ' + str(round(total[i], 2)))
|
|
43
|
+
if ( graph == True):
|
|
44
|
+
flow = np.copy(total)
|
|
45
|
+
flow = np.reshape(flow, (total.shape[0], 1))
|
|
46
|
+
flow = np.insert(flow, 0, list(range(1, total.shape[0]+1)), axis = 1)
|
|
47
|
+
flow = flow[np.argsort(flow[:, 1])]
|
|
48
|
+
ranking(flow)
|
|
49
|
+
return total
|
|
50
|
+
|
|
51
|
+
###############################################################################
|