Java中的随机加权选择

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


输入示例:


item                weight

----                ------

sword of misery         10

shield of happy          5

potion of dying          6

triple-edged sword       1

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


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


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


凤凰求蛊
浏览 483回答 3
3回答

ibeautiful

Apache Commons中现在有一个用于此的类:EnumeratedDistributionItem selectedItem = new EnumeratedDistribution(itemWeights).sample();这里itemWeights是List<Pair<Item,Double>>,像(假设项目接口阿恩的答案):List<Pair<Item,Double>> itemWeights = Collections.newArrayList();for (Item i : itemSet) {&nbsp; &nbsp; 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java