Esempio n. 1
0
static void SamplesAlloc(cThis *t, Samples *samples)
{
#define FIRST -INT_MAX
#define MarkLast(x) (x | Marked(INT_MAX))

#include "KorobovCoeff.c"

  number nx, nf;

  if( samples->sampler == SampleKorobov ) {
    enum { max = Elements(prime) - 2 };
    cint n = IMin(2*samples->n - 1, MAXPRIME);
    int i = Hash(n), p;
    count shift = 2 + NegQ(n - 1000);

    while( i = IMin(IDim(i), max),
           n > (p = prime[i + 1]) || n <= prime[i] ) {
      cint d = (n - Unmark(p)) >> ++shift;
      i += Min1(d);
    }

    samples->coeff = coeff[i][t->ndim - KOROBOV_MINDIM];
    samples->neff = p = Unmark(p);
    samples->n = p/2 + 1;
  }

  nx = t->ndim*(samples->n + 1);		/* need 1 for extrapolation */
  nf = t->ncomp*(samples->n + 1);

  Alloc(samples->x, nx + nf + t->ncomp + t->ncomp);
  samples->f = samples->x + nx;
}
Esempio n. 2
0
inline int MinValuePruning(Board* state, int turn, int alpha, int beta, int level, clock_t st){
    if(CutOffTest1(state, level, st)){        
        return state->getValue();
    }
    
    BoardQueue *q;
    q = state->successor(turn);
    //    cout << endl;
    while(!q->isEmpty()){
        Board* s = q->dequeue();
        beta = Min1(beta, MaxValuePruning(s,changeTurn1(turn), alpha, beta, level, st));
        delete s;
        if(beta <= alpha){
            while(!q->isEmpty()){
                Board* s = q->dequeue();
                delete s;
            }
            delete q;
            return alpha;
        }
        //        cout << "Minimum : " << beta;
        //        s->draw();
    }

    delete q;
    return beta;
}
Esempio n. 3
0
static void SamplesAlloc(Samples *samples)
{
#define FIRST -INT_MAX
#define MarkLast(x) (x | Marked(INT_MAX))

#include "KorobovCoeff.c"

  count nx, nf;

  if( samples->sampler == SampleKorobov ) {
    enum { max = Elements(prime) - 2 };
    cint n = IMin(2*samples->n - 1, MAXPRIME);
    int i = Hash(n), p;
    count shift = 2 + NegQ(n - 1000);

    while( i = IMin(IDim(i), max),
           n > (p = prime[i + 1]) || n <= prime[i] ) {
      cint d = (n - Unmark(p)) >> ++shift;
      i += Min1(d);
    }

    samples->coeff = coeff[i][ndim_ - KOROBOV_MINDIM];
    samples->neff = p = Unmark(p);
    samples->n = p/2 + 1;
  }

  nx = ndim_*(samples->n + 1);		/* need 1 for extrapolation */
  nf = ncomp_*(samples->n + 1);

  Allocate(samples->x, nx + nf + ncomp_ + ncomp_);
  samples->f = samples->x + nx;
  samples->avg = samples->f + nf;
  samples->err = samples->avg + ncomp_;
  ResClear(samples->err);

  samples->weight = 1./samples->neff;
}
Esempio n. 4
0
void Reassign_Weight() {
  int i,j;
  int is,id;
  double sumprob,maxprob,minprob;

  for (i=1;i<(nbin+1);i++) {
    if (tmpnpar[i]!=0) {
      sumprob=0;
      for (j=1;j<(tmpnpar[i]+1);j++) {
        sumprob+=tmppar[i][j].prob;
      }
      if (sumprob!=0) {
        maxprob=sumprob/npar[i]*sqrt(mmratio);
        minprob=sumprob/npar[i]/sqrt(mmratio);
        Min1(i);
        while (tmppar[i][tmpnpar[i]].prob<minprob) {
          Min2(i);
          COMB(i);
          Min1(i);
        }
        Max(i);
        while (tmppar[i][1].prob>maxprob) {
          SPLIT(i);
          Max(i);
        }
        while (tmpnpar[i]>npar[i]) {
          Min1(i);
          Min2(i);
          COMB(i);
        }
        while (tmpnpar[i]<npar[i]) {
          Max(i);
          SPLIT(i);
        }
        for (j=1;j<(npar[i]+1);j++) {
          par[i][j].prob=tmppar[i][j].prob;
          par[i][j].coord=tmppar[i][j].coord;
          par[i][j].numb=tmppar[i][j].numb;
          par[i][j].tb0=tmppar[i][j].tb0;
          par[i][j].distA=tmppar[i][j].distA;
          par[i][j].distB=tmppar[i][j].distB;
        }
      }
    }
    else {
      for (j=1;j<(npar[i]+1);j++) {
        if (Fava[0]!=0) {
          par[i][j].numb=Fava[Fava[0]];
          Fava[0]-=1;
        }
        else {
          Fexc[0].i+=1;
          Fexc[0].j+=1;
          Fexc[Fexc[0].i].i=i;
          Fexc[Fexc[0].i].j=j;
          par[i][j].numb=Fexc[0].i+nallpar;
        }
       }
      Make_Ghost(i);
    }
  }

  while(Fexc[0].i!=0) {
    if (Fexc[0].i!=Fava[0]) {
      printf("Fava=%d\tFexc=%d!\n",Fava[0],Fexc[0].i);
      for (j=1;j<(Fava[0]+1);j++) {
        printf("Fava[%d]=%d\n",j,Fava[j]);
      }
      printf("Something is wrong!\n");
      exit(1);
    }
    is=Fexc[0].i;
    id=Fava[is];
    par[Fexc[is].i][Fexc[is].j].numb=id;
    is+=nallpar;
    free(rx_states[id-1]);
    rx_states[id-1]=(int *)malloc(nspecies*sizeof(int));
    memcpy(rx_states[id-1],rx_states[is-1],nspecies*sizeof(int));
    free(rx_states[is-1]);
    rx_states[is-1]=(int *)malloc(nspecies*sizeof(int));

    Fexc[0].i-=1;
    Fexc[0].j-=1;
    Fava[0]-=1;
  }
  return;
}