我遇到了问题我不太清楚如何解决。我有一个有几个点的2D空间。我也有一个当前的观点,这是该领域的其中一个观点。我想随机选择其中一个点,选择的概率越高,就越接近我的当前点。我在Java工作。任何提示将不胜感激。随机选择飞机中的点,选择更接近点的概率更高
回答
通过例如计算
1/distanceFromCurrent
为每个点分配“权重”。根据这些权重选择一个点。对于后者部分
解可以例如在一些下面的答案中找到:
- Weighted random map
- Random value from enum with probability
- Select k random elements from a list whose elements have weights
另一种选择是使用java.util.Random.nextGaussian
。调整生成的双精度,使其表示合理的半径,然后选择最接近该半径的相邻点。
感谢您的回复。我认为从权重集中选择一个点的实际任务本身可能是一个完全不同的问题。 – Graham 2011-05-26 22:03:33
你alraedy所有部件^^
你想要的是,远离因此它具有较小的概率要使用一个公式,其中的距离减小,如概率在当前点:
1/d
d为您的当前点与另一个之间的距离。
所以你要做的是计算每个点他们的概率1/d,并总结所有这些概率,让你的总数或世界。
所以喜欢的东西:
total = 0;
for(MyPoint p : list){
p.probability = 1/(distance(currentpoint,p);
total += p.probability;
}
,然后你只需要做
Math.random*total;
,并将它与你的观点的列表^^;
杰森
谢谢,这也是非常有用的。我认为这是aioobe谈到的解决方案类型的一个实例,但它帮助我理解了我将如何实际实施解决方案。 – Graham 2011-05-26 22:04:59
yep aioobe给你更短的版本,但它的逻辑相同^^ – 2011-05-27 17:46:00
你需要一些概率分布,距离的函数,更具体的,你需要的CDF或概率分布作为Java功能
/**
* @param distance
* @return probability of choosing a point closer than distance
**/
double someCDF(double distance);
一个可能的逆CDF选择是指数分布,并且相应的CDF将是1-Math.exp(distance * r)
,其中r
是用于缩放的一些常数。同样,你可以使用很多不同的功能,但是这个代码很容易编码。
然后按距离分排序,
double rnum = Math.random();
for(Point point : sortedPoints)
if(someCDF(distance(thisPoint,point)) >= rnum)
return point;
会给你你想要的点(技术上的第一点,其概率要挑小于或等于1,均匀随机数,这你可以证明从长远来看,反CDF的概率分布。)
- 1. 随机概率选择
- 2. 不同概率的随机行选择
- 3. 选择随机数的快速概率?
- 4. 根据概率随机选择项目
- 5. 随机选择XSLT中的节点
- 6. 高概率数的随机?
- 7. 在R中选择随机数据点
- 8. 定制的随机概率分布选择MongoDB的文件
- 9. 随机选择的对象用不同的概率
- 10. 更新随机选择的行
- 11. 选择随机
- 12. 随机选择
- 13. 随机选择
- 14. 随机选择
- 15. 从PostgreSQL表加权行的概率选择随机行
- 16. 选择按概率加权的随机状态
- 17. 如何控制随机选择的概率?
- 18. 根据概率选择获胜者的随机数
- 19. 随机元素的统计/加权/概率选择
- 20. 从加权概率列表中随机选择
- 21. 以概率从列表中选择随机元素
- 22. 通过jQuery选择随机p节点
- 23. XPath随机选择子节点
- 24. 如何使用自定义概率分布选择随机选择
- 25. 随机选择加权最近的选择
- 26. 概率比例选择节点信任
- 27. 点对点游戏中的随机对等选择算法?
- 28. C++,给定概率如何随机选择数字
- 29. Android - 以某种概率选择五个随机数
- 30. 随机选择对象与加权概率
你在寻找什么样的概率偏差?实际距离是否重要,还是只关心按距离排序? – 2011-05-26 20:38:09
实际距离很重要。我希望随机选择偏爱以欧式距离更近的点。 – Graham 2011-05-26 20:40:21