我用下面的代碼來創建整數與一範圍內均勻分佈。 (我拿出播種代碼)眼下創建非均勻,整分配使用TR1 <random>
int random(int min, int max)
{
static std::mt19937 gen;
std::uniform_int<int> dist(min, max);
return dist(gen);
}
我想修改它給予有利於twords最小值分佈,幾乎從不接近最大值。我可以看到所有預先製作的發行版,但沒有一個是整數。而且我也無法根據任何文檔分辨哪一個符合我的需求。我來最接近的是卡方分佈如圖所示在維基百科上,其中k = 2
但我想不通的基礎上,documentation如何與整數使用它,更不用說集合k值。
我如何設置我的功能,使用適當的不均勻,整數分佈?
仍然工作在選擇正確的發行版:這裏是std::poisson_distribution<int> dist((max - min) * .1);
從0至20的結果:
還沒有應用,爲0應該比1更加頻繁,但它應該幫助下一個人出來後會發佈更多的結果。
以及我的最終解決方案成爲相結合的方法:
int randomDist(int min, int max)
{
static std::mt19937 gen;
std::chi_squared_distribution<double> dist(2);
int x;
do
{
x = (int)(max*dist(gen)/10) + min;
}
while (x > max);
return x;
}
給出的結果是:
在泊松分佈中,如果選擇小於1的參數(當前(20-0)*。1 = 2),則0會比1更頻繁。您還可以通過任何參數進行幾何分佈。您應該選擇哪一個取決於您正在建模的內容:幾何模型直到事件發生的時間(例如,評分目標所需的投籃次數),泊松模型在一段時間內(例如,數字遊戲中的目標)。 – aaz 2011-03-14 12:33:51
那麼我用它來實時遺傳算法。與其有獨特的一代,當我們開始培育一種新的有機體時,我通過健身來挑選它們,並根據這條曲線選擇父母。 – Zak 2011-03-14 21:54:22
@Zak - 如果選擇使用幾何分佈,則可以將每個父母的選擇描述爲#1 vs(#2 vs(獲勝者#3 vs ...))的比賽),其中#i獲勝對任何#j,我
aaz
2011-03-14 22:41:04