liitfr / electre-js

Multi-criteria decision analysis methods written in JS

Home Page:https://electre.netlify.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

electre-js

version tests coverage dependencies Codacy Badge License: MIT

ELECTRE is a set of multi-criteria decision analysis methods.
If you've never heard of these methods, you can have a look at this document from José Rui FIGUEIRA.

You can use this package in your Node.js and / or web projects.
It uses Workers to calculate results in a separated thread.

Implemented methods

Algorithms come from J-Electre.

Methods for choosing

  • ELECTRE I
  • ELECTRE Is (Seuil)
  • ELECTRE Iv (Veto)

Methods for ranking

  • ELECTRE II
  • ELECTRE III
  • ELECTRE IV

Methods for ordinal classification or sorting

  • ELECTRE TRI
  • ELECTRE TRI ME (Multi-Evaluator)

Only checked methods are implemented at this time, I'll slowly implement the others but tell me if you want to focus on a particular one.

Web version

If you want to use this package in its web version and are using a bundler, you'll have to manually copy web workers.

Example with Spike SSG

By using copy-webpack-plugin in your app.js:

const CopyWebpackPlugin = require('copy-webpack-plugin')
const path = require('path')

module.exports = {
  // ...
  afterSpikePlugins: [
    new CopyWebpackPlugin([{
      from: path.resolve(__dirname, 'node_modules/electre-js/lib/workers'),
      to: path.resolve(__dirname, 'public/workers')
    }])
  ]
}

API

How to use

import electre from 'electre-js';

where electre is an object with two methods : start & kill as described bellow.
You can only run one calculation at a time.

electre.start(version, inputData)

Set calculator state to busy (electre._idle = false) and send a message to related worker that will handle calculation. Throws an error if calculator isn't idle.

inputData

An object with following properties :

properties mandatory expected in methods type rules
numberOfCriterias true I number > 0
numberOfAlternatives true I number > 1
criterias true I array of strings size = numberOfCriterias, all values are unique, no undefined
weights true I array of numbers size = size of criterias, no undefined
alternatives true I array of strings size = numberOfAlternatives, all values are unique, no undefined
evaluations true I array of arrays of numbers matrix n * p where n = size of alternatives & p = size of criterias, no undefined
cThreshold true I number 0 < value < 1
dThreshold true I number 0 < value < 1

returns

A promise of an object with following properties :

properties type rules returned in methods
inputData object inputData passed to the worker I
concordance array of arrays of numbers square matrix n * n where n = alternatives size I
discordance array of arrays of numbers square matrix n * n where n = alternatives size I
credibility array of arrays of numbers square matrix n * n where n = alternatives size. Values = 0 or 1 I
kernel array of strings partition of alternatives I
dominated array of strings partition of alternatives I

electre.kill()

Ask to terminate busy worker and set calculator state back to idle (electre._idle = true).
Promise returned when electre.start() is rejected.

Demo

On electre-www, you can discover electre-js and use ELECTRE methods

Credits

Algorithms come from J-Electre.

About

Multi-criteria decision analysis methods written in JS

https://electre.netlify.com

License:MIT License


Languages

Language:JavaScript 99.3%Language:Shell 0.7%