Java中的随机加权选择

我想从集合中选择一个随机项目,但是选择任何项目的机会应与相关的权重成比例

输入示例:

item                weight

---- ------

sword of misery 10

shield of happy 5

potion of dying 6

triple-edged sword 1

因此,如果我有4种可能的物品,那么没有重量的任何一件物品的机会将是四分之一。

在这种情况下,用户遭受痛苦之剑的可能性应该是三刃剑的十倍。

如何在Java中进行加权随机选择?

回答:

Apache Commons中现在有一个用于此的类:EnumeratedDistribution

Item selectedItem = new EnumeratedDistribution<>(itemWeights).sample();

这里itemWeightsList<Pair<Item, Double>>,像(假设Item接口阿恩的答案):

final List<Pair<Item, Double>> itemWeights = Collections.newArrayList();

for (Item i: itemSet) {

itemWeights.add(new Pair(i, i.getWeight()));

}

或在Java 8中:

itemSet.stream().map(i -> new Pair(i, i.getWeight())).collect(toList());

注意: Pair这里需要是org.apache.commons.math3.util.Pair,不是org.apache.commons.lang3.tuple.Pair

以上是 Java中的随机加权选择 的全部内容, 来源链接: utcz.com/qa/420225.html

回到顶部