我在C ++中创建了一个Cross Entropy Minimization方法的实现,并参考了http://www.cleveralgorithms.com/nature-inspired/probabilistic/cross_entropy.html给出的Ruby代码
我无法理解random_gaussian函数与正态分布的关系以及它究竟在做什么。此外,我无法找出此功能的复杂性。请帮我解决这两件事。
double random_gaussian(double mean , double stdev)
{
double u1,u2,w;
do {
u1 = 2*((double)rand()/RAND_MAX) - 1;
u2 = 2*((double)rand()/RAND_MAX) - 1;
w = u1*u1 + u2 * u2;
} while( w >= 1 );
w = sqrt(( -2.0 * log(w ))/w);
return mean + ( u2* w ) * stdev;
}
这是C ++代码http://pastebin.com/Q4c73Kdi。该程序用于解决AX = B,并且工作正常。
答案 0 :(得分:4)
do...while
块在正方形中生成一个带角(±1,±1)的点,直到该点适合原点为中心的半径为1的圆。预期的迭代次数是区域的比率,它是常数4 /π,或者是大O符号中的O(1)。
至于该过程如何与高斯分布相关,它是Box-Muller transform的应用。 Here是另一页,其中包含一些解释,其中也包含您的代码。