JMcDM: A Julia package for multiple-criteria decision-making tools

JMcDM is a Julia package that implements some leading multiple-criteria decision-making tools for both researchers and developers. By having a REPL tool, Julia is well suited for researchers to perform their analysis using different methods and comparing their results. JMcDM also provides the necessary infrastructure, utility functions, and a standardized API for implementing recently published methods. The package brings MCDM (Multiple-Criteria Decision-Making) tools to a relatively new language such as Julia with its significant performance promises. Besides Julia being a new language, the methods developed in the package are designed to be familiar to users who previously used the R and Python languages. This paper presents the basics of the design, example usage, and code snippets.


Introduction
The one-dimensional array a is in ascending order if and only if a i ≤ a i+1 where i = 1, 2, . . . , n − 1, and n is the length of the array. In other terms, the process of ordering numbers requires the logical ≤ operator to be perfectly defined. Since the operator ≤ is not defined for any set of points in higher dimensions, R p for p ≥ 2, there is not a unique ordering of points. In the multi-dimensional case, the binary domination operator ≻ applied on points a and b, a ≻ b, is true if each item in a is not worse than the corresponding item in b and at least one item is better than the corresponding item in b (Deb et al., 2002). On the other hand, the more relaxed operator ⪰ returns true if each item in a is as good as the corresponding item in b (Greco et al., 2016). Several outranking methods in MCDM (Multiple-Criteria Decision Making) define a unique ranking mechanism to select the best alternative among others.
Suppose a decision process has n alternatives and m criteria that are either to be maximized or minimized. Each single criterion has a weight 0 ≤ w i ≤ 1 where ∑ m i w i = 1 and is represented by a function f i which is either maximum or minimum. g j (.) is an evolution function and it is taken as g j (x) = x in many methods. A multiple criteria decision problem can be represented using the decision table shown in Table 1 without loss of generality. When A 1 , A 2 , . . ., A n are alternatives and C 1 , C 2 , . . ., C m are different situations of a single criterion then the decision problem is said to be a single criterion decision problem. If A i and C j are strategies of two game players then g j (A i ) is the gain of the row player when she selects the strategy i and the column player selects the strategy C j .

State of the field
Multiple-criteria decision-making (MCDM) tools provide several algorithms for ordering or selecting alternatives and/or determining the weights when there is uncertainty. Although some algorithms are suitable for hand calculations, computer software is often required. While some previous applications only focused on a single method, some applications appear to include multiple methods. PyTOPS is a Python tool for TOPSIS (Yadav et al., 2019). Su per Decisions is a software package that is mainly focused on AHP (Analytic Hierarchy Process) and ANP (Analytic Network Process) (Adams & Saaty, 2003). Visual Promethee implements the Promethee method on Windows platforms (Mareschal & Smet, 2009

Statement of need
While the applications mentioned above are lacking in features such as the number of methods included, being programmable, being free, and the results being comparable by the researcher, JMcDM clearly differs as it has all of these features. JMcDM is designed to provide a developerfriendly library for solving multiple-criteria decision problems in Julia (Bezanson et al., 2017). Since Julia is a dynamic language, it is also useful for researchers who are familiar with REPL (Read-Eval-Print-Loop) environments. The package includes multi-criteria decision methods as well as a game solver for zero-sum games, and methods for single criterion methods.
The full set of other tools and utility functions are listed and documented in the source code as well as in the online documentation.

Installation and basic usage
JMcDM can be downloaded and installed using the Julia package manager by typing julia> using Pkg julia> Pkg.add("JMcDM") and can be loaded before using any functions by typing julia> using JMcDM in Julia REPL.
Suppose a decision problem is given in the In this sample problem, a decision maker is subject to select an apartment by considering the age of the building, size (in m 2 s), price (in $), distance to city centre (in ms), and nearby population. The data can be entered as a two-dimensional array (matrix) or as a DataFrame object: In the output above, it is shown that the alternative A 2 has a score of 0.65179 and it is selected as the best. The same analysis can be performed using saw() for the method of Simple Additive Weighting julia> result = saw(df, w, fns); julia> result.bestIndex 2 as well as using wpm for the method of Weighted Product Method julia> result = wpm(df, w, fns); julia> result.bestIndex 2 For any method, ?methodname shows the documentation as in the same way in other Julia packages.