0

What javascript function can I use to select experiments based on their priority number so that experiments with lower priority are not starved?

Here's the function that I am currently using:

getExperimentBasedOnPriority: function (matchedExps, priorityKey) {
    var sortedMatchedExps = _.sortBy(matchedExps, priorityKey).reverse();
    var exp = null;
    var sum = 0;
    for (var x = 0; x < sortedMatchedExps.length; x += 1) {
        sum += parseInt(sortedMatchedExps[x][priorityKey], 10);
    }
    var start = 0;

    if (sum > 0) {
        // 100 
        var randomNumber = parseFloat(Math.random().toFixed(2));
        for (var i = 0; i < sortedMatchedExps.length; i += 1) {
            var e = sortedMatchedExps[i];
            var weight = parseInt(e[priorityKey], 10);
            var num = weight / sum;
            var startPlus = parseFloat((start + num).toFixed(2));

            if (randomNumber >= start && randomNumber < startPlus) {
                exp = e;
                break;
            }
            start = parseFloat((start + num).toFixed(2));
        }
    }
    return exp;
}

but it sometimes returns null even though experiments have priorities.

For example, if we have matchExps: [{expid: 'test', priority: 100}] priorityKey: 'priority' and pass those arguments to the function. I want to make sure experiments with low priority are not starved. How can I do that using javascript

Chris Hansen
  • 7,813
  • 15
  • 81
  • 165
  • Are you looking for http://stackoverflow.com/questions/30203362/how-to-generate-a-random-weighted-distribution-of-elements ? – le_m May 15 '17 at 23:06
  • In your example, you are passing `matchExps` as an object (`{expid: 'test', priority: 100}`). Try an array of objects instead (`[{expid: 'test', priority: 100}]`). – 0xcaff May 15 '17 at 23:10

0 Answers0