easymcdm
Multiple-criteria decision-making (MCDM) with Electre, Promethee, Weighted Sum and Pareto
Science Score: 54.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
✓Academic publication links
Links to: sciencedirect.com -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.1%) to scientific vocabulary
Keywords
Repository
Multiple-criteria decision-making (MCDM) with Electre, Promethee, Weighted Sum and Pareto
Basic Info
- Host: GitHub
- Owner: qanastek
- License: mit
- Language: Python
- Default Branch: master
- Homepage: https://pypi.org/project/EasyMCDM
- Size: 532 KB
Statistics
- Stars: 16
- Watchers: 2
- Forks: 5
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
EasyMCDM - Quick Installation methods
Install with PyPI
Once you have created your Python environment (Python 3.6+) you can simply type:
bash
pip3 install EasyMCDM
Install with GitHub
Once you have created your Python environment (Python 3.6+) you can simply type:
bash
git clone https://github.com/qanastek/EasyMCDM.git
cd EasyMCDM
pip3 install -r requirements.txt
pip3 install --editable .
Any modification made to the EasyMCDM package will be automatically interpreted as we installed it with the --editable flag.
Setup with Anaconda
bash
conda create --name EasyMCDM python=3.6 -y
conda activate EasyMCDM
More information on managing environments with Anaconda can be found in the conda cheat sheet.
Try It
Data in tests/data/donnees.csv :
csv
alfa_156,23817,201,8,39.6,6,378,31.2
audi_a4,25771,195,5.7,35.8,7,440,33
cit_xantia,25496,195,7.9,37,2,480,34
Promethee
```python from EasyMCDM.models.Promethee import Promethee
data = pd.readcsv('tests/data/donnees.csv', header=None).tonumpy()
or
data = { "alfa156": [23817.0, 201.0, 8.0, 39.6, 6.0, 378.0, 31.2], "audia4": [25771.0, 195.0, 5.7, 35.8, 7.0, 440.0, 33.0], "cit_xantia": [25496.0, 195.0, 7.9, 37.0, 2.0, 480.0, 34.0] } weights = [0.14,0.14,0.14,0.14,0.14,0.14,0.14] prefs = ["min","max","min","min","min","max","min"]
p = Promethee(data=data, verbose=False) res = p.solve(weights=weights, prefs=prefs) print(res) ```
Output :
python
{
'phi_negative': [('rnlt_safrane', 2.381), ('vw_passat', 2.9404), ('bmw_320d', 3.3603), ('saab_tid', 3.921), ('audi_a4', 4.34), ('cit_xantia', 4.48), ('rnlt_laguna', 5.04), ('alfa_156', 5.32), ('peugeot_406', 5.461), ('cit_xsara', 5.741)],
'phi_positive': [('rnlt_safrane', 6.301), ('vw_passat', 5.462), ('bmw_320d', 5.18), ('saab_tid', 4.76), ('audi_a4', 4.0605), ('cit_xantia', 3.921), ('rnlt_laguna', 3.6406), ('alfa_156', 3.501), ('peugeot_406', 3.08), ('cit_xsara', 3.08)],
'phi': [('rnlt_safrane', 3.92), ('vw_passat', 2.5214), ('bmw_320d', 1.8194), ('saab_tid', 0.839), ('audi_a4', -0.27936), ('cit_xantia', -0.5596), ('rnlt_laguna', -1.3995), ('alfa_156', -1.8194), ('peugeot_406', -2.381), ('cit_xsara', -2.661)],
'matrix': '...'
}
Electre Iv / Is
```python from EasyMCDM.models.Electre import Electre
data = { "A1" : [80, 90, 600, 5.4, 8, 5], "A2" : [65, 58, 200, 9.7, 1, 1], "A3" : [83, 60, 400, 7.2, 4, 7], "A4" : [40, 80, 1000, 7.5, 7, 10], "A5" : [52, 72, 600, 2.0, 3, 8], "A6" : [94, 96, 700, 3.6, 5, 6], } weights = [0.1, 0.2, 0.2, 0.1, 0.2, 0.2] prefs = ["min", "max", "min", "min", "min", "max"] vetoes = [45, 29, 550, 6, 4.5, 4.5] indifferencethreshold = 0.6 preferencethresholds = [20, 10, 200, 4, 2, 2] # or None for Electre Iv
e = Electre(data=data, verbose=False)
results = e.solve(weights, prefs, vetoes, indifferencethreshold, preferencethresholds) ```
Output :
python
{'kernels': ['A4', 'A5']}
Pareto
```python from EasyMCDM.models.Pareto import Pareto
data = 'tests/data/donnees.csv'
or
data = { "alfa156": [23817.0, 201.0, 8.0, 39.6, 6.0, 378.0, 31.2], "audia4": [25771.0, 195.0, 5.7, 35.8, 7.0, 440.0, 33.0], "cit_xantia": [25496.0, 195.0, 7.9, 37.0, 2.0, 480.0, 34.0] }
p = Pareto(data=data, verbose=False) res = p.solve(indexes=[0,1,6], prefs=["min","max","min"]) print(res) ```
Output :
python
{
'alfa_156': {'Weakly-dominated-by': [], 'Dominated-by': []},
'audi_a4': {'Weakly-dominated-by': ['alfa_156'], 'Dominated-by': ['alfa_156']},
'cit_xantia': {'Weakly-dominated-by': ['alfa_156', 'vw_passat'], 'Dominated-by': ['alfa_156']},
'peugeot_406': {'Weakly-dominated-by': ['alfa_156', 'cit_xantia', 'rnlt_laguna', 'vw_passat'], 'Dominated-by': ['alfa_156', 'cit_xantia', 'rnlt_laguna', 'vw_passat']},
'saab_tid': {'Weakly-dominated-by': ['alfa_156'], 'Dominated-by': ['alfa_156']},
'rnlt_laguna': {'Weakly-dominated-by': ['vw_passat'], 'Dominated-by': ['vw_passat']},
'vw_passat': {'Weakly-dominated-by': [], 'Dominated-by': []},
'bmw_320d': {'Weakly-dominated-by': [], 'Dominated-by': []},
'cit_xsara': {'Weakly-dominated-by': [], 'Dominated-by': []},
'rnlt_safrane': {'Weakly-dominated-by': ['bmw_320d'], 'Dominated-by': ['bmw_320d']}
}
Weighted Sum
```python from EasyMCDM.models.WeightedSum import WeightedSum
data = 'tests/data/donnees.csv'
or
data = { "alfa156": [23817.0, 201.0, 8.0, 39.6, 6.0, 378.0, 31.2], "audia4": [25771.0, 195.0, 5.7, 35.8, 7.0, 440.0, 33.0], "cit_xantia": [25496.0, 195.0, 7.9, 37.0, 2.0, 480.0, 34.0] }
p = WeightedSum(data=data, verbose=False) res = p.solve(pref_indexes=[0,1,6],prefs=["min","max","min"], weights=[0.001,2,3], target='min') print(res) ```
Output :
python
[(1, 'bmw_320d', -299.04), (2, 'alfa_156', -284.58299999999997), (3, 'rnlt_safrane', -280.84), (4, 'saab_tid', -275.817), (5, 'vw_passat', -265.856), (6, 'audi_a4', -265.229), (7, 'rnlt_laguna', -262.93600000000004), (8, 'cit_xantia', -262.504), (9, 'peugeot_406', -252.551), (10, 'cit_xsara', -244.416)]
Instant-Runoff Multicriteria Optimization (IRMO)
Short description : Eliminate the worst individual for each criteria, until we reach the last one and select the best one.
```python from EasyMCDM.models.Irmo import Irmo
p = Irmo(data="data/donnees.csv", verbose=False) res = p.solve( indexes=[0,1,4,5], # price -> maxspeed -> comfort -> trunkspace prefs=["min","max","min","max"] ) print(res) ```
Output :
python
{'best': 'saab_tid'}
List of methods available
- Promethee I
- Promethee II
- Electre Iv
- Electre Is
- Weighted Sum
- Pareto
- Instant-Runoff Multicriteria Optimization (IRMO)
Build PyPi package
Build: python setup.py sdist bdist_wheel
Upload: twine upload dist/*
Citation
If you want to cite the tool you can use this:
bibtex
@misc{EasyMCDM,
title={EasyMCDM},
author={Yanis Labrak, Quentin Raymondaud, Philippe Turcotte},
publisher={GitHub},
journal={GitHub repository},
howpublished={\url{https://github.com/qanastek/EasyMCDM}},
year={2022}
}
Owner
- Name: Labrak Yanis
- Login: qanastek
- Kind: user
- Location: Avignon, France
- Company: Laboratoire Informatique d'Avignon
- Website: linkedin.com/in/yanis-labrak-8a7412145/
- Twitter: LabrakYanis
- Repositories: 8
- Profile: https://github.com/qanastek
👨🏻🎓 PhD. student in Computer Science (CS), Avignon University 🇫🇷 🏛 Research Scientist - Machine Learning in Healthcare
Citation (CITATION.cff)
cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - family-names: "Labrak" given-names: "Yanis" title: "EasyMCDM" version: 0.1 date-released: 2022-03-05 url: "https://github.com/qanastek/EasyMCDM"
GitHub Events
Total
- Watch event: 2
Last Year
- Watch event: 2
Issues and Pull Requests
Last synced: 10 months ago
All Time
- Total issues: 1
- Total pull requests: 9
- Average time to close issues: less than a minute
- Average time to close pull requests: 4 minutes
- Total issue authors: 1
- Total pull request authors: 1
- Average comments per issue: 0.0
- Average comments per pull request: 0.0
- Merged pull requests: 9
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- qanastek (1)
Pull Request Authors
- PhiltasticGuy (9)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- prettytable *
- prettytable *