我用下面的代码来创建整数与一范围内均匀分布。 (我拿出播种代码)眼下创建非均匀,整分配使用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