easymcdm

Multiple-criteria decision-making (MCDM) with Electre, Promethee, Weighted Sum and Pareto

https://github.com/qanastek/easymcdm

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

decision-making electre electre-iv mcdm multiple-criteria-decision-making optimization pareto promethee promethee-i promethee-ii python weighted-sum
Last synced: 6 months ago · JSON representation ·

Repository

Multiple-criteria decision-making (MCDM) with Electre, Promethee, Weighted Sum and Pareto

Basic Info
Statistics
  • Stars: 16
  • Watchers: 2
  • Forks: 5
  • Open Issues: 0
  • Releases: 0
Topics
decision-making electre electre-iv mcdm multiple-criteria-decision-making optimization pareto promethee promethee-i promethee-ii python weighted-sum
Created almost 4 years ago · Last pushed almost 4 years ago
Metadata Files
Readme License Citation

README.md

PyPI version GitHub Issues Contributions welcome License: MIT Downloads

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

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

👨🏻‍🎓 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

requirements.txt pypi
  • prettytable *
setup.py pypi
  • prettytable *