文化算法源代码.doc
文本预览下载声明
/* Funciones para el manejo de n鷐eros aleatorios, de genetic.c
Sin modificar, salvo randomize para recibir la semilla desde
la invocaci髇. */
int jrand;
double oldrand[55];
double rndx2;
int rndcalcflag;
void warmup_random(float);
float rndreal(float, float);
int rnd(int, int);
float randomperc(void);
double randomnormaldeviate(void);
void randomizef(double);
double noise(double,double);
void initrandomnormaldeviate(void);
int flip(float);
void advance_random(void);
/* Flip a biased coin - true if heads */
int flip(float prob)
{
if(randomperc() = prob)
return(1);
else
return(0);
}
/* Fetch a single random number between 0.0 and 1.0 - Subtractive Method */
/* See Knuth, D. (1969), v. 2 for details */
/* name changed from random() to avoid library conflicts on some machines*/
float randomperc()
{
jrand++;
if(jrand = 55)
{
jrand = 1;
advance_random();
}
return((float) oldrand[jrand]);
}
/* Create next batch of 55 random numbers */
void advance_random()
{
int j1;
double new_random;
for(j1 = 0; j1 24; j1++)
{
new_random = oldrand[j1] - oldrand[j1+31];
if(new_random 0.0) new_random = new_random + 1.0;
oldrand[j1] = new_random;
}
for(j1 = 24; j1 55; j1++)
{
new_random = oldrand [j1] - oldrand [j1-24];
if(new_random 0.0) new_random = new_random + 1.0;
oldrand[j1] = new_random;
}
}
/* Initialize random numbers batch */
void randomizef(double semilla)
{
int j1;
for(j1=0; j1=54; j1++)
oldrand[j1] = 0.0;
jrand=0;
warmup_random(semilla);
}
/* Get random off and running */
void warmup_random(float random_seed)
{
int j1, ii;
double new_random, prev_random;
oldrand[54] = random_seed;
new_random = 0.000000001;
prev_random = random_seed;
for(j1 = 1 ; j1 = 54; j1++)
{
ii = (21*j1)%54;
oldrand[ii] = new_random;
new_random = prev_random-new_random;
if(new_random0.0) new_random = new_random + 1.0;
prev_random = oldrand[ii];
}
advance_random();
adv
显示全部