75 lines
2.4 KiB
Markdown
75 lines
2.4 KiB
Markdown
# Random Weighted Choice
|
|
|
|
[](http://travis-ci.org/parmentf/random-weighted-choice)
|
|
|
|
Node.js module to make a random choice among weighted elements of table.
|
|
|
|
## Installation
|
|
|
|
With [npm](http://npmjs.org) do:
|
|
|
|
$ npm install random-weighted-choice
|
|
|
|
|
|
## Examples
|
|
|
|
Although you can add several times the same id
|
|
|
|
var rwc = require('random-weighted-choice');
|
|
var table = [
|
|
{ weight: 1, id: "item1"} // Element 1
|
|
, { weight: 1, id: "item2"} // Element 2
|
|
, { weight: 4, id: "item3"} // Element with a 4 times likelihood
|
|
, { weight: 2, id: "item1"} // Element 1, weight added with 2 => 3
|
|
];
|
|
var choosenItem = rwc(table);
|
|
var choosenUnlikely = rwc(table, 100); // The last shall be first
|
|
var choosenDeterministically = rwc(table, 0);
|
|
|
|
It is better to not use the same twice, if you want a temperature other than
|
|
the default one (50).
|
|
|
|
var rwc = require('random-weighted-choice');
|
|
var table = [
|
|
{ weight: 1, id: "item1"} // Element 1
|
|
, { weight: 1, id: "item2"} // Element 2
|
|
, { weight: 4, id: "item3"} // Element with a 4 times likelihood
|
|
, { weight: 2, id: "item4"} // Element 4
|
|
, { weight: 2, id: "item5"}
|
|
];
|
|
var choosenItem = rwc(table);
|
|
var choosenUnlikely = rwc(table, 100); // The last shall be first
|
|
var choosenDeterministically = rwc(table, 0);
|
|
|
|
Without temperature (second parameter) or a 50 value, likelihoods are:
|
|
|
|
{ item1: 10%, item2: 10%, item3: 40%, item4: 20%, item5: 20% }
|
|
|
|
With a temperature value of 100:
|
|
|
|
{ item1: 30%, item2: 30%, item3: 0%, item4: 20%, item5: 20% }
|
|
|
|
With a temperature value of 0, modified weights are:
|
|
|
|
{ item1: 0, item2: 0, item3: 8, item4: 2, item5: 2 }
|
|
|
|
## Usage
|
|
|
|
### random-weighted-choice(Array table, Number temperature = 50)
|
|
|
|
Return the ``id`` of the chosen item from ``table``.
|
|
|
|
The ``table`` parameter should contain an Array. Each item of that Array must
|
|
bean object, with at least ``weight`` and ``id`` property.
|
|
|
|
Weight values are relative to each other. They are integers.
|
|
|
|
When the sum of the weight values is ``null``, ``null`` is returned (can't choose).
|
|
|
|
When the Array is empty, ``null`` is returned.
|
|
|
|
More explanations on how it works on [Everything2](http://everything2.com/title/Blackboard+temperature).
|
|
|
|
## Also
|
|
|
|
* https://github.com/Schoonology/weighted |