npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ahp

v2.4.2

Published

Analytic Hierarchy Process(AHP) Library

Downloads

56

Readme

ahp.js

npm version Build Codecov branch

This node.js module is a library for Analytic Hierarchy Process(AHP).

Wiki page for AHP: https://en.wikipedia.org/wiki/Analytic_hierarchy_process

Project page


Glossary

| Term | Description | Example | | -------------------- | -------------------------------------------------------------- | ------------------------------------------------ | | Items | The choices | Car A, Car B, Car C | | Criteria | The judging perspectives | Price, Speed, Safety | | Criteria Rank Matrix | The Criterion Rank Matrix | Criterion Price is prefferred over Speed | | Criterion Item Rank | The Criterion perspective Item Rank Matrix | In terms of Price, Car A is preferred over Car B | | Rank Scale | The Scale a factor/choice preffered over another factor/choice | Two factors contribute equally to the objective | | RI | Random Consistency Index | 2: 0, 3: 0.58, 4: 0.9, 5: 1.12, ... | | CI | Consistency Index | - | | CR | Consistency Ration (CI/RI) | - |


Install

$ npm i ahp

Quick Samples

Hello World Sample

import AHP from 'ahp';
const ahpContext = new AHP();

ahpContext.addItems(['VendorA', 'VendorB', 'VendorC']);

ahpContext.addCriteria(['price', 'functionality', 'UX']);

//rank criteria with rank scale
ahpContext.rankCriteriaItem('price', [
    ['VendorB', 'VendorC', 1 / 2],
    ['VendorA', 'VendorC', 1 / 2],
    ['VendorA', 'VendorB', 1]
]);

//rank criteria with rank scale
ahpContext.rankCriteriaItem('functionality', [
    ['VendorB', 'VendorC', 1],
    ['VendorA', 'VendorC', 5],
    ['VendorA', 'VendorB', 5]
]);

//rank criteria with absolute rank scole
ahpContext.setCriteriaItemRankByGivenScores('UX', [10, 10, 1]);

ahpContext.rankCriteria(
    [
        ['price', 'functionality', 3],
        ['price', 'UX', 3],
        ['functionality', 'UX', 1]
    ]
);

const output = ahpContext.run();
console.log(output);

Console output

{ error: null,
  rankingMatrix:
   [ [ 0.25, 0.7142857142857141, 0.4761904761904761 ],
     [ 0.25, 0.14285714285714285, 0.4761904761904761 ],
     [ 0.5, 0.14285714285714285, 0.047619047619047616 ] ],
  itemRankMetaMap:
   { price: { ci: 0, ri: 0.58, cr: 0 },
     functionality: { ci: 0, ri: 0.58, cr: 0 },
     UX: { ci: 0, ri: 0.58, cr: 0 } },
  criteriaRankMetaMap:
   { ci: 0,
     ri: 0.58,
     cr: 0,
     weightedVector: [ 0.6000000000000001, 0.20000000000000004, 0.20000000000000004 ] },
  rankedScoreMap:
   { VendorA: 0.3880952380952381,
     VendorB: 0.27380952380952384,
     VendorC: 0.33809523809523817 },
  rankedScores: [ 0.3880952380952381, 0.27380952380952384, 0.33809523809523817 ] }

Import Data Context Sample

import AHP from 'ahp';

const ahpContext = new AHP();

/*
notice that in this demo, we import price item ranking with matrix,
and import UX item ranking with absolute scores. Both are supported.
*/
ahpContext.import({
    items: ['VendorA', 'VendorB', 'VendorC'],
    criteria: ['price', 'functionality', 'UX'],
    criteriaItemRank: {
        price: [
            [1, 1, 0.5],
            [1, 1, 0.5],
            [2, 2, 1]
        ],
        functionality: [
            [1, 5, 5],
            [0.2, 1, 1],
            [0.2, 1, 1]
        ],
        UX: [10, 10, 1]
    },
    criteriaRank: [
        [1, 3, 3],
        [0.3333333333333333, 1, 1],
        [0.3333333333333333, 1, 1]
    ]
});

const output = ahpContext.run();
console.log(output);

Console output

{ error: null,
  rankingMatrix:
   [ [ 0.25, 0.7142857142857141, 0.4761904761904761 ],
     [ 0.25, 0.14285714285714285, 0.4761904761904761 ],
     [ 0.5, 0.14285714285714285, 0.047619047619047616 ] ],
  itemRankMetaMap:
   { price: { ci: 0, ri: 0.58, cr: 0 },
     functionality: { ci: 0, ri: 0.58, cr: 0 },
     UX: { ci: 0, ri: 0.58, cr: 0 } },
  criteriaRankMetaMap:
   { ci: 0,
     ri: 0.58,
     cr: 0,
     weightedVector: [ 0.6000000000000001, 0.20000000000000004, 0.20000000000000004 ] },
  rankedScoreMap:
   { VendorA: 0.3880952380952381,
     VendorB: 0.27380952380952384,
     VendorC: 0.33809523809523817 },
  rankedScores: [ 0.3880952380952381, 0.27380952380952384, 0.33809523809523817 ] }

Export Data Context Sample

import AHP from 'ahp';
const ahpContext = new AHP();
......
const util = require('util');
console.log(util.inspect(ahpContext.export(), false, null));

Console output

{ items: [ 'VendorA', 'VendorB', 'VendorC' ],
  criteria: [ 'price', 'functionality', 'UX' ],
  criteriaItemRank:
   { price: [ [ 1, 1, 0.5 ], [ 1, 1, 0.5 ], [ 2, 2, 1 ] ],
     functionality: [ [ 1, 5, 5 ], [ 0.2, 1, 1 ], [ 0.2, 1, 1 ] ],
     UX: [ [ 1, 1, 10 ], [ 1, 1, 10 ], [ 0.1, 0.1, 1 ] ] },
  criteriaRank:
   [ [ 1, 3, 3 ],
     [ 0.3333333333333333, 1, 1 ],
     [ 0.3333333333333333, 1, 1 ] ] }

Output Analysis Process Information Sample

import AHP from 'ahp';
const ahpContext = new AHP();
......
const analyticContext = ahpContext.debug();
for(const key in analyticContext){
    console.log(`${key}: `, analyticContext[key], '\n');
}

Console output

error:  null

rankingMatrix:  [ [ 0.25, 0.7142857142857141, 0.4761904761904761 ],
  [ 0.25, 0.14285714285714285, 0.4761904761904761 ],
  [ 0.5, 0.14285714285714285, 0.047619047619047616 ] ]

itemRankMetaMap:  { price: { ci: 0, ri: 0.58, cr: 0 },
  functionality: { ci: 0, ri: 0.58, cr: 0 },
  UX: { ci: 0, ri: 0.58, cr: 0 } }

criteriaRankMetaMap:  { ci: 0,
  ri: 0.58,
  cr: 0,
  weightedVector: [ 0.6000000000000001, 0.20000000000000004, 0.20000000000000004 ] }

rankedScoreMap:  { VendorA: 0.3880952380952381,
  VendorB: 0.27380952380952384,
  VendorC: 0.33809523809523817 }

rankedScores:  [ 0.3880952380952381, 0.27380952380952384, 0.33809523809523817 ]

log:  ==========================================
context:
items:
[ 'VendorA', 'VendorB', 'VendorC' ]
criteria:
[ 'price', 'functionality', 'UX' ]
criteriaItemRank:
{ price: [ [ 1, 1, 0.5 ], [ 1, 1, 0.5 ], [ 2, 2, 1 ] ],
  functionality: [ [ 1, 5, 5 ], [ 0.2, 1, 1 ], [ 0.2, 1, 1 ] ],
  UX: [ [ 1, 1, 10 ], [ 1, 1, 10 ], [ 0.1, 0.1, 1 ] ] }
criteriaRank:
[ [ 1, 3, 3 ],
  [ 0.3333333333333333, 1, 1 ],
  [ 0.3333333333333333, 1, 1 ] ]
__________________________________
criteriaItemRank['price']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     1.000|     0.500|
|   VendorB|     1.000|     1.000|     0.500|
|   VendorC|     2.000|     2.000|     1.000|
---------------------------------------------

Consistentcy index: 0
Random index: 0.58
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaItemRank['functionality']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     5.000|     5.000|
|   VendorB|     0.200|     1.000|     1.000|
|   VendorC|     0.200|     1.000|     1.000|
---------------------------------------------

Consistentcy index: 0
Random index: 0.58
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaItemRank['UX']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     1.000|    10.000|
|   VendorB|     1.000|     1.000|    10.000|
|   VendorC|     0.100|     0.100|     1.000|
---------------------------------------------

Consistentcy index: 0
Random index: 0.58
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaRank:
---------------------------------------------------------
|             |        price|functionality|           UX|
|-------------|-------------|-------------|-------------|
|        price|        1.000|        3.000|        3.000|
|functionality|        0.333|        1.000|        1.000|
|           UX|        0.333|        1.000|        1.000|
---------------------------------------------------------

Consistentcy index: 0
Random index: 0.58
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
Criteria Weight Vector: 0.6000000000000001,0.20000000000000004,0.20000000000000004
__________________________________

rankingMatrix: (Higher score is better)
---------------------------------------
|             |VendorA|VendorB|VendorC|
|-------------|-------|-------|-------|
|        price|  0.250|  0.250|  0.500|
|functionality|  0.714|  0.143|  0.143|
|           UX|  0.476|  0.476|  0.048|
---------------------------------------

__________________________________
ranked item scores: (Higher score is better)
---------------
|       |Score|
|-------|-----|
|VendorA|0.388|
|VendorB|0.274|
|VendorC|0.338|
---------------

==========================================

API

import(context)

Description:

Importing context from JSON

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | context | object | The context | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.import({
    items: ['Vendor A', 'Vendor B', 'Vendor C'],
    criteria: ['price', 'functionality', 'UX'],
    criteriaItemRank:
    {
        price: [[1, 1, 0.5], [1, 1, 0.5], [2, 2, 1]],
        functionality: [[1, 1, 5], [1, 1, 5], [0.2, 0.2, 1]],
        UX: [[1, 1, 10], [1, 1, 10], [0.1, 0.1, 1]]
    },
    criteriaRank:
    [[1, 3, 3],
    [0.3333333333333333, 1, 1],
    [0.3333333333333333, 1, 1]]
});

export()

Description:

Exporting context as JSON

Parameters:

nil

Return:

| Type | Description | | ---- | ----------- | | object | The exported AHP context JSON |

Example:

ahpContext.export();

addItem(item)

Description:

Adding Item

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | Item | string | The item | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.addItem('Vendor A');

addItems(items)

Description:

Adding Items

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | Items | string[] | The items | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.addItems(['Vendor A', 'Vendor B', 'Vendor C']);

removeItem(item)

Description:

Removing Item

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | Item | string | The item | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.removeItem('Vendor A');

removeItems(items)

Description:

Removing Items

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | Items | string[] | The items | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.removeItems(['Vendor A', 'Vendor B', 'Vendor C']);

addCriterion(criterion)

Description:

Adding criterion

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criterion | string | The criterion | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.addCriterion('price');

addCriteria(criteria)

Description:

Adding criteria

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criteria | string[] | The criteria | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.addCriteria(['price', 'functionality', 'UX']);

removeCriterion(criterion)

Description:

Removing criterion

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criterion | string | The criterion | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.removeCriterion('price');

removeCriteria(criteria)

Description:

Removing criteria

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criteria | string[] | The criteria | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.removeCriteria(['price', 'functionality', 'UX']);

rankCriteria(preferences)

Description:

Ranking criteria

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criteria | {{preferredCriterion:string, comparingCriterion:string, scale:number}[]|(string|number)[]} | Array of Preference. The 'preferredCriterion' of preference object is the preferred criterion while 'comparingCriterion' is the comparing criterion. The 'scale' is the preferred rank scale. You can pass the 3 objects as an array of 3 objects as well. | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.rankCriteria(
    [
        {preferredCriterion: 'price', comparingCriterion: 'functionality', scale:3},
        {preferredCriterion: 'price', comparingCriterion: 'UX', scale:3},
        {preferredCriterion: 'functionality', comparingCriterion: 'UX', scale:1}
    ]
);

//or
ahpContext.rankCriteria(
    [
        ['price', 'functionality', 3],
        ['price', 'UX', 3],
        ['functionality', 'UX', 1]
    ]
);

setCriteriaRankByGivenScores(vector)

Description:

Ranking criteria by Given Scores. This is suitable for the use case which you want to directly define the criteria ranking scores.

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | vector | number[] | The array of criteria ranking scores. The sequence follow the sequence which you define criteria. | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

//assume criteria = ['price', 'functionality', 'UX'];

ahpContext.setCriteriaRankByGivenScores([1, 2, 5]);
// is equivalent to
ahpContext.rankCriteria(
    [
        ['price', 'functionality', 1/2],
        ['price', 'UX', 1/5],
        ['functionality', 'UX', 2/5]
    ]
);

rankCriteriaItem(criterion, preferences)

Description:

Rank Criteria perspective Item

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criterion | string | The criterion being used as perspective to rank the items | true | - | | preferences | {{preferredItem:string, comparingItem:string, scale:number}[]|(string|number)[]} | Array of Preference. The 'preferredItem' of preference object is the preferred item while 'comparingItem' is the comparing item. The 'scale' is the preferred rank scale. You can pass the 3 objects as an array of 3 objects as well. | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.rankCriteriaItem('price', [
    {preferredItem:'VendorB', comparingItem:'VendorC', scale:1 / 2},
    {preferredItem:'VendorA', comparingItem:'VendorC', scale:1 / 2},
    {preferredItem:'VendorA', comparingItem:'VendorB', scale:1}
]);

//or
ahpContext.rankCriteriaItem('price', [
    ['VendorB', 'VendorC', 1 / 2],
    ['VendorA', 'VendorC', 1 / 2],
    ['VendorA', 'VendorB', 1]
]);

setCriteriaItemRankByGivenScores(criterion, vector)

Description:

Base on specific criterion to rank items by Given Scores. This is suitable for the use case which you want to directly define the criteria perspective item ranking scores.

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criterion | string | The criterion being used as perspective to rank the items | true | - | | vector | number[] | The array of item ranking scores. The sequence follow the sequence which you define items. | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.setCriteriaItemRankByGivenScores('price', [10, 5, 7]);

// is equivalent to
ahpContext.rankCriteriaItem(
    'price',
    [
        ['Vendor A', 'Vendor B', 10/5],
        ['Vendor A', 'Vendor C', 10/7],
        ['Vendor B', 'Vendor C', 5/7]
    ]
);

resetCriteriaItemRank(criteria)

Description:

Reset Criteria perspective Item ranking matrix.

Parameters:

| Parameter | Type | Description | Mandatory | Default Value | | --------- | ---- | ----------- | --------- | ------------- | | criteria | string[] | The criteria which you want to reset item ranking matrix. | true | - |

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.resetCriteriaItemRank(['price', 'functionality']);

resetCriteriaRank()

Description:

Reset Criteria ranking matrix.

Parameters:

nil

Return:

| Type | Description | | ---- | ----------- | | AHP | The AHP object |

Example:

ahpContext.resetCriteriaRank();

findNextProblem()

Description:

Auto check whether the existing input context can successfully done the AHP analysis process. If there are missing information or data inconsistency, this function would return the Error it found.

Parameters:

nil

Return:

| Type | Description | | ---- | ----------- | | ContextError | The Context Error object |

Example:

let problem = ahpContext.findNextProblem();

debug()

Description:

Try to run the AHP analysis process. The result information and the debug log output will be returned.

Parameters:

nil

Return Object properties:

| Property | Type | Description | | -------- | ---- | ----------- | | error | ContextError | The Context Error object if found, or null otherwise. | | rankingMatrix | number[][] | The processed ranking matrix. The row entry represent each item's scores. Each entry in the row represent that item's score on a certain criteria. | | itemRankMetaMap | object | The metadata(e.g: CI, RI, CR) for each criteria perspective item ranking matrix. | | criteriaRankMetaMap | object | The metadata(e.g: CI, RI, CR) for criteria ranking matrix. | | rankedScoreMap | object | The overall computed ranking score for each item | | log | string | The debug log |

Example:

......
let analyticContext = ahpContext.debug();
for(let key in analyticContext){
    console.log(`${key}: `, analyticContext[key], '\n');
}

Console output

error:
 null

rankingMatrix:
 [ [ 0.25, 0.7142857142857141, 0.4761904761904761 ],
  [ 0.25, 0.14285714285714285, 0.4761904761904761 ],
  [ 0.5, 0.14285714285714285, 0.047619047619047616 ] ]

itemRankMetaMap:
 { price: { ci: 0, ri: 0.58, cr: 0 },
  functionality: { ci: 0, ri: 0.58, cr: 0 },
  UX: { ci: 0, ri: 0.58, cr: 0 } }

criteriaRankMetaMap:
 { ci: 0,
  ri: 0.58,
  cr: 0,
  weightedVector: [ 0.6000000000000001, 0.20000000000000004, 0.20000000000000004 ] }

rankedScoreMap:
 { VendorA: 0.3880952380952381,
  VendorB: 0.27380952380952384,
  VendorC: 0.33809523809523817 }

log:
 ==========================================
context:
items:
[ 'VendorA', 'VendorB', 'VendorC' ]
criteria:
[ 'price', 'functionality', 'UX' ]
criteriaItemRank:
{ price: [ [ 1, 1, 0.5 ], [ 1, 1, 0.5 ], [ 2, 2, 1 ] ],
  functionality: [ [ 1, 5, 5 ], [ 0.2, 1, 1 ], [ 0.2, 1, 1 ] ],
  UX: [ [ 1, 1, 10 ], [ 1, 1, 10 ], [ 0.1, 0.1, 1 ] ] }
criteriaRank:
[ [ 1, 3, 3 ],
  [ 0.3333333333333333, 1, 1 ],
  [ 0.3333333333333333, 1, 1 ] ]
__________________________________
criteriaItemRank['price']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     1.000|     0.500|
|   VendorB|     1.000|     1.000|     0.500|
|   VendorC|     2.000|     2.000|     1.000|
---------------------------------------------

Consistentcy index: 0
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaItemRank['functionality']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     5.000|     5.000|
|   VendorB|     0.200|     1.000|     1.000|
|   VendorC|     0.200|     1.000|     1.000|
---------------------------------------------

Consistentcy index: 0
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaItemRank['UX']
---------------------------------------------
|          |   VendorA|   VendorB|   VendorC|
|----------|----------|----------|----------|
|   VendorA|     1.000|     1.000|    10.000|
|   VendorB|     1.000|     1.000|    10.000|
|   VendorC|     0.100|     0.100|     1.000|
---------------------------------------------

Consistentcy index: 0
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
__________________________________
criteriaRank:
---------------------------------------------------------
|             |        price|functionality|           UX|
|-------------|-------------|-------------|-------------|
|        price|        1.000|        3.000|        3.000|
|functionality|        0.333|        1.000|        1.000|
|           UX|        0.333|        1.000|        1.000|
---------------------------------------------------------

Consistentcy index: 0
Consistentcy ratio: 0
CR<=0.1 => sufficient consistency
Criteria Weight Vector: 0.6000000000000001,0.20000000000000004,0.20000000000000004
__________________________________

rankingMatrix: (Higher score is better)
---------------------------------------
|             |VendorA|VendorB|VendorC|
|-------------|-------|-------|-------|
|        price|  0.250|  0.250|  0.500|
|functionality|  0.714|  0.143|  0.143|
|           UX|  0.476|  0.476|  0.048|
---------------------------------------

__________________________________
ranked item scores: (Higher score is better)
---------------
|       |Score|
|-------|-----|
|VendorA|0.388|
|VendorB|0.274|
|VendorC|0.338|
---------------

==========================================

run()

Description:

Try to run the AHP analysis process. The result information will be returned.

Parameters:

nil

Return Object properties:

| Property | Type | Description | | -------- | ---- | ----------- | | error | ContextError | The Context Error object if found, or null otherwise. | | rankingMatrix | number[][] | The processed ranking matrix. The row entry represent each item's scores. Each entry in the row represent that item's score on a certain criteria. | | itemRankMetaMap | object | The metadata(e.g: CI, RI, CR) for each criteria perspective item ranking matrix. | | criteriaRankMetaMap | object | The metadata(e.g: CI, RI, CR) for criteria ranking matrix. | | rankedScoreMap | object | The overall computed ranking score for each item |

Example:

......
let analyticContext = ahpContext.run();
for(let key in analyticContext){
    console.log(`${key}: `, analyticContext[key], '\n');
}

Console output

error:
 null

rankingMatrix:
 [ [ 0.25, 0.7142857142857141, 0.4761904761904761 ],
  [ 0.25, 0.14285714285714285, 0.4761904761904761 ],
  [ 0.5, 0.14285714285714285, 0.047619047619047616 ] ]

itemRankMetaMap:
 { price: { ci: 0, ri: 0.58, cr: 0 },
  functionality: { ci: 0, ri: 0.58, cr: 0 },
  UX: { ci: 0, ri: 0.58, cr: 0 } }

criteriaRankMetaMap:
 { ci: 0,
  ri: 0.58,
  cr: 0,
  weightedVector: [ 0.6000000000000001, 0.20000000000000004, 0.20000000000000004 ] }

rankedScoreMap:
 { VendorA: 0.3880952380952381,
  VendorB: 0.27380952380952384,
  VendorC: 0.33809523809523817 }

Classes

AHP

Description

The AHP context class for input items, criteria & rankings. And then run the AHP process.

API Functions:

ContextError

Description

The abstract base context error object.

Function:

  • toQuestion(): Return the text representation of the Error followup message.

NoItem

Description

There are no items defined.

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "NO_ITEM" |

NoCriteria

Description

There are no criteria defined.

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "NO_CRITERIA" |

MissingCriteriaItemRank

Description

Some item ranking information is not yet input.

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "MISSING_CRITERIA_ITEM_RANK" | | context.criterion | string | The criterion of the missing criterion perspective item ranking matrix entry. | | context.itemA | string | The first item of the missing criterion perspective item ranking matrix entry. | | context.itemB | string | The second item of the missing criterion perspective item ranking matrix entry. |

MissingCriteriaRank

Description

Some criteria ranking information is not yet input.

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "MISSING_CRITERIA_RANK" | | context.criterionA | string | The first criterion of the missing criterion ranking matrix entry. | | context.criterionB | string | The second criterion of the missing criterion perspective ranking matrix entry. |

CriteriaItemRankInsufficientConsistencyRatio

Description

The consistency ratio for item ranking calculated is inconsistent(>0.1).

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "MISSING_CRITERIA_RANK" | | context.criterion | string | The criterion of the criterion perspective item ranking matrix which has inconsistency ratio detected. | | context.cr | number | The consistency ratio. |

CriteriaRankInsufficientConsistencyRatio

Description

The consistency ratio for criteria ranking calculated is inconsistent(>0.1).

Preperties

| Property | Type | Description | | -------- | ---- | ----------- | | type | string | "MISSING_CRITERIA_RANK" | | context.criterion | string | The criterion of the criterion perspective item ranking matrix which has inconsistency ratio detected. | | context.cr | number | The consistency ratio. |


Arthor contact