产生Levy分布随机数LevyRand源代码
智能算法中除了经常用到正态分布与柯西分布的随机数外,还会需要到另外一种分布随机数产生器,那就是Levy分布,Levy分布随机数兼具上面两种分布的特性,是两种分布的一种调和,在智能算法中引入Levy随机分布一般可以对算法起改进作用,已经有不少学者在进化策略中引入Levy分布随机数,实验表明对算法性能有改进。这里水文工具集提供一个产生Levy分布随机数的函数源代码,函数名为LevyRand,具体代码如下:
//**************************
// Levy分布随机数产生器
//
//*************************/
double HUPRandomExponential(double mu)
{
double u;
do
{
u = frand();// returns [0-1)
}
while(u == 0);// discard 0
return -mu * log(u);
}
double HUPRandomLevy(double c, double alpha)
{
if((alpha <= 0) || (alpha > 2))
return 0;
double u;
do
{
u = frand(); // returns [0-1)
}
while(u == 0); // discard 0
u = M_PI * (u - 0.5);
if(alpha == 1) // Cauchy case
return c * tan(u);
double v;
do
{
v = HUPRandomExponential(1.0);
}
while(v == 0);
if(alpha == 2) // Gaussian case
return c * (2 * sin(u) * sqrt(v));
// general case
double t = sin(alpha * u) / pow(cos(u), 1 / alpha);
double s = pow(cos((1 - alpha) * u) / v, (1 - alpha) / alpha);
return c * t * s;
}
double LevyRand(double c, double alpha)
{
return HUPRandomLevy(c,alpha);
}



914 on 三月 22nd, 2011
这是什么算法,和我另一个地方看到的不一样?
水文工具集 on 三月 22nd, 2011
Levy分布有几个版本吧,可以试验下