我遇到了問題我不太清楚如何解決。我有一個有幾個點的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. 隨機選擇XSLT中的節點
- 4. 更新隨機選擇的行
- 5. 隨機選擇
- 6. 隨機選擇
- 7. 隨機選擇
- 8. 根據概率選擇獲勝者的隨機數
- 9. 隨機元素的統計/加權/概率選擇
- 10. 以概率從列表中選擇隨機元素
- 11. XPath隨機選擇子節點
- 12. 通過jQuery選擇隨機p節點
- 13. 隨機選擇加權最近的選擇
- 14. 概率比例選擇節點信任
- 15. 點對點遊戲中的隨機對等選擇算法?
- 16. C++,給定概率如何隨機選擇數字
- 17. Android - 以某種概率選擇五個隨機數
- 18. 離點最近的飛機上的點
- 19. 隨機選擇Combobox?
- 20. 選擇隨機表
- 21. 選擇隨機行
- 22. 隨機詞選擇
- 23. 在Boost圖庫中給定頂點的鄰居的隨機選擇或隨機選擇的有效方法?
- 24. MySQL的選擇隨機
- 25. 隨機選擇的對象 -
- 26. 從WHILE中隨機選擇
- 27. TSQL隨機選擇選擇標準
- 28. xpath:選擇最接近根的節點
- 29. Java的高概率隨機數
- 30. 自動選擇網頁中的隨機選擇選項
你在尋找什麼樣的概率偏差?實際距離是否重要,還是隻關心按距離排序? – 2011-05-26 20:38:09
實際距離很重要。我希望隨機選擇偏愛以歐式距離更近的點。 – Graham 2011-05-26 20:40:21