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) { 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) { 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_); }
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 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_); }
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_, 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); }
Real getValue(SampleGenerator<Real> &sampler) { Real val = RiskMeasure<Real>::val_, gval = 0.0; sampler.sumAll(&val,&gval,1); return xlam_*(thresh_ + gval) + xmu_; }