Ejemplo n.º 1
0
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    Real one(1);
    std::vector<Real> myval(5,0), val(5,0);
    myval[0] = RiskMeasure<Real>::val_;
    myval[1] = RiskMeasure<Real>::gv_;
    myval[2] = dval1_;
    myval[3] = dval2_;
    myval[4] = dval3_;
    sampler.sumAll(&myval[0],&val[0],5);

    Real xs2 = xstat_*xstat_;
    Real xs3 = xs2*xstat_;
    Real v02 = val[0]*val[0];
    Real h11 = (val[3]*val[0] - val[2]*val[2])/(v02*xs3) * vstat_;
    Real h12 = (val[1]*val[2] - val[4]*val[0])/(v02*xs2); 

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector1_);
    sampler.sumAll(*scaledGradient1_,*dualVector2_);
    dualVector1_->axpy(one/xstat_,*dualVector2_);
    dualVector1_->scale(one/val[0]);
    dualVector2_->zero();
    sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector2_);
    dualVector1_->axpy(vstat_*val[2]/(xs2*v02)-val[1]/(v02*xstat_),*dualVector2_);
    dualVector2_->zero();
    sampler.sumAll(*scaledGradient2_,*dualVector2_);
    dualVector1_->axpy(-vstat_/val[0],*dualVector2_);

    (Teuchos::dyn_cast<RiskVector<Real> >(hv)).setVector(*dualVector1_);
    (Teuchos::dyn_cast<RiskVector<Real> >(hv)).setStatistic(h11+h12);
  }
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    RiskVector<Real> &hs = Teuchos::dyn_cast<RiskVector<Real> >(hv);
    std::vector<Real> var(2);
    sampler.sumAll(&vec_[0],&var[0],2);

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector_);
    hs.setStatistic(var);
    hs.setVector(*dualVector_);
  }
Ejemplo n.º 3
0
    void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
        Real val = RiskMeasure<Real>::val_, ev(0), one(1);
        sampler.sumAll(&val,&ev,1);

        sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector1_);
        dualVector1_->scale(one/ev);

        (Teuchos::dyn_cast<RiskVector<Real> >(g)).setVector(*dualVector1_);
    }
Ejemplo n.º 4
0
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    RiskVector<Real> &hs = Teuchos::dyn_cast<RiskVector<Real> >(hv);
    Real val = RiskMeasure<Real>::val_, var(0), one(1);
    sampler.sumAll(&val,&var,1);

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector_);
    var *= coeff_/(one-prob_);
    hs.setStatistic(var);
    hs.setVector(*dualVector_);
  }
Ejemplo n.º 5
0
 void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
   RiskVector<Real> &gs = Teuchos::dyn_cast<RiskVector<Real> >(g);
   Real val = RiskMeasure<Real>::val_, var(0), one(1);
   sampler.sumAll(&val,&var,1);
   
   sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector_);
   var *= -coeff_/(one-prob_);
   var += coeff_;
   gs.setStatistic(var);
   gs.setVector(*dualVector_); 
 }
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val = RiskMeasure<Real>::val_;
   Real dev = 0.0;
   sampler.sumAll(&val,&dev,1);
   std::vector<Real> pval_sum(NumMoments_);
   sampler.sumAll(&(pval_)[0],&pval_sum[0],NumMoments_);
   for ( uint p = 0; p < NumMoments_; p++ ) {
     dev += coeff_[p] * std::pow(pval_sum[p],1.0/order_[p]);
   }
   return dev;
 }
 void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
   Real half(0.5);
   RiskVector<Real> &gs = Teuchos::dyn_cast<RiskVector<Real> >(g);
   std::vector<Real> var(2);
   sampler.sumAll(&vec_[0],&var[0],2);
   
   sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector_);
   var[0] += half*coeff_;
   var[1] += half*coeff_;
   gs.setStatistic(var);
   gs.setVector(*dualVector_); 
 }
 void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
   RiskVector<Real> &gs = Teuchos::dyn_cast<RiskVector<Real> >(g);
   std::vector<Real> var(size_);
   sampler.sumAll(&vec_[0],&var[0],size_);
   
   sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector_);
   for (int i = 0; i < size_; i++) {
     var[i] += coeff_[i];
   }
   gs.setStatistic(var);
   gs.setVector(*dualVector_); 
 }
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    RiskVector<Real> &hs = Teuchos::dyn_cast<RiskVector<Real> >(hv);
    std::vector<Real> var(size_);
    sampler.sumAll(&vec_[0],&var[0],size_);

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector_);
//    for (int i = 0; i < size_; i++) {
//      var[i] *= coeff_[i]/(1.0-prob_[i]);
//    }
    hs.setStatistic(var);
    hs.setVector(*dualVector_);
  }
 void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
   sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector1_);
   std::vector<Real> pval_sum(NumMoments_);
   sampler.sumAll(&(pval_)[0],&pval_sum[0],NumMoments_);
   Teuchos::RCP<Vector<Real> > pg;
   for ( uint p = 0; p < NumMoments_; p++ ) {
     if ( pval_sum[p] > 0.0 ) {
       pg = (pg_[p])->clone();
       sampler.sumAll(*(pg_[p]),*pg);
       dualVector1_->axpy(coeff_[p]/std::pow(pval_sum[p],1.0-1.0/order_[p]),*pg);
     }
   }
   // Set RiskVector
   (Teuchos::dyn_cast<RiskVector<Real> >(g)).setVector(*dualVector1_);
 }
Ejemplo n.º 11
0
 void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
   Real one(1);
   // Perform sum over batches
   std::vector<Real> myval(2,0), val(2,0);
   myval[0] = RiskMeasure<Real>::val_;
   myval[1] = RiskMeasure<Real>::gv_;
   sampler.sumAll(&myval[0],&val[0],2);
   sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector1_);
   // Compute partial derivatives
   Real gstat = std::log(myval[0]) - myval[1]/(myval[0]*xstat_);
   dualVector1_->scale(one/myval[0]);
   // Set partial derivatives in g vector
   (Teuchos::dyn_cast<RiskVector<Real> >(g)).setVector(*dualVector1_);
   (Teuchos::dyn_cast<RiskVector<Real> >(g)).setStatistic(gstat);
 }
  void getGradient(Vector<Real> &g, SampleGenerator<Real> &sampler) {
    RiskVector<Real> &gs = Teuchos::dyn_cast<RiskVector<Real> >(g);

    std::vector<Real> mygval(3,0.0), gval(3,0.0);
    mygval[0] = RiskMeasure<Real>::val_;
    mygval[1] = valLam_;
    mygval[2] = valMu_;
    sampler.sumAll(&mygval[0],&gval[0],3);

    std::vector<Real> stat(2,0.0);
    stat[0] = thresh_ + gval[0] + gval[1];
    stat[1] = (Real)1 + gval[2];
    gs.setStatistic(stat);

    sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector_);
    gs.setVector(*dualVector_);
  }
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val  = RiskMeasure<Real>::val_, cvar(0);
   sampler.sumAll(&val,&cvar,1);
   for (int i = 0; i < size_; i++) {
     cvar += coeff_[i]*xvar_[i];
   }
   return cvar;
 }
Ejemplo n.º 14
0
    void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
        Real one(1);
        std::vector<Real> myval(2), val(2);
        myval[0] = RiskMeasure<Real>::val_;
        myval[1] = RiskMeasure<Real>::gv_;
        sampler.sumAll(&myval[0],&val[0],2);

        sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector1_);

        sampler.sumAll(*scaledGradient_,*dualVector2_);
        dualVector1_->axpy(coeff_,*dualVector2_);
        dualVector1_->scale(one/val[0]);

        dualVector2_->zero();
        sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector2_);
        dualVector1_->axpy(coeff_*val[1]/(val[0]*val[0]),*dualVector2_);

        (Teuchos::dyn_cast<RiskVector<Real> >(hv)).setVector(*dualVector1_);
    }
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    RiskVector<Real> &hs = Teuchos::dyn_cast<RiskVector<Real> >(hv);

    std::vector<Real> myhval(5,0.0), hval(5,0.0);
    myhval[0] = RiskMeasure<Real>::val_;
    myhval[1] = valLam_;
    myhval[2] = valLam2_;
    myhval[3] = valMu_;
    myhval[4] = valMu2_;
    sampler.sumAll(&myhval[0],&hval[0],5);

    std::vector<Real> stat(2,0.0);
    stat[0] = (vlam_ * hval[1] + vmu_ * hval[0] + hval[2])/xlam_;
    stat[1] = (vlam_ * hval[0] + vmu_ * hval[3] + hval[4])/xlam_;
    hs.setStatistic(stat);

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector_);
    hs.setVector(*dualVector_);
  }
  void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
    Real val = RiskMeasure<Real>::val_;
    Real ev  = 0.0;
    sampler.sumAll(&val,&ev,1);

    Real gv  = RiskMeasure<Real>::gv_;
    Real egv = 0.0;
    sampler.sumAll(&gv,&egv,1);

    sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector1_);

    sampler.sumAll(*scaledGradient_,*dualVector2_);
    dualVector1_->plus(*dualVector2_);
    dualVector1_->scale(1.0/ev);

    dualVector2_->zero();
    sampler.sumAll(*(RiskMeasure<Real>::g_),*dualVector2_);
    dualVector1_->axpy(egv/(ev*ev),*dualVector2_);

    (Teuchos::dyn_cast<RiskVector<Real> >(hv)).setVector(*dualVector1_);
  }
 void getHessVec(Vector<Real> &hv, SampleGenerator<Real> &sampler) {
   sampler.sumAll(*(RiskMeasure<Real>::hv_),*dualVector1_);
   std::vector<Real> pval_sum(NumMoments_);
   sampler.sumAll(&(pval_)[0],&pval_sum[0],NumMoments_);
   std::vector<Real> pgv_sum(NumMoments_);
   sampler.sumAll(&(pgv_)[0],&pgv_sum[0],NumMoments_);
   Real c = 0.0;
   for ( uint p = 0; p < NumMoments_; p++ ) {
     if ( pval_sum[p] > 0.0 ) {
       sampler.sumAll(*(pg_[p]),*dualVector2_);
       sampler.sumAll(*(pg0_[p]),*dualVector3_);
       sampler.sumAll(*(phv_[p]),*dualVector4_);
       c = coeff_[p]*(pgv_sum[p]/std::pow(pval_sum[p],2.0-1.0/order_[p]));
       dualVector1_->axpy(c,*dualVector3_);
       c = coeff_[p]/std::pow(pval_sum[p],1.0-1.0/order_[p]);
       dualVector1_->axpy(c,*dualVector2_);
       dualVector1_->axpy(c,*dualVector4_);
     }
   }
   // Set RiskVector
   (Teuchos::dyn_cast<RiskVector<Real> >(hv)).setVector(*dualVector1_);
 }
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val  = RiskMeasure<Real>::val_, cvar(0), half(0.5);
   sampler.sumAll(&val,&cvar,1);
   cvar += half*coeff_*(xvar_[0] + xvar_[1]);
   return cvar;
 }
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val = RiskMeasure<Real>::val_;
   Real ev  = 0.0;
   sampler.sumAll(&val,&ev,1);
   return std::log(ev);
 }
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val = RiskMeasure<Real>::val_, gval = 0.0;
   sampler.sumAll(&val,&gval,1);
   return xlam_*(thresh_ + gval) + xmu_;
 }
Ejemplo n.º 21
0
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val  = RiskMeasure<Real>::val_, cvar(0);
   sampler.sumAll(&val,&cvar,1);
   cvar += coeff_*xvar_;
   return cvar;
 }
Ejemplo n.º 22
0
 Real getValue(SampleGenerator<Real> &sampler) {
   Real val = RiskMeasure<Real>::val_, ev(0);
   sampler.sumAll(&val,&ev,1);
   return xstat_*std::log(ev);
 }
Ejemplo n.º 23
0
void WorldParserObj::CreateObstacle(const std::string& line)
{
	if(line.find("c ") == 0)
	{
		char r[255],g[255],b[255],t[255];
		sscanf(line.c_str(),"c %s %s %s %s",r,g,b,t);
		//manager_.SetNextColor(strtod (r, NULL), strtod(g, NULL), strtod(b, NULL));
		//manager_.SetNextTransparency(strtod (t, NULL));
		return;
	}
	vector<long int> indices;
	vector<long int> normalindices;
    T_Point points;
	for(int i =0; i<1; ++i)
	{
		string ligne = doubleSlash(line);
		ligne=remplacerSlash(ligne); //On remplace les '/' par des espaces, ex : pour "f 1/2/3 4/5/6 7/8/9" on obtiendra "f 1 2 3 4 5 6 7 8 9"
		vector<string> termes=splitSpace(ligne.substr(2)); //On éclate la chaîne en ses espaces (le substr permet d'enlever "f ")
		int ndonnees=(int)termes.size()/3;
		for(int i=0; i <ndonnees;i++) //On aurait très bien pu mettre i<ndonnees mais je veux vraiment limiter à 3 ou 4
		{
			long int idx = (strtol(termes[i*3].c_str(),NULL, 10)) - 1;
			long int idn = (strtol(termes[i*3+2].c_str(),NULL, 10)) - 1;
			std::vector<long int>::iterator it = indices.begin();
			it = find (indices.begin(), indices.end(), idx);
			if(it == indices.end())
			{
				indices.push_back(idx);
				points.push_back(points_[(int)idx]);
			}
			it = find (normalindices.begin(), normalindices.end(), idn);
			if(it == normalindices.end())
			{
				normalindices.push_back(idn);
			}
		}
	}

	Vector3d p1(points[0]);
	Vector3d p2(points[1]);
	Vector3d p3(points[2]);

	Vector3d u_(p3-p1);
	Vector3d v_(p2-p1);
	if(abs( u_.dot(v_)) > 0.001) { v_ = u_; u_ = p2-p1;}
	//we need convex hull of this crap
	Vector3d normal (u_.cross(v_));

	normals_[(int)normalindices[0]];

    SampleGenerator * generator = SampleGenerator::GetInstance();
    Obstacle * obstacle;

    if(normal.dot(normals_[(int)normalindices[0]]) > 0 )
	{
        generator->AddObstacle(new Obstacle(p1, p2, p3));
	}
	else
	{
        generator->AddObstacle(new Obstacle(p3, p2, p1));
    }
}