产生Levy分布随机数LevyRand源代码

分类:代码, 博客 标签:

智能算法中除了经常用到正态分布柯西分布的随机数外,还会需要到另外一种分布随机数产生器,那就是Levy分布,Levy分布随机数兼具上面两种分布的特性,是两种分布的一种调和,在智能算法中引入Levy随机分布一般可以对算法起改进作用,已经有不少学者在进化策略中引入Levy分布随机数,实验表明对算法性能有改进。这里水文工具集提供一个产生Levy分布随机数的函数源代码,函数名为LevyRand,具体代码如下:

//**************************
// Levy分布随机数产生器
// http://cnhup.com
//*************************/
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);
}


分类:代码, 博客 标签:

2 Responses to “产生Levy分布随机数LevyRand源代码”

  1. 914  on 三月 22nd, 2011

    这是什么算法,和我另一个地方看到的不一样?

    • 水文工具集  on 三月 22nd, 2011

      Levy分布有几个版本吧,可以试验下


发表评论

You must be logged in to post a comment.