Skip to main content

Introduction

The MCDA Toolkit is a lightweight and flexible .NET library designed to support Multi-Criteria Decision Analysis (MCDA) processes. It assists developers and analysts in structuring, evaluating, and solving decision-making problems involving multiple, often conflicting, criteria. The toolkit provides a streamlined interface for implementing various MCDA methods, facilitating informed and transparent decision-making

Key Features

  • Cross-Platform Compatibility: Supports .NET 6 and .NET Standard 2.0 for broad applicability across different .NET environments.
  • Integrated MCDA Methods: Includes implementations of well-known MCDA techniques such as TOPSIS, VIKOR, and PROMETHEE II.
  • User-Friendly API: Simplifies the workflow of defining criteria, preparing decision matrices, and running analyses.

Why MCDA Toolkit was created

This toolkit was created primarily because there were no mature or well-maintained MCDA libraries available for C# or the .NET ecosystem at the time. The development of this toolkit started as part of my Bachelor's engineering thesis. Initially, only the TOPSIS method was implemented as part of a larger system. After successfully defending my thesis, I decided not to abandon the project. Instead, I extracted its most essential and reusable components and began refactoring them into a standalone library. This effort led to the creation of the MCDA Toolkit — a focused, open-source solution aimed at bringing modern, reliable multi-criteria decision analysis tools to the C#/.NET ecosystem. By separating the core logic from the original project and improving its design and usability, the toolkit became a more robust and general-purpose resource that others could benefit from as well.

Quick example

Define the Decision Matrix

Each row represents an alternative, and each column corresponds to a criterion.

double[,] matrix = new double[,]
{
{ 66, 56, 95 },
{ 61, 55, 166 },
{ 65, 49, 113 },
{ 95, 56, 99 },
{ 63, 43, 178 },
{ 74, 59, 140 },
};

Prepare Weights

They must be double values between 0 and 1, and must sum to 1

double[] weights = new double[]
{
0.4, 0.25, 0.35
};

Define Criteria Types

Each criterion is marked as either a cost (-1) or a benefit (1).

int[] types = new int[]
{
-1, -1, 1
};

Build the Data Object

var data = new DataProviderBuilder()
.AddWeights(weights)
.AddDecisionCriteria(types)
.AddDecisionMatrix(matrix)
.Build();

Create MCDA method

var topsis = TopsisBuilder
.Create()
.WithNormalizationMethod(NormalizationMethod.Vector)
.Build();

Run

var result = topsis.Run(data);