JMcDM

JMcDM: A Julia package for multiple-criteria decision-making tools - Published in JOSS (2021)

https://github.com/jbytecode/jmcdm

Science Score: 100.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
    Found 9 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    2 of 10 committers (20.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

julia mcdm multiple-criteria-decision-making optimization

Keywords from Contributors

multi-objective-optimization uncertainty-quantification sensitivity-analysis
Last synced: 6 months ago · JSON representation ·

Repository

A package for Multiple criteria decision-making techniques in Julia

Basic Info
  • Host: GitHub
  • Owner: jbytecode
  • License: mit
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 3.13 MB
Statistics
  • Stars: 56
  • Watchers: 4
  • Forks: 8
  • Open Issues: 6
  • Releases: 64
Topics
julia mcdm multiple-criteria-decision-making optimization
Created about 5 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct Citation

README.md

DOI Doc codecov

JMcDM

A package for Multiple-criteria decision-making techniques in Julia.

The problem

Suppose a decision process has n alternatives and m criteria which are either to be maximized or minimized. Each single criterion has a weight 0 ≤ wᵢ ≤ 1 where sum of wᵢ is 1. fᵢ is either maximum or minimum. gⱼ(.) is the evolution function and it is chosen as gⱼ(x) = x in many methods. A multiple criteria decision problem can be represented using the decision table

without loss of generality. When A₁, A₂, ..., Aₙ are alternatives and C₁, C₂, ..., Cₙ are different situations of a single criterion then the decision problem is said to be single criterion decision problem. If Cⱼ are strategies of two game players then gⱼ(Aᵢ) is the gain of the row player when she selects the strategy i and the column player selects the strategy Cⱼ.

The package mainly focuses on solving these kinds of decision problems.

For whom?

Multiple-criteria decision-making is an inter-discipline subject and there is a vast amount of research in the literature in this area. However, the existing software packages in this area are generally focused on a small subset of tools. JMcDM is a developer and researcher-friendly Julia package that combines the developed methods, utility functions for implementing new ones, and serves an environment for comparing results of multiple analyses.

Installation

Please type

julia julia> ] (@v1.10) pkg> add JMcDM

or

julia julia> using Pkg julia> Pkg.add("JMcDM")

in Julia REPL to install package in the standard way, otherwise, you can clone the repository and type

julia julia> ] (@v1.10) pkg> develop .

to start developing new methods.

Package Dependencies

Since the Julia package manager installs all of the dependencies automatically, a standard user doesn't need to install them manually. The package dependencies are listed below:

  • Requires.jl

for the main functionality. You can also install the

  • JuMP
  • Ipopt

for zero-sum game problem solving, data envelopment analysis, and the SECA method. You can also import

  • DataFrames

manually for user-friendly interactions. All of the methods require a decision matrix in type of Matrix which can be converted from a DataFrame using the code

julia Matrix(df)

before calling any method.

Documentation

Please check out the reference manual here.

Implemented methods

Weighting methods

  • Custom Weights
  • CILOS (The Criterion Impact Loss Method)
  • CRITIC (CRiteria Importance Through Intercriteria Correlation)
  • Entropy
  • IDOCRIW (Integrated Determination of Objective Criteria Weights)
  • LOPCOW (LOgarithmic Percentage Change-driven Objective Weighting)
  • MEREC (MEthod based on the Removal Effects of Criteria) for determining weights
  • SD Method for determining weights of criteria

Classical MCDM Tools

  • AHP (Analytic Hierarchy Process)
  • ARAS (Additive Ratio Assessment)
  • CoCoSo (Combined Compromise Solution)
  • CODAS (COmbinative Distance-based ASsessment)
  • Copeland (For combining multiple ordering results)
  • COPRAS (COmplex PRoportional ASsessment)
  • DEA (Data Envelopment Analysis)
  • DEMATEL (The Decision Making Trial and Evaluation Laboratory)
  • EDAS (Evaluation based on Distance from Average Solution)
  • ELECTRE (Elimination and Choice Translating Reality)
  • GRA (Grey Relational Analysis)
  • LMAW (Logarithm Methodology of Additive Weights)
  • MABAC (Multi-Attributive Border Approximation area Comparison)
  • MAIRCA (Multi Attributive Ideal-Real Comparative Analysis)
  • MARCOS (Measurement Alternatives and Ranking according to COmpromise Solution)
  • MOORA Ratio
  • MOORA Reference (Multi-Objective Optimization By Ratio Analysis)
  • MOOSRA (Multi-Objective Optimization on the basis of Simple Ratio Analysis) Method
  • Non-dominated Sorting
  • OCRA (Operational Competitiveness RAting)
  • PIV (Proximity Indexed Value) method
  • PROMETHEE (Preference Ranking Organization METHod for Enrichment of Evaluations)
  • PSI (Preference Selection Index) Method
  • ROV (Range of Value) Method
  • SAW (Simple Additive Weighting) (aka WSM)
  • SECA (Simultaneous Evaluation of Criteria and Alternatives)
  • TOPSIS (Technique for Order Preference by Similarity to Ideal Solutions)
  • VIKOR (VlseKriterijumska Optimizcija I Kaompromisno Resenje in Serbian)
  • WASPAS (Weighted Aggregated Sum Product ASsessment)
  • WPM (Weighted Product Model)
  • TODIM (the Portuguese acronym for multicriteria, interactive decision-making)
  • Best-Worst Method
  • RAM (Root Assessment Method)

Fuzzy MCDM Tools

  • Fuzzy CoCoSo
  • Fuzzy EDAS
  • Fuzzy TOPSIS
  • Fuzzy SAW
  • Fuzzy VIKOR

SCDM Tools

  • minimax
  • maximin
  • minimin
  • maximax
  • Savage
  • Hurwicz
  • MLE
  • Laplace
  • Expected Regret

Game

  • Game solver for zero sum games

Example

julia julia> using JMcDM julia> using DataFrames julia> df = DataFrame( :age => [6.0, 4, 12], :size => [140.0, 90, 140], :price => [150000.0, 100000, 75000], :distance => [950.0, 1500, 550], :population => [1500.0, 2000, 1100]);

julia julia> df 3×5 DataFrame Row │ age size price distance population │ Float64 Float64 Float64 Float64 Float64 ─────┼────────────────────────────────────────────────── 1 │ 6.0 140.0 150000.0 950.0 1500.0 2 │ 4.0 90.0 100000.0 1500.0 2000.0 3 │ 12.0 140.0 75000.0 550.0 1100.0

```julia julia> w = [0.35, 0.15, 0.25, 0.20, 0.05]; julia> fns = [minimum, maximum, minimum, minimum, maximum]; julia> result = topsis(Matrix(df), w, fns); julia> result.scores 3-element Array{Float64,1}: 0.5854753145549456 0.6517997936899308 0.41850223305822903

julia> result.bestIndex 2 ```

alternatively

julia julia> result = mcdm(Matrix(df), w, fns, TopsisMethod())

or

julia julia> setting = MCDMSetting(Matrix(df), w, fns) julia> result = topsis(setting)

or

julia julia> setting = MCDMSetting(Matrix(df), w, fns) julia> result = mcdm(setting, TopsisMethod())

Jupyter Notebook

Here is a Jupyter Notebook for basic usage:

https://github.com/jbytecode/JMcDM/blob/main/notebook/basic-usage.ipynb

Community guidelines

How to cite

Please use the BibTeX entry:

bibtex @article{Satman2021, doi = {10.21105/joss.03430}, url = {https://doi.org/10.21105/joss.03430}, year = {2021}, publisher = {The Open Journal}, volume = {6}, number = {65}, pages = {3430}, author = {Mehmet Hakan Satman and Bahadır Fatih Yıldırım and Ersagun Kuruca}, title = {JMcDM: A Julia package for multiple-criteria decision-making tools}, journal = {Journal of Open Source Software} }

or citation string

Satman et al., (2021). JMcDM: A Julia package for multiple-criteria decision-making tools. Journal of Open Source Software, 6(65), 3430, https://doi.org/10.21105/joss.03430

to cite this software.

Contribute to software

Do you want to contribute?

  • Please create an issue first. In this issue, please specify the idea.
  • Let the community discuss the new contribution in our Slack channel or the created issue.

If the community decision is yes, please

  • Fork the repository
  • Add the new code to this forked repository
  • Make sure the tests are passed
  • Send a pull request with a good description of functionality.

Where to start?

The TOPSIS method, defined in topsis.jl, is a basis for many methods and it can be followed before implementing a new one.

The design pattern

  • topsis() takes the decision matrix, weights, and vector of directions of optimization as arguments. This function is defined in topsis.jl.

julia function topsis(decisionMat::Matrix, weights::Array{Float64,1}, fns::Array{Function,1})::TopsisResult

  • topsis() method has a return type of TopsisResult. This struct is defined in types.jl

julia struct TopsisResult <: MCDMResult decisionMatrix::Matrix weights::Array{Float64,1} normalizedDecisionMatrix::DataFrame normalizedWeightedDecisionMatrix::DataFrame bestIndex::Int64 scores::Array{Float64,1} end

  • Optionally, a show function can be derived for pretty-printing the result. These functions are defined in print.jl

julia function Base.show(io::IO, result::TopsisResult) println(io, "Scores:") println(io, result.scores) println(io, "Best indices:") println(io, result.bestIndex) end

Please read the issue Welcome to newcomers! for other implementation details.

Report Issues

If you find a bug or error, first report the problem in a new issue. If the problem is already addressed in an existing issue please follow the existing one.

Seek Support

Our Slack channel is JMcDM Slack Channel. Please feel free to ask about any problem using our Slack channel or issues. Julia Discourse is the JMcDM entry in Julia Discourse site and any thoughts, problems, and issues can also be discussed there.

Welcome!

Owner

  • Name: Mehmet Hakan Satman
  • Login: jbytecode
  • Kind: user
  • Location: Istanbul
  • Company: Istanbul University

Professor of Numerical Methods

JOSS Publication

JMcDM: A Julia package for multiple-criteria decision-making tools
Published
September 29, 2021
Volume 6, Issue 65, Page 3430
Authors
Mehmet Hakan Satman ORCID
Department of Econometrics, Istanbul University, Istanbul, Turkey
Bahadır Fatih Yıldırım ORCID
Department of Transportation and Logistics, Istanbul University, Istanbul, Turkey
Ersagun Kuruca ORCID
Independent researcher
Editor
Vincent Knight ORCID
Tags
decision making multiple criteria outranking

Citation (CITATION.txt)

@article{Satman2021,
  doi = {10.21105/joss.03430},
  url = {https://doi.org/10.21105/joss.03430},
  year = {2021},
  publisher = {The Open Journal},
  volume = {6},
  number = {65},
  pages = {3430},
  author = {Mehmet Hakan Satman and Bahadır Fatih Yıldırım and Ersagun Kuruca},
  title = {JMcDM: A Julia package for multiple-criteria decision-making tools},
  journal = {Journal of Open Source Software}
}



Satman et al., (2021). JMcDM: A Julia package for multiple-criteria decision-making tools. Journal of Open Source Software, 6(65), 3430, https://doi.org/10.21105/joss.03430

GitHub Events

Total
  • Create event: 3
  • Commit comment event: 19
  • Release event: 2
  • Issues event: 5
  • Watch event: 8
  • Push event: 82
Last Year
  • Create event: 3
  • Commit comment event: 19
  • Release event: 2
  • Issues event: 5
  • Watch event: 8
  • Push event: 82

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 609
  • Total Committers: 10
  • Avg Commits per committer: 60.9
  • Development Distribution Score (DDS): 0.112
Past Year
  • Commits: 56
  • Committers: 1
  • Avg Commits per committer: 56.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
jbytecode m****n@g****m 541
bahadirfyildirim b****m@g****m 31
Shayan s****i@g****m 19
Bahadır Fatih Yıldırım m****l@b****m 8
Rik Huijzer t****r@r****l 2
Jesús Mejía j****d@g****m 2
Ersagun Kuruca e****a@g****m 2
Daniel S. Katz d****z@i****g 2
Vince Knight v****e@v****g 1
Takuya Iwanaga t****i@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 24
  • Total pull requests: 42
  • Average time to close issues: 5 months
  • Average time to close pull requests: about 2 hours
  • Total issue authors: 7
  • Total pull request authors: 9
  • Average comments per issue: 9.29
  • Average comments per pull request: 0.76
  • Merged pull requests: 41
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 5
  • Pull requests: 0
  • Average time to close issues: 3 months
  • Average time to close pull requests: N/A
  • Issue authors: 2
  • Pull request authors: 0
  • Average comments per issue: 1.2
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • jbytecode (13)
  • shayandavoodii (4)
  • jmejia8 (3)
  • NiharikaPatel (1)
  • bahadirfyildirim (1)
  • queueyong (1)
  • JuliaTagBot (1)
Pull Request Authors
  • bahadirfyildirim (26)
  • shayandavoodii (3)
  • jbytecode (3)
  • ConnectedSystems (2)
  • jmejia8 (2)
  • ersagunkuruca (2)
  • drvinceknight (1)
  • rikhuijzer (1)
  • danielskatz (1)
Top Labels
Issue Labels
enhancement (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 190 total
  • Total dependent packages: 2
  • Total dependent repositories: 0
  • Total versions: 72
juliahub.com: JMcDM

A package for Multiple criteria decision-making techniques in Julia

  • Versions: 72
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 190 Total
Rankings
Dependent repos count: 9.9%
Stargazers count: 16.0%
Forks count: 16.2%
Average: 16.3%
Dependent packages count: 23.0%
Last synced: 6 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/documentation.yml actions
  • actions/checkout v2 composite
  • julia-actions/setup-julia latest composite
.github/workflows/main.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v2 composite
  • julia-actions/julia-buildpkg latest composite
  • julia-actions/julia-processcoverage latest composite
  • julia-actions/julia-runtest latest composite
  • julia-actions/setup-julia v1 composite