pyDecision ships forty-odd MCDA methods and lets you compare their answers
pyDecision is a comprehensive Python library that encompasses a wide array of Multi-Criteria Decision Analysis (MCDA) methods. These powerful and versatile tools assist in making effective decisions by comparing alternatives based on multiple criteria, making it a valuable resource for researchers, analysts, and decision-makers.
At a glance
- What is it?
- A Python library whose differentiator is not any single ranking algorithm but the ability to run several of them and compare the resulting orderings and criterion weights, wrapped in a Flask GUI, with three LLM SDKs installed whether you want them or not.
- Who is it for?
- Adopt pyDecision when your decision problem has a contested method choice, because comparing rankings and criterion weights across forty-odd implementations is the thing it does that a single-method library does not. Do not adopt it in an environment that pins its dependencies tightly, since OpenAI and Google GenAI SDKs arrive as mandatory requirements even for a pure AHP run.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 130 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Forty-odd methods, and the comparison between them
pyDecision is a library of multi-criteria decision analysis methods, and the list is long enough that reading it is the fastest way to understand the scope.
The subjective-weighting family is there in full: AHP with its geometric, arithmetic and maximum-eigenvalue derivations, ANP, fuzzy AHP, PPF AHP, BWM with simplified and fuzzy variants, FUCOM, and the Mairda-style methods MAIRCA and MARA. The objective and hybrid group includes CRITIC, entropy, CILOS, IDOCRIW, MEREC and DEMATEL with a fuzzy variant. Distance and compromise ranking covers TOPSIS-style work through ARAS, COPRAS, EDAS, MABAC, CRADIS, MARCOS, MOORA, MOOSRA, MULTIMOORA and CoCoSo, plus Borda, Copeland, GRA, MACBETH, LaRa, LMAW, MAUT, Flowsort and ELECTRE in a long list of variants. CRADIS and CPP-Tri are there too, and fuzzy variants accompany many of the main entries.
What makes the library more than a catalogue is stated right after the list. It compares rankings of alternatives across methods, and it compares criterion weights across methods. A single-method implementation gives you an ordering; this one lets you see whether your ordering survives a change of method, which is the question a reviewer will ask.
The work is published: Pereira, Basilio and Santos, in the Journal of Modelling in Management, volume 21 number 2, pages 481 to 521, on enhancing decision analysis with a large language model. The metadata version is 5.1.1.
Three LLM SDKs are mandatory install requirements
The dependency list in setup.py is where this library's scope shows up as a decision rather than as a description.
Alongside the expected numpy, scipy, pandas, scikit-learn, matplotlib and networkx, install_requires contains openai, google-genai and llmx. Those are not extras. They are installed whether or not you intend to use the language model integration, so a script that only computes an AHP weight vector still pulls three model client libraries into the environment.
The integration itself is described as elevating result interpretation through AI, with the README naming chatGPT, Gemini and other LLMs. Read that as interpretation rather than computation: the rankings are produced by the MCDA code, and the model is there to explain or discuss them. That is a defensible design, and it is also the part that will make a pinned deployment environment complain first, since cloud SDK versions move faster than a ranking library does.
The other feature worth naming is the escape hatch. Results from custom methods, or from methods not yet implemented in the library, can be imported for comparison. For a researcher testing a new weighting scheme against the established ones, that is often the only feature that matters.
The GUI is two function calls and a Flask dependency
For readers who are new to Python or simply prefer a window, the pyDecision MCDA Studio is started and stopped with two calls:
import pyDecision
# Start the web service using:
pyDecision.web_app()
# Terminate the web service using:
pyDecision.web_stop()The packaged data shows what the interface needs: templates as HTML, static CSS, JavaScript and images, and an examples.json, all under pyDecision.web. That is a small server-rendered application rather than a notebook widget, and flask with werkzeug at 2.0 or newer is in the requirements to serve it.
There is a Colab preview, and the README is careful about what it is for. The Colab demo is intended for quick demos only, and for the best experience you should run the web UI locally or open it directly in a full browser. That is a reasonable warning: a terminal emulator inside a notebook is not where you want to compare forty methods side by side.
The three entry points therefore suit three different readers, the notebook for a quick look, the Flask UI for exploring interactively, and the library for anything you intend to keep.
The AHP example builds a matrix with numpy it never imports
The usage section starts conventionally, with an install and an import:
pip install pyDecision# Import AHP
from pyDecision.algorithm import ahp_method
# Parameters
weight_derivation = 'geometric' # 'mean'; 'geometric' or 'max_eigen'Two things about this snippet. The `weight_derivation` parameter is the one decision the caller makes here, choosing between the arithmetic mean, the geometric mean and the maximum eigenvalue, and the three options are the standard choices for turning a pairwise comparison matrix into weights.
Second, the dataset that follows is a seven by seven matrix of ratios, the form AHP expects, where each cell is a judgement about one criterion against another expressed as 1, 1/3, 1/5 and so on. That array is built with `np.array`, and the import line above it imports nothing from numpy. Run the snippet as printed and it fails on an undefined name before it reaches any decision logic.
The copy of the example available here also stops partway through that array, mid-row, so the closing brackets and the call to the method are not visible. Between the missing import and the truncation, this is the block to fix before you copy it, rather than a formatting detail.
Three worked examples ship as scripts, not notebooks
The examples directory holds three Python scripts, and reading their names tells you more about the library's intended use than the method list does.
There is polymer_composite_gra.py, remote_monitoring_topsis.py and rural_connectivity_edas.py. Three different methods, grey relational analysis, a TOPSIS-family approach and EDAS, applied to three different domains: composite materials, remote monitoring and rural connectivity.
The spread is the point. A library that only demonstrated one method would be teaching its own defaults. Demonstrating GRA on one problem, a TOPSIS variant on another and EDAS on a third shows the same decision matrix shape surviving into domains with no relationship to each other, which is the strongest evidence available that the interfaces generalise.
The tree itself is small: LICENSE, README.md, examples/, the pyDecision/ package and setup.py. There is no test directory and no continuous integration configuration at the top level, so the examples are the reference for what correct usage looks like.
Every method also has a Colab demo and a paper link in the README, AHP and fuzzy AHP among them, which makes it possible to check an implementation against the original formulation rather than trusting the code alone.
Package name, project URL and licence each disagree
Three metadata details are worth checking before you install anything.
The README instructs `pip install pyDecision` while setup.py declares the distribution name as `pydecision`, in lowercase. Package names are normalised on the index, so the install will usually work, but scripts that pin a version string need to know which spelling their lockfile expects.
The URL in setup.py points at github.com/Valdecy/pyDecisions, with an s, while the repository is pyDecision. Anyone copy-pasting that metadata into a citation or an internal catalogue will end up with a link to a name that does not match the project.
The licence has the same kind of split. setup.py records license as GNU, while the package metadata asserts no licence at all. A LICENSE file exists in the tree. Resolve which text applies before this goes into anything with distribution obligations.
For maintenance, the repository is not archived, the default branch is master, there are no GitHub releases, and the last push landed on 2026-06-03. With no release tags, the version to track is the one in setup.py rather than a published artefact.
Editorial conclusion
Adopt pyDecision when your decision problem has a contested method choice, because comparing rankings and criterion weights across forty-odd implementations is the thing it does that a single-method library does not. Do not adopt it in an environment that pins its dependencies tightly, since OpenAI and Google GenAI SDKs arrive as mandatory requirements even for a pure AHP run. Check the package name before installing: the README says pyDecision and the metadata says pydecision.
Frequently asked questions
How do I install pyDecision?
The README gives `pip install pyDecision`, while the packaging metadata names the distribution `pydecision` in lowercase. After installing, you import a method directly, for example `from pyDecision.algorithm import ahp_method`.
Does pyDecision need an API key to run AHP?
The install requirements include openai, google-genai and llmx as mandatory dependencies, so the model client libraries are installed either way. The language model integration is described as being for interpreting results, alongside chatGPT and Gemini, not for computing the ranking.
What is the pyDecision MCDA Studio?
It is the library's web interface, started with pyDecision.web_app() and stopped with pyDecision.web_stop(). It is a Flask application with packaged templates, static assets and an examples.json, and the README suggests running it locally or in a full browser rather than the Colab demo, which is for quick demos only.
Which MCDA methods does pyDecision implement?
Among many others: AHP, ANP, fuzzy AHP, PPF AHP, ARAS, Borda, BWM with simplified and fuzzy variants, CILOS, CoCoSo, CODAS, Copeland, COPRAS, CRADIS, CRITIC, DEMATEL, EDAS, ELECTRE in several variants, Entropy, Flowsort, FUCOM, GRA, IDOCRIW, LaRa, MABAC, MACBETH, MAIRCA, MARCOS, MOORA and MULTIMOORA, plus fuzzy variants of many entries.
How do I compare two MCDA methods with pyDecision?
The library compares rankings of alternatives across methods and compares criterion weights across methods. It also accepts results imported from custom methods, or from methods not yet implemented, so they can be compared against the built-in ones.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/valdecy-pydecision)