MyNixOS website logo
Description

Benchmarking for Multi-Criteria Decision Analysis.

Performs and benchmarks various Multi-Criteria Decision Analysis (MCDA) methods. MCDA is a decision-making framework used to evaluate and rank alternatives based on multiple conflicting criteria using normalization, weighting, and aggregation techniques. The package implements a wide range of MCDA methods including ARAS (Additive Ratio Assessment), AROMAN (Alternative Ranking Order Method Accounting for two-step Normalization), COCOSO (Combined Compromise Solution), CODAS (Combinative Distance-based Assessment), COPRAS (Complex Proportional Assessment), EDAS (Evaluation based on Distance from Average Solution), ELECTRE (Elimination and Choice Expressing Reality) family (I-IV), FUCA (Faire Un Choix Adequat), GRA (Grey Relational Analysis), MABAC (Multi-Attributive Border Approximation Area Comparison), MAIRCA (Multi-Attributive Ideal-Real Comparative Analysis), MARCOS (Measurement of Alternatives and Ranking according to Compromise Solution), MAUT (Multi-Attribute Utility Theory), MAVT (Multi-Attribute Value Theory), MEGAN (Multi-criteria Evaluation with Gradual-weighting and Aggregation of Normalized distance matrices), MOORA (Multi-Objective Optimization on the basis of Ratio Analysis), OCRA (Operational Competitiveness Rating Analysis), ORESTE (Organisation, Rangement Et Synthese De Donnees Relationnelles), PROMETHEE (Preference Ranking Organization Method for Enrichment Evaluations I-VI), RAM (Root Assessment Method), ROV (Range of Value), SMART (Simple Multi-Attribute Rating Technique), TOPSIS (Technique for Order Preference by Similarity to Ideal Solution), VIKOR (VlseKriterijumska Optimizacija I Kompromisno Resenje), WASPAS (Weighted Aggregated Sum Product Assessment), WPM (Weighted Product Model), and WSM (Weighted Sum Model). The package computes comparative evaluation measures including Spearman rank correlation (Spearman, 1904) <doi:10.2307/1412107>, Salabun-Urbaniak's weight similarity index (Salabun and Urbaniak, 2020)<doi:10.1007/978-3-030-50417-5_47>, Wilcoxon signed-rank test (Wilcoxon, 1945)<doi:10.2307/3001968>, and permutation- and bootstrap- based entropy difference tests for pairwise method comparisons using Jensen-Shannon divergence (Lin, 1991)<doi:10.1109/18.61115>. It also provides sensitivity and stability analysis of MCDA results. Weight sensitivity analysis is implemented through deterministic and stochastic perturbation of criterion weights, and is also integrated as a built-in step within the MEGAN method framework (Cebeci, 2026)<doi:10.7717/peerj-cs.3819>.

Introduction

Implements various Multi-Criteria Decision Analysis (MCDA) methods for benchmarking studies. These methods are designed to evaluate and rank alternatives based on multiple criteria, applying normalization, weighting, and aggregation techniques. The package includes a new proposed algorithm MEGAN in addition to the popular decision-making methods such as ARAS, AROMAN, COCOSO, CODAS, COPRAS, EDAS, ELECTRE family (I-IV), FUCA, GRA, MABAC, MAIRCA, MARCOS, MAUT, MAVT, MEGAN, MOORA, OCRA, ORETES, PROMETHEE family (I - VI), RAM, ROV, SMART, TOPSIS, VIKOR, WASPAS, WPM, WSM and many more, facilitating flexible and efficient analyses for multi-criteria problems.

Install mcdabench

You can easily install the mcdabench package from CRAN:

install.packages("mcdabench", dep=TRUE)

After installing the package, load it into your R session by running: library(mcdabench)

library(mcdabench)

Quickly mcdabench

Load data

data(egrids)
dmat < egrids$dmat # Decision matrix
bc <- egrids$bcvec # Benefit-cost vector
uw <- egrids$weights # Criteria weights 

## Normalization

nmatrix1 <- normalize(dmatrix, bcvec=bc, type="maxmin") nmatrix1

nmatrix2 <- normalize(dmatrix, bcvec=bc, type="sum") nmatrix2


## Calculate weights

equwei <- calcweights(nmatrix1, bcvec=bc, type="equal") equwei

entwei <- calcweights(nmatrix1, bcvec=bc, type="entropy") entwei


## Apply MCDA Methods
### Run MEGAN

resmegan <- megan(dmatrix, bcvec=bc, weights=uw, normethod="maxmin") print(resmegan)$rank


### Run TOPSIS

restopsis <- topsis(dmatrix, bcvec=bc, weights=uw, normethod="maxmin") print(restopsis)


### Run VIKOR

resvikor <- vikor(dmatrix, bcvec=bc, weights=uw, v=0.8) print(resvikor$rank)


## Weight Sensitivity Analsyis
### Gradual weight modification for Testing VIKOR

mp <- list(v=0.5) wp <- list(rp = seq(0.01, 0.5, 0.05))

vikorgrawei <- weisana(dmatrix = dmat, bcvec = bc, weimethod = "gradual", weipars = wp, mcdamethod = vikor, methodpars = mp, sensplot=FALSE) print(vikorgrawei) sensplot(vikorgrawei$sensitivity_table, mtitle="Weight Sensivity Analysis for VIKOR", colpal=terrain.colors(10))


### Test WASPAS with gradual and random weighting

mp <- list(v=0.5, normethod="linear", tiesmethod="average") wp <- list(rp = seq(0.01, 0.6, 0.01))

waspasgrawei <- weisana(dmatrix = dmat, bcvec = bc, weimethod = "gradual", weipars = wp, mcdamethod = waspas, methodpars = mp) print(waspasgrawei) sensplot(waspasgrawei$sensitivity_table, mtitle="Weight Sensivity Analysis for WASPAS", colpal=terrain.colors(10))

waspasrandwei <- weisana(dmatrix = dmat, bcvec = bc, weimethod = "random", weipars = list(ss=0.05, niters=50), mcdamethod = waspas, methodpars = mp) print(waspasrandwei) sensplot(waspasrandwei$sensitivity_table, mtitle="Weight Sensivity Analysis (random) for WASPAS", colpal=terrain.colors(10))


# Bechmarking the Methods

Sample decision matrix

dm <- matrix(c( 10, 20, 30, 1.5, 102, 55, 15, 25, 35, 1.6, 90, 60, 12, 22, 32, 1.7, 100, 58, 13, 24, 33, 1.8, 95, 57, 14, 26, 37, 1.9, 98, 59, 11, 23, 31, 1.65, 101, 56, 16, 27, 36, 1.55, 97, 61, 17, 28, 38, 1.7, 99, 63, 18, 29, 39, 1.8, 94, 62, 19, 30, 40, 1.75, 96, 64 ), nrow = 10, byrow = TRUE) colnames(dm) <- paste0("C", 1:ncol(dm)) rownames(dm) <- paste0("ALT", 1:nrow(dm))

Benefit-Cost vector

bc <- c(1, -1, 1, -1, 1, 1)

User-defined weights

userwei <- c(0.3, 0.1, 0.2, 0.1, 0.2, 0.1)

prmlist <- list( aras = list(), aroman = list(lambda = 0.5, beta = 0.5), cocoso = list(lambda = 0.5), codas = list(thr = 0.1),
smart = list(), topsis = list(normethod = "maxmin"), vikor = list(normethod = "maxmin", v = 0.8), waspas = list(normethod = "linear", v = 0.5), wpm = list(normethod = "vector"), wsm = list() )

Compare selected methods with 'gini' weights

giniwei <- calcweights(dm, bcvec=bc, type="gini") rescomp_3 <- methodbench(dmatrix = dm, bcvec = bc, weights = giniwei, mcdm = methodlist, params=prmlist) print(rescomp_3$rankmat) rankheatmap(rescomp_3$rankmat, colpal=1, cellnotes=TRUE, tcol="white")

Overall ranks and outranking

resoverall <- rankaggregate(rescomp_3$rankmat, tiesmethod="average", topk = 3, damp = 0.5, niters = 200, tol = 1e-4) print(resoverall)


# Citation

To cite the mcdabench package in publications, please run the following code in R.

citation("mcdabench")

Metadata

Version

1.1.2

License

Unknown

Platforms (79)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    uefi
    wasip1
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-uefi
  • aarch64-windows
  • aarch64_be-none
  • arc-linux
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • sh4-linux
  • vc4-none
  • wasm32-wasip1
  • wasm64-wasip1
  • x86_64-cygwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-uefi
  • x86_64-windows