公平分享javascript算法

时间:2017-05-15 23:01:36

标签: javascript

我可以使用哪些javascript函数根据优先级编号选择实验,以便优先级较低的实验不会缺乏?

这是我目前正在使用的功能:

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;
}

但即使实验具有优先权,它有时也会返回null。

例如,如果我们有matchExps:[{expid:&#39; test&#39;,priority:100}] priorityKey:&#39; priority&#39;并将这些参数传递给函数。我想确保低优先级的实验不会被饿死。我怎么能用javascript

来做到这一点

0 个答案:

没有答案