Ejemplo n.º 1
0
/* Samples either one change point or one probability */
void sampleMixed(const gsl_rng *r,
		 parameters* p, int nPar,
		 intparameters *ip, int nIPar) {
  static int hello=1;
  double pr=gsl_rng_uniform(r);
  int moveK=pr<mixingRatio;
  const int *CDFdata=getData(), nCDFdata=getNdata();

  if(hello) fprintf(OUT, "sampleMixed()...\n"), hello=0;

  /* Set proposed changepoint locations and probabilities to current
     values.*/
  resetProposals(p, nPar, ip, nIPar);

  /* Assuming there is NO changepoint */
  if(nIPar<=0) moveK=0;
  if(moveK) {
    double pJump=0.1;
    /* Which k shall be moved? */
    int indK=gsl_rng_uniform_int(r, nIPar);
    int kDown=(indK-1>=0)?getIntParameter(ip,indK-1):0;
    int kUp=(indK+1<nIPar)?getIntParameter(ip,indK+1):getNdata();
    int kNew;
    int succ0, succ1;
    int fail0, fail1;
    double p0, p1;


    setIntMin(ip, indK, kDown);
    setIntMax(ip, indK, kUp);

    if(gsl_rng_uniform(r)>=pJump) {
      /*Move only one parameter by width */
      proposeIntConstrainedAB(r, ip, indK, 1);
    } else {
      proposeIntShiftInterval(r, ip, indK, 1);
    }
      /* Update probabilities */
      kNew=getIntProposal(ip,indK);

      succ0=succInterval(CDFdata, kDown, kNew);
      succ1=succInterval(CDFdata, kNew, kUp);
      fail0=kNew-kDown-succ0;
      fail1=kUp-kNew-succ1;
      p0=gsl_ran_beta(r, succ0, fail0);
      p1=gsl_ran_beta(r, succ1,fail1);

      setProposal(p, indK, p0);
      setProposal(p, indK+1, p1);
  }
  else {
    sampleProbabilities(r, CDFdata, nCDFdata, p, nPar, ip, nIPar);
  }
}
Ejemplo n.º 2
0
/* Set int parameters to specific locations, estimate probabilities */
void initialiseLocationsAndProbs(intparameters *ip, parameters *p,
				 const int *k0, const double*p0,
				 int n) {
  int i;

  for(i=0; i<n; i++) {
    setIntParameter(ip, i, k0[i]);
    setIntProposal(ip, i, k0[i]);
    
    setParameter(p, i, p0[i]);
    setProposal(p, i, p0[i]);
  }

  setParameter(p, n, p0[n]);
  setProposal(p, n, p0[n]);
}
Ejemplo n.º 3
0
/**
	Applique les changements au devis/facture
  */
void DialogInvoice::apply() {
	/// Si on est en mode Edition
	if(m_DialogState == EDIT){
		QString mess;
		if(m_DialogType == PROPOSAL_TYPE) mess = tr("Voulez-vous vraiment modifier la proposition commerciale ?");
		else mess = tr("Voulez-vous vraiment modifier la facture ?");
		int ret = QMessageBox::warning(this, tr("Attention"), mess, QMessageBox::Yes, QMessageBox::No | QMessageBox::Default);
		if(ret == QMessageBox::Yes){
			// modification des articles
			if(m_DialogType == PROPOSAL_TYPE){
				removeProposalItems();
				updateProposalItems();
				setProposal(m_DialogState);
				//Demande le rafraichissement des listes
				emit askRefreshProposalList();
			}
			else{
				removeInvoiceItems();
				updateInvoiceItems();
				setInvoice(m_DialogState);
				//Demande le rafraichissement des listes
				emit askRefreshInvoiceList();
			}
		}//End modif
	}

	/// Sinon en mode creation
	else{
		if(m_DialogType == PROPOSAL_TYPE){
			// Ajoute la proposition
			setProposal(m_DialogState);
			// Ajout des articles
			updateProposalItems();
			//Demande le rafraichissement des listes
			emit askRefreshProposalList();
		}
		else{
			// Ajoute la facture
			setInvoice(m_DialogState);
			// Ajout des articles
			updateInvoiceItems();
			//Demande le rafraichissement des listes
			emit askRefreshInvoiceList();
		}
	}
}
Ejemplo n.º 4
0
/* Selects changepoint position and adds new changepoint before or after */
void sampleDeath(const gsl_rng *r,
		 parameters* p, int actP, int nPar,
		 intparameters *ip, int actIP, int nIPar) {
  /* select change point that will be deleted */
  int kIndex=gsl_rng_uniform_int(r, actIP);
  int kDown, kUp;
  int succ, fail;
  /* Open probabilities that replaces probabilities 'left' and 'right'
     of deleted changepoint.*/
  double pNew;
  int i;
  static int hello=1;
  const int*CDF=getData(), nCDF=getNdata();
  double alpha=getAlpha(), beta=getBeta();

  if(hello) fprintf(OUT, "sampleDeath()\n"), hello=0;

  /*Copy kIndex parameters unchanged */
  copyIntOrg2Prop(ip, kIndex);

  /* Omit kIndex */
  for(i=kIndex; i<nIPar-1; i++) {
    setIntProposal(ip, i, getIntParameter(ip,i+1));
  }

  /*Copy kIndex double parameters unchanged */
  copyOrg2Prop(p, kIndex);

  kDown=(kIndex<=0)?0:getIntParameter(ip, kIndex-1);
  kUp=(kIndex==actIP)?nCDF-1:getIntParameter(ip,kIndex)-1;
  succ=succInterval(CDF, kDown, kUp), fail=failInterval(CDF, kDown, kUp);
  pNew=gsl_ran_beta(r, succ+alpha+1,fail+beta+1);
  setProposal(p, kIndex, pNew);

  /* Balance with corresponding birth move */
  proposalScale=(double)kUp-kDown;

  for(i=kIndex+1; i<nPar-1; i++) {
    setProposal(p, i, getParameter(p,i+1));
  }
}
Ejemplo n.º 5
0
/* Set int parameters to specific locations, estimate probabilities */
void initialiseLocations(intparameters *ip, 
			  const int *k0, const int *CDFdata, int nCDF,
			  parameters *p, int n) {
  int i;
  int succ, fail;

  for(i=0; i<n; i++) {
    int kPrev=(i-1>=0)?k0[i-1]:0;
    setIntParameter(ip, i, k0[i]);
    setIntProposal(ip, i, k0[i]);

    succ=succInterval(CDFdata, k0[i], kPrev);
    fail=k0[i]-kPrev-succ;
    setParameter(p, i, (double)succ/(succ+fail));
    setProposal(p, i, (double)succ/(succ+fail));
  }
  succ=succInterval(CDFdata, nCDF, k0[n-1]);
  fail=nCDF-k0[n-1]-succ;
  setParameter(p, n, (double)succ/(succ+fail));
  setProposal(p, n, (double)succ/(succ+fail));
}
Ejemplo n.º 6
0
/* Sample probabilities according to successes and failures */
void sampleProbabilities(const gsl_rng *r,
			 const int *CDFdata, int nCDFdata,
			 parameters *p, int nPar, const intparameters *ip, int nIPar) {
  int k;
  for(k=0; k<nPar; k++) {
    int k0=(k<=0)?0:getIntProposal(ip,k-1);
    int k1=(k<nIPar)?getIntProposal(ip,k):nCDFdata-1;
    int success=succInterval(CDFdata, k0, k1)/* (k0<=0)?CDFdata[k1-1]:CDFdata[k1-1]-CDFdata[k0-1] */;
    int failures=k1-k0-success;
    double estP;
    double alpha=getAlpha(), beta=getBeta();

    estP=gsl_ran_beta(r, success+alpha+1, failures+beta+1);
    /* fprintf(OUT, "p=%g\n", estP); */
    setProposal(p, k, estP);
  }
}
Ejemplo n.º 7
0
/* Selects changepoint position and adds new changepoint before or after */
void sampleBirth(const gsl_rng *r,
		 parameters* p, int actP, int nPar,
		 intparameters *ip, int actIP, int nIPar) {
  /* select parameter */
  int kIndex=gsl_rng_uniform_int(r, actIP+1);
  int kDown=(kIndex<=0)?0:getIntParameter(ip,kIndex-1);
  int kUp=(kIndex==actIP)?getNdata()-1:getIntParameter(ip,kIndex)-1;

  /*sample new change point*/
  int kNew;
  int i;
  static int hello=1;
  const int *CDF=getData(), nCDF=getNdata();
  int succ0, succ1, fail0, fail1;
  double p0, p1;
  double alpha=getAlpha(), beta=getBeta();

  /* Adding the first changepoint */
  if(actIP==0) {
    /* k must be between 1 and nCDF-1*/
    int kNew=gsl_rng_uniform_int(r,nCDF-1)+1;

    /* Successes and failures before and after new changepoint kNew
       are used for sampling p0 and p1... */
    succ0=succInterval(CDF, 0, kNew), fail0=failInterval(CDF, 0, kNew);
    succ1=succInterval(CDF, kNew, nCDF), fail1=failInterval(CDF, kNew, nCDF);

    /* ... from beta distributions. */
    p0=gsl_ran_beta(r, succ0+1+alpha, fail0+beta+1);
    p1=gsl_ran_beta(r, succ1+1+alpha, fail1+beta+1);

    /* Set new proposal */
    setIntProposal(ip, 0, kNew);
    setProposal(p,0,p0);
    setProposal(p,1,p1);

    /* Balance with corresponding death move */
    proposalScale=1/((double)(nCDF-1));
    return;
  }

  /* Find kUp and kDown that are more than one data point apart. */
  while(kUp-kDown<=1) {
    kIndex=gsl_rng_uniform_int(r, actIP+1);
    kDown=(kIndex<=0)?0:getIntParameter(ip,kIndex-1);
    kUp=(kIndex==actIP)?getNdata()-1:getIntParameter(ip,kIndex)-1;
  }

  /* Balance with corresponding death move */
  proposalScale=1/((double)(kUp-kDown));

  do {
    kNew=kDown+gsl_rng_uniform_int(r, kUp-kDown);
  }while (kNew==0);

  if(hello) fprintf(OUT, "sampleBirth()\n"), hello=0;

  /*Copy kIndex parameters unchanged */
  copyIntOrg2Prop(ip, kIndex);

  /* Insert new changepoint */
  setIntProposal(ip, kIndex, kNew);

  /* Shift changepoints after inserted changepoint. */
  for(i=kIndex+1; i<nIPar; i++) {
    setIntProposal(ip, i, getIntParameter(ip,i-1));
  }

  /* Now copy kIndex open probabilities. */
  if(kIndex-1>0) copyOrg2Prop(p, kIndex);

  /* Sample open probabilities for the segments 'left' and 'right' of
     the new changepoint. */
  succ0=succInterval(CDF, kDown, kNew), fail0=failInterval(CDF, kDown, kNew);
  succ1=succInterval(CDF, kNew, kUp), fail1=failInterval(CDF, kNew, kUp);
  p0=gsl_ran_beta(r, succ0+alpha+1, fail0+beta+1);
  p1=gsl_ran_beta(r, succ1+alpha+1, fail1+beta+1);

  setProposal(p, kIndex, p0);
  setProposal(p, kIndex+1, p1);

  /* Shift the remaining open probabilities. */
  for(i=kIndex+2; i<nPar; i++) {
    double pI=getParameter(p,i-1);
    setProposal(p, i, pI);
  }
}