示例#1
0
// pick an individual for reproduction
int studyPop::pickAMom() {

    // This value will later be returned to determine the index of mom in "thePop"
    int mom;

    // this is used for fitness check in this function
    double requiredFitness;

    // use GSL to generate random numbers
    const gsl_rng_type * T;
    gsl_rng * r;

    // Initialize the random number generator
    T = gsl_rng_taus;
    r = gsl_rng_alloc (T);
    gsl_rng_set (r, gsl_rng_default_seed);


    // pick different moms until one it passes fitness check
    do {
        mom = floor(gsl_ran_flat(r, -0.5, (POPULATION-1)+0.4999) + 0.5);
        // change seed for better randomization
        gsl_rng_default_seed += time(NULL)^mom;
        gsl_rng_set (r, gsl_rng_default_seed);
        requiredFitness = gsl_ran_flat(r, 0, 1);
    } while(requiredFitness > (thePop.at(mom).get_fitness()/highestW));

    gsl_rng_free(r);

    return mom;
}
示例#2
0
 inline std::vector<std::size_t>
 sample_individuals(const gsl_rng *r, const std::size_t N,
                    const uint_t N2, const bool with_replacement)
 {
     std::vector<std::size_t> rv;
     for (std::size_t i = 0; i < N2; ++i)
         {
             std::size_t ind
                 = std::size_t(gsl_ran_flat(r, 0., double(N)));
             if (!with_replacement)
                 {
                     while (std::find(rv.begin(), rv.end(), ind)
                            != rv.end())
                         {
                             ind = std::size_t(
                                 gsl_ran_flat(r, 0., double(N)));
                         }
                 }
             rv.push_back(ind);
         }
     // sort in descending order
     std::sort(rv.begin(), rv.end(),
               [](size_t i, size_t j) noexcept { return i > j; });
     return rv;
 }
示例#3
0
// pick an individual for reproduction with an outcrossing indiv
int studyPop::pickADad(int chosenMom) {

    // This value will be returned to determine the index of dad in "thePop"
    int dad;

    // perform fitness check for outcrossing in dad
    const gsl_rng_type * T;
    gsl_rng * r;
    gsl_rng_default_seed += time(NULL);
    // Initialize the random number generator
    T = gsl_rng_default;
    r = gsl_rng_alloc (T);
    gsl_rng_set (r, gsl_rng_default_seed);

    double requiredFitnessToOutcross;

    // pick different dad until one it passes fitness check & is also not the same as the mom chosen already
    do {
        do {
            dad = floor(gsl_ran_flat(r, -0.5, (POPULATION-1)+0.4999) + 0.5);
        } while(dad == chosenMom);
        // change seed for more randomization
        gsl_rng_default_seed += time(NULL)^dad;
        gsl_rng_set (r, gsl_rng_default_seed);
        requiredFitnessToOutcross = gsl_ran_flat(r, 0, 1);
    } while(requiredFitnessToOutcross > (((1-K*thePop.at(dad).calcSelfingRate())*thePop.at(dad).get_fitness())/highestDadW));

    // free up the memory taken by the random number generator
    gsl_rng_free(r);

    return dad;
}
示例#4
0
int 
EvidenceManager::populateRandIntegers(gsl_rng* r, int* randInds, INTINTMAP& populateFrom, int size)
{
	double step=1.0/(double)size;
	map<int,int> usedInit;
	map<int,int> temp;
	INTINTMAP_ITER tIter=populateFrom.begin();
	for(int i=0;i<size;i++)
	{
		int tid=tIter->first;
		temp[i]=tid;
		tIter++;
	}
	for(int i=0;i<size;i++)
	{
		double rVal=gsl_ran_flat(r,0,1);
		int rind=(int)(rVal/step);
		while(usedInit.find(rind)!=usedInit.end())
		{
			rVal=gsl_ran_flat(r,0,1);
			rind=(int)(rVal/step);
		}
		usedInit[rind]=0;
		randInds[i]=temp[rind];
	}
	usedInit.clear();
	return 0;
}
示例#5
0
void gendy3_constructor(t_gendyn *x){
	x->g_freqMul = 1.f / sys_getsr();
	x->g_phase = 1.f;	//should immediately decide on new target 
	x->g_amp = 0.0; 
	x->g_nextAmp = 0.0;
	x->g_nextPhase = 0.0;
	x->g_lastPhase = 0.0;
	x->g_interpMult = 1.0;
	x->g_speed = 100; 
	
	x->g_freq = 440.f;
	
	x->g_memorySize = 12;//(int) ZIN0(7);
	if(x->g_memorySize < 1) x->g_memorySize = 1;
	x->g_index = 0;
	x->g_memoryAmp= (float *)calloc(x->g_memorySize, sizeof(float));
	x->g_memoryDur= (float *)calloc(x->g_memorySize, sizeof(float));
	
	//one more in amp list for guard (wrap) element
	x->g_ampList= (float *)calloc((x->g_memorySize + 1), sizeof(float));
	x->g_phaseList= (double *)calloc((x->g_memorySize + 1), sizeof(double));
		
	//initialise to zeroes and separations
	int i = 0;
	for(i = 0; i < x->g_memorySize; ++i) {
		x->g_memoryAmp[i] = 2 * gsl_ran_flat(x->g_rng, 0., 1.) - 1.0;
		x->g_memoryDur[i] = gsl_ran_flat(x->g_rng, 0., 1.);
		x->g_ampList[i] = 2 * gsl_ran_flat(x->g_rng, 0., 1.) - 1.0;
		x->g_phaseList[i] = 1.0; //will be intialised immediately
	}
	
	x->g_memoryAmp[0] = 0.0;	//always zeroed first BP
}
示例#6
0
void gendy2_constructor(t_gendyn *x){
	x->g_freqMul = 1.f / sys_getsr();
	x->g_phase = 1.f;	//should immediately decide on new target 
	x->g_amp = 0.0; 
	x->g_nextAmp = 0.0;
	x->g_speed = 100; 
	
	x->g_memorySize = 12;	//default is 12
	//printf("memsize %d %f", x->g_MemorySize, ZIN0(8));
	if(x->g_memorySize < 1) x->g_memorySize = 1;
	x->g_index = 0;
	x->g_memoryAmp = (float *)calloc(x->g_memorySize, sizeof(float));
	x->g_memoryDur = (float *)calloc(x->g_memorySize,  sizeof(float));
	x->g_memoryAmpStep = (float *)calloc(x->g_memorySize,  sizeof(float));
	x->g_memoryDurStep = (float *)calloc(x->g_memorySize,  sizeof(float));
		
	//initialise to zeroes and separations
	int i = 0;
	for(i = 0; i < x->g_memorySize; ++i) {
		x->g_memoryAmp[i] = 2 * gsl_ran_flat(x->g_rng, 0, 1) - 1.0;
		x->g_memoryDur[i] = gsl_ran_flat(x->g_rng, 0, 1);
		x->g_memoryAmpStep[i] = 2 * gsl_ran_flat(x->g_rng, 0, 1) - 1.0;
		x->g_memoryDurStep[i] = 2 * gsl_ran_flat(x->g_rng, 0, 1) - 1.0;
	}
}
示例#7
0
static void spawn_particle(dust_particle_t * particle)
{
  // setup new particle
  particle->pos.x = gsl_ran_flat(rng, MIN_POS_X, MAX_POS_X);
  particle->pos.y = gsl_ran_flat(rng, MIN_POS_Y, MAX_POS_Y);
  particle->pos.z = gsl_ran_flat(rng, MIN_POS_Z, MAX_POS_Z);
  particle->vel.x = true_wind.x;
  particle->vel.y = true_wind.y;
  particle->vel.z = true_wind.z;
}
示例#8
0
文件: setprior.c 项目: juapebe/HPC
void initialize_prior(PARAM *param, PRIOR *prior, DATA *data, const gsl_rng *r) {
  int i;
  float mean;
  double MAXC = ((double) _MAX_COMP_);
  prior->m_beta = 0.0;
  prior->v_beta = 100.0;
  prior->atrue = 0.1;
  prior->afalse = 1.0 - prior->atrue;

  prior->rho_alpha_prey = 1.0;
  prior->m_alpha_prey = 0.0;
  prior->v_alpha_prey = 100.0;
  for(i=0;i<_MAX_COMP_;i++) prior->gamma_alpha_prey[i] = 1.0 / MAXC;  
  for(i=0;i<_MAX_COMP_;i++) prior->theta_alpha_prey[i] = gsl_ran_gaussian(r, 2.0);  
  for(i=0;i<data->nprey;i++) prior->w_alpha_prey[i] = ((int) gsl_ran_flat(r,0.0,MAXC)); 

  mean = 0.0;
  for(i=0;i<_MAX_COMP_;i++) mean += prior->gamma_alpha_prey[i] * prior->theta_alpha_prey[i];
  for(i=0;i<_MAX_COMP_;i++) prior->theta_alpha_prey[i] -= mean;

  prior->rho_alpha_IP = 1.0;
  prior->m_alpha_IP = 0.0;
  prior->v_alpha_IP = 100.0;
  for(i=0;i<_MAX_COMP_;i++) prior->gamma_alpha_IP[i] = 1.0 / MAXC;  
  /* for(i=0;i<_MAX_COMP_;i++) prior->theta_alpha_IP[i] = gsl_ran_gaussian(r, 2.0);  */
  for(i=0;i<_MAX_COMP_;i++) prior->theta_alpha_IP[i] = 0.0;  
  /* for(i=0;i<data->nIP;i++) prior->w_alpha_IP[i] = ((int) gsl_ran_flat(r,0.0,MAXC)); */
  for(i=0;i<data->nIP;i++) prior->w_alpha_IP[i] = 0; 
  mean = 0.0;
  for(i=0;i<_MAX_COMP_;i++) mean += prior->gamma_alpha_IP[i] * prior->theta_alpha_IP[i];
  for(i=0;i<_MAX_COMP_;i++) prior->theta_alpha_IP[i] -= mean;

  prior->rho_mu = 1.0;
  prior->m_mu = 0.0;
  prior->v_mu = 100.0;
  for(i=0;i<_MAX_COMP_;i++) prior->gamma_mu[i] = 1.0 / MAXC;  
  for(i=0;i<_MAX_COMP_;i++) prior->theta_mu[i] = gsl_ran_gaussian(r, 2.0);  
  for(i=0;i<data->nprey;i++) prior->w_mu[i] = ((int) gsl_ran_flat(r,0.0,MAXC)); 
  mean = 0.0;
  for(i=0;i<_MAX_COMP_;i++) mean += prior->gamma_mu[i] * prior->theta_mu[i];
  for(i=0;i<_MAX_COMP_;i++) prior->theta_mu[i] -= mean;

  prior->rho_eta = 1.0;
  prior->mean_eta = 0.1;
  for(i=0;i<_MAX_COMP_;i++) prior->gamma_eta[i] = 1.0 / MAXC;  
  for(i=0;i<_MAX_COMP_;i++) prior->theta_eta[i] = gsl_ran_exponential(r, prior->mean_eta) + 1.0;  
  for(i=0;i<data->nprey;i++) prior->w_eta[i] = ((int) gsl_ran_flat(r,0.0,MAXC)); 

  prior->rho_eta0 = 1.0;
  prior->mean_eta0 = 0.1;
  for(i=0;i<_MAX_COMP_;i++) prior->gamma_eta0[i] = 1.0 / MAXC;  
  for(i=0;i<_MAX_COMP_;i++) prior->theta_eta0[i] = gsl_ran_exponential(r, prior->mean_eta0) + 1.0;  
  for(i=0;i<data->nprey;i++) prior->w_eta0[i] = ((int) gsl_ran_flat(r,0.0,MAXC)); 
}
示例#9
0
void studyPop::addMutationToImmunityGenes(int whichLocus) {
    int avgNumberOfHostMutations = 2*POPULATION*U_HOST_IMMUNITY;
    int numOfHostMutations;

    // GSL objects to generate random numbers
    const gsl_rng_type * T;
    gsl_rng * r;
    gsl_rng_default_seed += time(NULL);
    T = gsl_rng_default;
    r = gsl_rng_alloc (T);
    gsl_rng_set(r, gsl_rng_default_seed);

    numOfHostMutations = gsl_ran_poisson(r,avgNumberOfHostMutations);

    // Find the alleles in the population to be mutated
    vector<int> indexOfMutations;
    for(int i=0; i<numOfHostMutations ;) {
        gsl_rng_default_seed += time(NULL);
        gsl_rng_set(r, gsl_rng_default_seed);
        int tempIndex = floor(gsl_ran_flat(r, -0.5, (POPULATION-1)+0.4999) + 0.5);
        int q=0;
        for(; q<indexOfMutations.size() ; q++) {
            if(indexOfMutations.at(q) == tempIndex)
                break;
        }
        if(q==indexOfMutations.size()) {
            indexOfMutations.push_back(tempIndex);
            i++;
        }
    }

    // Now we apply mutations to indiv with indices found above
    for(int i=0; i<indexOfMutations.size() ; i++) {
        gsl_rng_default_seed += time(NULL);
        gsl_rng_set(r, gsl_rng_default_seed);
        int whichAllele = floor(gsl_ran_flat(r, -0.5, 1.4999) + 0.5);
        if(whichLocus == 1) {
            thePop.at(indexOfMutations.at(i)).immunityGeneA[(int) whichAllele] += 1;
            thePop.at(indexOfMutations.at(i)).immunityGeneA[(int) whichAllele] %= 2;
        }
        else if(whichLocus == 2) {
            thePop.at(indexOfMutations.at(i)).immunityGeneB[(int) whichAllele] += 1;
            thePop.at(indexOfMutations.at(i)).immunityGeneB[(int) whichAllele] %= 2;
        }
    }
    gsl_rng_default_seed += time(NULL);

    // free up the space taken by the random number generator
    gsl_rng_free(r);
}
示例#10
0
void AlexSim::burstCoincidenceDonor(double scale)
{
    double tstart=t;
    double burstDurationSample=gsl_ran_lognormal(r, mu, sigma);
    double tend = tstart + burstDurationSample;
    double tCoincidenceStart=gsl_ran_flat(r, tstart, tend);
    double tCoincidenceEnd=gsl_ran_flat(r, tCoincidenceStart, tend);
    qDebug()<<"burst at"<<t*1e3<<"ms for"<<burstDurationSample*1e3<<"ms. Donor coincidence after"<<(tCoincidenceStart-tstart)*1e3<<"ms for"<<(tCoincidenceEnd-tCoincidenceStart)*1e3<<"ms with scale parameter"<<scale;

    Photons photonsTemp;
    photonsTemp<<burst(tstart, tend);
    photonsTemp<<donorOnly(tCoincidenceStart,tCoincidenceEnd);
    photonsTemp.sort();
    photons<<photonsTemp;
}
示例#11
0
static int WARN_UNUSED
mutgen_generate_record_mutations(mutgen_t *self, coalescence_record_t *cr)
{
    int ret = -1;
    size_t k, l, branch_mutations;
    double branch_length, position, mu;
    double distance = cr->right - cr->left;
    uint32_t child;

    self->times[cr->node] = cr->time;
    for (k = 0; k < cr->num_children; k++) {
        child = cr->children[k];
        branch_length = cr->time - self->times[child];
        mu = branch_length * distance * self->mutation_rate;
        branch_mutations = gsl_ran_poisson(self->rng, mu);
        for (l = 0; l < branch_mutations; l++) {
            position = gsl_ran_flat(self->rng, cr->left, cr->right);
            assert(cr->left <= position && position < cr->right);
            ret = mutgen_add_mutation(self, child, position);
            if (ret != 0) {
                goto out;
            }
        }
    }
    ret = 0;
out:
    return ret;
}
示例#12
0
double checkReactions(gsl_vector *haz, gsl_vector *residuals, gsl_vector *fast_params, 
                      double deltat,  gsl_vector *sps, gsl_matrix *PostPre)
{
  int i;
  double small_residual = -1000000.0;

  double total_hazard = 0.0;
  for(i=0; i < fast_params->size; i++) {
    if(checkHazard(haz, PostPre, sps, i, deltat) && 
       checkSpecies(PostPre, sps, i))  {
      VSET(residuals, i, small_residual);
    } else if(VGET(residuals, i) < (small_residual + 10000))  {
      total_hazard += VGET(haz, i);
      VSET(residuals, i, log(gsl_ran_flat(r, 0.0, 1.0)));
      VSET(fast_params, i, 0.0);
      //      running_totals1[i]++;
    } else {
      total_hazard += VGET(haz, i);
      VSET(fast_params, i, 0.0);
      //      running_totals1[i]++;
    }
    //printf("%d ", running_totals1[i]);
  }
  //  printf("\n");
  return total_hazard;        
}
示例#13
0
int gslalg_rng_flat_VM ( Word* args, Word& result,
                         int message, Word& local, Supplier s )
{
  result = qp->ResultStorage( s );
  CcReal *res = ((CcReal*) result.addr);
  double resD = 0;
  CcReal *cA = (CcReal*) args[0].addr;
  CcReal *cB = (CcReal*) args[1].addr;
  if( cA->IsDefined() && cB->IsDefined() )
  {
    double a = cA->GetRealval();
    double b = cB->GetRealval();
    if( a <= b )
    {
      resD = gsl_ran_flat(the_gsl_randomgenerator.GetGenerator(), a, b);
      res->Set(true, resD);
    }
    else
    {
      res->Set(false, 0);
    }
  }
  else
    res->Set(false, 0);
  return (0);
}
示例#14
0
文件: gsl.c 项目: MGKhKhD/cvxopt
static PyObject *
uniform(PyObject *self, PyObject *args, PyObject *kwrds)
{
  matrix *obj;
  int i, nrows, ncols = 1;
  double a = 0, b = 1;

  char *kwlist[] = {"nrows", "ncols", "a", "b", NULL};

  if (!PyArg_ParseTupleAndKeywords(args, kwrds, "i|idd", kwlist,
	  &nrows, &ncols, &a, &b)) return NULL;

  if (a>b) PY_ERR(PyExc_ValueError, "a must be less than b");

  if ((nrows<0) || (ncols<0))
    PY_ERR_TYPE("dimensions must be non-negative");

  if (!(obj = (matrix *)Matrix_New(nrows, ncols, DOUBLE)))
    return PyErr_NoMemory();

  gsl_rng_env_setup();
  rng_type = gsl_rng_default;
  rng = gsl_rng_alloc (rng_type);
  gsl_rng_set(rng, seed);

  for (i= 0; i < nrows*ncols; i++)
    MAT_BUFD(obj)[i] = gsl_ran_flat (rng, a, b);

  seed = gsl_rng_get (rng);
  gsl_rng_free(rng);

  return (PyObject *)obj;
}
示例#15
0
double RandomNumberGenerator::triangular(double min, double max, double fmin, double fmax){
  double u = gsl_ran_flat(r,0,1);
  double ratio = (fmax/fmin);
  double slope = (sqrt(1.0+(pow(ratio,2.0)-1.0)*u)-1.0)/(ratio-1.0);

  return slope*(max-min)+min;
}
示例#16
0
  std::vector<int> sfs_from_sample(GSLrng_t * rng,const singlepop_t * pop,const unsigned & nsam)
  {
    map<double,unsigned> mutfreqs;
    unsigned twoN = 2*pop->N;
    for( unsigned i = 0 ; i < nsam ; ++i )
      {
	//pick a random chrom (w/replacement...)
	unsigned chrom = unsigned(gsl_ran_flat(rng->get(),0.,double(twoN)));
	//get pointer to that chrom from the individual
	auto gamete = (chrom%2==0.) ? pop->diploids[chrom/2].first : pop->diploids[chrom/2].second;
	//In this example, there are only neutral mutations, so that's what we'll iterate over
	for( auto m = gamete->mutations.begin() ; m != gamete->mutations.end() ; ++m )
	  {
	    auto pos_itr = mutfreqs.find( (*m)->pos );
	    if( pos_itr == mutfreqs.end() )
	      {
		mutfreqs.insert(std::make_pair((*m)->pos,1));
	      }
	    else
	      {
		pos_itr->second++;
	      }
	  }
      }
    //Now, fill in the SFS, omitting positions that are fixed in the sample
    std::vector<int> __rv(nsam-1,0u);
    for( const auto & __x : mutfreqs )
      {
	if (__x.second < nsam) __rv[__x.second-1]++;
      }
    return __rv;
  }
示例#17
0
文件: dpeta.c 项目: juapebe/HPC
void DP_eta_theta(PARAM *param, PRIOR *prior, DATA *data, const gsl_rng *r, int pid, int *inuse) {
  int i, j, id, accept;
  float Delta, mhratio, newval, scale, tmp_lambda, tmp;
  scale = prior->gamma_eta[pid] / (1.0 - prior->gamma_eta[pid]);
  if(inuse[pid] == 0) {
    newval = gsl_ran_exponential(r, prior->mean_eta) + 1.0;
    Delta = newval - prior->theta_eta[pid];
    prior->theta_eta[pid] = newval;
  }
  else {
    /* metropolis-hastings */
    mhratio = 0.0;
    Delta = gsl_ran_gaussian(r, 1.0);
    if(prior->theta_eta[pid] + Delta <= 1.0 || prior->theta_eta[pid] + Delta > 100.0) {
      accept = 0;
    }
    else {
      for(i=0;i<data->nprey;i++) {
        if(prior->w_eta[i] == pid) {
          for(j=0;j<data->preyNinter[i];j++) {
            id = data->p2i[i][j];
            if(param->Z[data->a2u[id]] && data->d[id] > 0.0) {
              tmp_lambda = param->lambda_true[id];
            // else tmp_lambda = param->lambda_false[id];
            /* if(param->Z[data->a2u[id]]) */
              tmp = data->d[id] < exp(param->lambda_false[id]) && param->lambda_false[id] < param->lambda_true[id] ? exp(param->lambda_false[id]) : data->d[id];

              if(lowMode) {
                mhratio += log_poisson_g_prop(GSL_MIN(_LM_,data->d[id]), exp(tmp_lambda), prior->theta_eta[pid]+Delta) 
			   - log_poisson_g_prop(GSL_MIN(_LM_,data->d[id]), exp(tmp_lambda), prior->theta_eta[pid]);
              }
              else {
                mhratio += log_poisson_g_prop(data->d[id], exp(tmp_lambda), prior->theta_eta[pid]+Delta)
			   - log_poisson_g_prop(data->d[id], exp(tmp_lambda), prior->theta_eta[pid]);
              }


              /* mhratio += log_poisson_g_prop(tmp, exp(tmp_lambda), prior->theta_eta[pid]+Delta)
                          - log_poisson_g_prop(tmp, exp(tmp_lambda), prior->theta_eta[pid]); */
            }
          }
        }
      }
      mhratio += log(gsl_ran_exponential_pdf(prior->theta_eta[pid]+Delta-1.0, prior->mean_eta))
               - log(gsl_ran_exponential_pdf(prior->theta_eta[pid]-1.0, prior->mean_eta));
      // mhratio += -2.0 * (log(prior->theta_eta[pid]+ Delta) - log(prior->theta_eta[pid]));
      accept = gsl_ran_flat(r, 0.0, 1.0) <= GSL_MIN(1.0, exp(mhratio)) ? 1 : 0 ;
    }

    /* if accepted, update param and lambda */
    if(accept) {
      prior->theta_eta[pid] += Delta;
      for(i=0;i<data->nprey;i++) {
        if(prior->w_eta[i] == pid) {
          param->eta[i] += Delta;
        }
      }
    }
  }
}
示例#18
0
文件: bayes_gfl.c 项目: tansey/gfl
double sample_lambda_doublepareto(const gsl_rng *random, double *beta,
                                  int dk_rows, int *dk_rowbreaks, int *dk_cols, double *dk_vals,
                                  double a, double b,
                                  double lam0, double gamma, double lam_walk_stdev)
{
    int i;
    double lam1;
    double sum_term;
    double dotprod;
    double accept_ratio;
    double log_accept_ratio;
    int prev_break;

    lam1 = gsl_sf_exp(gsl_ran_gaussian(random, lam_walk_stdev) + gsl_sf_log(lam0));

    /* Lambda as an inverse scale parameter */
    sum_term = 0;
    prev_break = 0;
    for (i = 0; i < dk_rows; i++){
        dotprod = fabs(vec_dot_beta(dk_rowbreaks[i] - prev_break, dk_cols + prev_break, dk_vals + prev_break, beta));
        sum_term += gsl_sf_log(1 + lam1 * dotprod / gamma) - gsl_sf_log(1 + lam0 * dotprod / gamma);
        prev_break = dk_rowbreaks[i];
    }
    log_accept_ratio = (a - 1 + dk_rows) * (gsl_sf_log(lam1) - gsl_sf_log(lam0)) - b * (lam1 - lam0) - (gamma + 1) * sum_term;

    if(log_accept_ratio < -20)
        return lam0;
    else if(log_accept_ratio > 0)
        return lam1;

    accept_ratio = gsl_sf_exp(log_accept_ratio);
    if (gsl_ran_flat(random, 0, 1) <= accept_ratio)
        return lam1;
    return lam0;    
}
示例#19
0
void ic(double *x, double a, double b, params *p, gsl_rng *rg)
//initial conditions
{
  int i;
  for (i = 0; i < p->paths; ++i)
    x[i] = gsl_ran_flat(rg, a, b);
}
示例#20
0
double adapted_jump(int *pcd, double dt, params *p, gsl_rng *rg)
{
  double ret = 0.0;
  
  if (p->Dp != 0.0) {
      double comp = sqrt((p->Dp)*(p->lambda))*dt;
      if (*pcd <= 0) {
	double ampmean = sqrt((p->lambda)/(p->Dp));
        double r = gsl_ran_flat(rg,0,1);

	//magic...
	//npcd = (int) floor( -log( curand_uniform(l_state) )/lambda/dt + 0.5 );
	*pcd = (int)roundf(-log(r)/(p->lambda)/dt);
	
	if (p->biased)
	  ret = -log(r)/ampmean - comp;
	else
	  ret = -log(r)/ampmean;
      } 
      else{
	*pcd--;
	if (p->biased) 
	  ret = -comp;
	else 
	  ret = 0.0;
      }
    } 

  return ret;
}
示例#21
0
int 
EvidenceManager::populateRandIntegers(gsl_rng* r, INTINTMAP& randInds,int size, int subsetsize)
{
	double step=1.0/(double)size;
	for(int i=0;i<subsetsize;i++)
	{
		double rVal=gsl_ran_flat(r,0,1);
		int rind=(int)(rVal/step);
		while(randInds.find(rind)!=randInds.end())
		{
			rVal=gsl_ran_flat(r,0,1);
			rind=(int)(rVal/step);
		}
		randInds[rind]=0;
	}
	return 0;
}
示例#22
0
static double random_string_cusp_fhigh(double flow, double fhigh, gsl_rng *rng)
{
	const double thetasqmin = pow(fhigh, -2.0 / 3.0);
	const double thetasqmax = pow(flow, -2.0 / 3.0);
	const double thetasq = gsl_ran_flat(rng, thetasqmin, thetasqmax);

	return pow(thetasq, -3.0 / 2.0);
}
示例#23
0
文件: bayes_gfl.c 项目: tansey/gfl
void sample_likelihood_poisson(const gsl_rng *random,
                                int n, int *obs, 
                                int *dk_rowbreaks, int *dk_cols, double *dk_vals,
                                double *s, int **coefs, int *coef_breaks,
                                double *beta)
{
    int i;
    int j;
    int k;
    int row;
    int j_idx;
    double a;
    double lower;
    double upper;
    double left;
    double right;
    
    for(j = 0; j < n; j++)
    {
        if (obs[j] > 0){
            lower = lex_ran_flat(random, 0, gsl_sf_exp(obs[j]*beta[j]));
            lower = gsl_sf_log(lower) / (double)obs[j];
        } else {
            lower = -INFINITY;
        }
        upper = lex_ran_flat(random, 0, beta[j] < -160 ? 1 : gsl_sf_exp(-gsl_sf_exp(beta[j])));
        upper = gsl_sf_log(-gsl_sf_log(upper));
        /* Bound the sampling range */
        for (i = 0; i < coef_breaks[j]; i++)
        {
            /* current row that has a non-zero value for column j */
            row = coefs[j][i];
            
            /* Calculate Dk[i].dot(b_notj), the inner product of the i'th row
               and the beta vector, excluding the j'th column. */
            a = 0;
            for (k = row == 0 ? 0 : dk_rowbreaks[row-1]; k < dk_rowbreaks[row]; k++){
                if (dk_cols[k] == j){
                    j_idx = k;
                } else{
                    a += dk_vals[k] * beta[dk_cols[k]];
                }
            }
            
            /* Find the left and right bounds */
            left = (-s[row] - a) / dk_vals[j_idx];
            right = (s[row] - a) / dk_vals[j_idx];
            if (dk_vals[j_idx] >= 0){
                lower = MAX(lower, left);
                upper = MIN(upper, right);
            } else {
                lower = MAX(lower, right);
                upper = MIN(upper, left);
            }
        }
        beta[j] = gsl_ran_flat(random, lower, upper);
    }
}
示例#24
0
文件: print.c 项目: TAlexPerkins/ssm
/**
 * The key is to understand that: X_resampled[j] = X[select[j]] so select
 * give the index of the resample ancestor...
 * The ancestor of particle j is select[j]
 *
 * With n index: X[n+1][j] = X[n][select[n][j]]
 *
 * Other caveat: D_J_p_X are in [N_DATA+1] ([0] contains the initial conditions)
 * select is in [N_DATA], times is in [N_DATA]
 */
void ssm_sample_traj_print(FILE *stream, ssm_X_t ***D_J_X, ssm_par_t *par, ssm_nav_t *nav, ssm_calc_t *calc, ssm_data_t *data, ssm_fitness_t *fitness, const int index)
{
    int j_sel;
    int n, nn, indn;

    double ran, cum_weights;

    ssm_X_t *X_sel;

    ran=gsl_ran_flat(calc->randgsl, 0.0, 1.0);

    j_sel=0;
    cum_weights=fitness->weights[0];

    while (cum_weights < ran) {
        cum_weights += fitness->weights[++j_sel];
    }

    //print traj of ancestors of particle j_sel;

    //!!! we assume that the last data point contain information'
    X_sel = D_J_X[data->n_obs][j_sel]; // N_DATA-1 <=> data->indn_data_nonan[N_DATA_NONAN-1]
    ssm_print_X(stream, X_sel, par, nav, calc, data->rows[data->n_obs-1], index);

    //printing all ancesters up to previous observation time
    for(nn = (data->ind_nonan[data->n_obs_nonan-1]-1); nn > data->ind_nonan[data->n_obs_nonan-2]; nn--) {
        X_sel = D_J_X[ nn + 1 ][j_sel];
        ssm_print_X(stream, X_sel, par, nav, calc, data->rows[nn], index);
    }

    for(n = (data->n_obs_nonan-2); n >= 1; n--) {
        //indentifying index of the path that led to sampled particule
        indn = data->ind_nonan[n];
        j_sel = fitness->select[indn][j_sel];
        X_sel = D_J_X[ indn + 1 ][j_sel];

        ssm_print_X(stream, X_sel, par, nav, calc, data->rows[indn], index);

        //printing all ancesters up to previous observation time
        for(nn= (indn-1); nn > data->ind_nonan[n-1]; nn--) {
            X_sel = D_J_X[ nn + 1 ][j_sel];
            ssm_print_X(stream, X_sel, par, nav, calc, data->rows[nn], index);
        }
    }

    indn = data->ind_nonan[0];
    j_sel = fitness->select[indn][j_sel];
    X_sel = D_J_X[indn+1][j_sel];

    for(nn=indn; nn>=0; nn--) {
        X_sel = D_J_X[ nn + 1 ][j_sel];
        ssm_print_X(stream, X_sel, par, nav, calc, data->rows[nn], index);
    }

    //TODO nn=-1 (for initial conditions)

}
示例#25
0
文件: Vector.hpp 项目: gviejo/ANIMAT
 void fill_random_vector(gsl_rng* rgen) 
 {
   for (int i = 0; i< _size ; i++) {
     float tmp =float(gsl_ran_flat(rgen, 0, 1));
     setValue(i, tmp);
     std::cout << tmp << " ";
   }
   std::cout << std::endl;
 }
示例#26
0
double* rough_box_prepareAdditionalParams(gsl_rng* rng, double roughness, double shift){
  const int order = 20;
  double* res = new double[order * 2 + 2];
  for (int i = 0; i < 2 * order; i++){
    res[i] = gsl_ran_flat(rng, 0.0, 2.0*M_PI);
  }
  res[2 * order] = roughness;
  res[2 * order + 1] = shift;
  return res;
}
示例#27
0
int 
EvidenceManager::populateRandIntegers(gsl_rng* r, vector<int>& randInds,int size, int subsetsize)
{
	double step=1.0/(double)size;
	map<int,int> usedInit;
	for(int i=0;i<subsetsize;i++)
	{
		double rVal=gsl_ran_flat(r,0,1);
		int rind=(int)(rVal/step);
		while(usedInit.find(rind)!=usedInit.end())
		{
			rVal=gsl_ran_flat(r,0,1);
			rind=(int)(rVal/step);
		}
		usedInit[rind]=0;
		randInds.push_back(rind);
	}
	return 0;
}
示例#28
0
double draw_gamma_or_uniform(const gsl_rng * rng, double shape, double scale) {
    double draw;
    if ((shape > 0.0) && (scale > 0.0)) {
        draw = gsl_ran_gamma(rng, shape,
                scale);
    }
    else {
        double tau_a, tau_b;
        tau_a = fabs(shape);
        tau_b = fabs(scale);
        if (tau_a < tau_b) {
            draw = gsl_ran_flat(rng, tau_a, tau_b);
        }
        else {
            draw = gsl_ran_flat(rng, tau_b, tau_a);
        }
    }
    return draw;
}
示例#29
0
void librdist_uniform(gsl_rng *rng, int argc, void *argv, int bufc, float *buf){
	t_atom *av = (t_atom *)argv;
	if(argc != librdist_getnargs(ps_uniform)){
		return;
	}
	const double a = librdist_atom_getfloat(av);
	const double b = librdist_atom_getfloat(av + 1);
	int i;
	for(i = 0; i < bufc; i++)
	       	buf[i] = (float)gsl_ran_flat(rng, a, b);
}
示例#30
0
extern double dist_uniform(struct _flow *flow, const double minval,
			   const double maxval)
{
#ifdef HAVE_LIBGSL
	gsl_rng * r = flow->r;
	return gsl_ran_flat(r, minval, maxval);
#else
	const double x = rn_uniform_zero_to_one(flow);
	return ((maxval-minval) * x) + minval;
#endif /* HAVE_LIBGSL */
}