### 7 releases

0.1.6 | Oct 30, 2024 |
---|---|

0.1.5 | Oct 6, 2024 |

0.1.4 | Sep 30, 2024 |

#**307** in Math

**323** downloads per month

**MIT**license

88KB

714 lines

# π€ mcdm

is a Rust library to assist with solving Multiple-Criteria Decision Making (MCDM) problems. It provides a comprehensive set of tools for decision analysis, including normalization techniques, weighting methods, and ranking algorithms.`mcdm`

## β¨ Features

MCDM involves evaluating multiple conflicting criteria when making decisions. This library aims to provide various techniques to normalize data, assign weights to criteria, and rank alternatives. Below is a list of the components that have been implemented.

### π Normalization

Normalization ensures that criteria with different units of measurement can be compared on a common scale. Each method has a specific use case depending on the decision problem.

π Name | π Description |
---|---|

Enhanced Accuracy | Technique proposed by Zeng and Yang in 2013 incorporating criterion's minimums and maximums into the computation. |

Linear | Similiar to Max normalization, where profit criteria depend on the critions maximum value and cost criteria depend on criterion minimum value. |

Logarithmic | Uses natural logarithm in the normalization. |

Min-Max | Scales the values of each criterion between 0 and 1 (or another range) by using the minimum and maximum values of that criterion. |

Max | Similiar to MinMax, but here each element is divided by the maximum value in the column |

Nonlinear | Similiar to linear normalization, but relies on exponentiation of the criteria to help capture more complexitities in the criteria or when data distributions are skewed. |

Sum | Uses the sum of each alternatives criterion. |

Vector | Considers the root of the sum of squares for each criterion. |

Zavadskas-Turskis | Convert different criteria into comparable units. |

### βοΈ Weighting

Weights reflect the relative importance of each criterion. Different weighting techniques help balance criteria appropriately in the decision-making process.

π Name | π Description |
---|---|

Angular | Measures angle between each criterion and an ideal point in a multidimensional space. Criteria that are closer to that ideal point (i.e., have smaller angles) are considered more important and assigned higher weights. |

CRiteria Importance Through Intercriteria Correlation (CRITIC) | Determines weights by combining the variability (standard deviation) of each criterion and the correlation between criteria. A criterion with high variablity and low correlation with others is considered more important. |

Entropy | Measures the uncertainty or disorder within the criterion's values across alternatives. Criteria with higher variability (i.e., more dispersed values) have higher entropy and are assigned lower weights. Criteria with more structured values receive higher weights. |

Equal | Assumes all criteria are equally important and each criterion is assigned the same weight. |

Gini | Based on the Gini coefficient, which measures inequality or dispersion. Criteria with greaterinequality or larger variation across alternatives receive higher weights. |

Method Based on the Removal Effects of Criiteria (MEREC) | Evaluates how the absence of a criterion affects the overall decision. Criteria that, when removed, significantly change the ranking of alternatives are considered more important and are given higher weights. |

Standard Deviation | Criteria weights are derived from standard deviation of criteria across alternatives. Criteria with hiigher standard deviation (i.e., more variation) are given higher weights because they better differentiate the alternatives. |

Variance | Similiar to standard deviation, variance weighting assigns weights to criteria based on the dispersion (variance) of their values across alternatives. Criter with higher variance are consideredmore important. |

### π Ranking Methods

Ranking algorithms combine normalized data and weights to determine the best alternative. These methods aim to provide a clear ranking of alternatives based on the decision-maker's preferences.

π₯ Name | π Description |
---|---|

Additive Ratio ASsessment (ARAS) | Assesses alternatives by comparing their overall performance to the ideal (best) alternative. The assessment is made by taking the ratio of the normalized and weighted decision matrix to the normalized and weighted "best case" alternatives. |

COmbined COmpromise SOlution (COCOSO) | Combines aspects of compromise ranking methods to evaluate and rank alternatives by integrating three approaches: simple additive weighting (SAW), weighted product model (WPM), and the average ranking of alternatives based on their relative performance. This method finds a compromise solution by blending these different ranking strategies, making it robust in handling conflicting criteria. |

COmbined Distance-based ASessment (CODAS) | Ranks alternatives based on euclidean distance and taxicab distance from the negative ideal solution. |

Multi-Attributive Border Approximation Area Comparison (MABAC) | A compensatory ranking method that allows for the trade-off between criteria. The general approach is to calculate the distance between each alternative and an ideal solution called the "border approximation area". |

Technique for Order of Preference by Similarity to Ideal Solution (TOPSIS) | Conceptually says the best alternative should have the shortest geometric distance from the postivei ideal solution and the longest distance form the negative ideal solution. |

Weighted Product Model | Ranks alternatives based on product of each weighted alternative. |

Weighted Sum | Ranks alternatives based on the weighted sum of the alternatives criteria values. |

## π Usage

To start using

, add this to your `mcdm`

:`Cargo.toml`

`[``dependencies``]`
`mcdm ``=` `"`0.1`"`

### π§ͺ Example

Hereβs an example demonstrating how to use the mcdm library for decision-making with the TOPSIS method:

`use` `mcdm``::``{`
`errors``::`McdmError`,`
`rankings``::``{`Rank`,` `TOPSIS``}``,`
`normalization``::``{`MinMax`,` Normalize`}``,`
`weights``::``{`Equal`,` Weight`}``,`
CriteriaType`,`
`}``;`
`use` `ndarray``::`array`;`
`fn` `main``(``)`` ``->` `Result``<``(``)`, McdmError`>` `{`
`//` Define the decision matrix (alternatives x criteria)
`let` alternatives `=` `array!``[``[``4.``0``,` `7.``0``,` `8.``0``]``,` `[``2.``0``,` `9.``0``,` `6.``0``]``,` `[``3.``0``,` `6.``0``,` `9.``0``]``]``;`
`let` criteria_types `=` `CriteriaType``::`from_vec`(``vec!``[``-``1``,` `1``,` `1``]``)``?``;`
`//` Apply normalization using Min-Max
`let` normalized_matrix `=` `MinMax``::`normalize`(``&`alternatives`,` `&`criteria_types`)``?``;`
`//` Alternatively, use equal weights
`let` equal_weights `=` `Equal``::`weight`(``&`normalized_matrix`)``?``;`
`//` Apply the TOPSIS method for ranking
`let` ranking `=` `TOPSIS``::`rank`(``&`normalized_matrix`,` `&`equal_weights`)``?``;`
`//` Output the ranking
`println!``(``"`Ranking: `{:.3?}``"``,` ranking`)``;`
`Ok``(``(``)``)`
`}`

## π€ Contributing

Contributing is what makes the open source community thrive. Any contributions to enhance

are welcome and greatly apprecaited!`mcdm`

If you have any suggestions that could make this project better, please feel free to fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".

- Fork this repo
- Create your feature branch (

)`git``checkout`feature/new-decision-method`-`b - Commit your changes (

)`git``commit``-`m`'`Add new decision method`'` - Push to the remote branch (

)`git``push origin feature/new-decision-method` - Open a pull request

## π License

Distributed under the MIT license. See LICENSE-MIT for more information.

#### Dependencies

~4.5MB

~81K SLoC