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_); }
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_); }
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_); }
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_); }
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; }
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_; }
Real getValue(SampleGenerator<Real> &sampler) { Real val = RiskMeasure<Real>::val_, cvar(0); sampler.sumAll(&val,&cvar,1); cvar += coeff_*xvar_; return cvar; }
Real getValue(SampleGenerator<Real> &sampler) { Real val = RiskMeasure<Real>::val_, ev(0); sampler.sumAll(&val,&ev,1); return xstat_*std::log(ev); }
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)); } }