44 #ifndef ROL_CONVEXCOMBINATIONRISKMEASURE_HPP 45 #define ROL_CONVEXCOMBINATIONRISKMEASURE_HPP 70 typedef typename std::vector<Real>::size_type
uint;
74 std::vector<Teuchos::RCP<RiskMeasure<Real> > >
risk_;
82 TEUCHOS_TEST_FOR_EXCEPTION((lSize!=rSize),std::invalid_argument,
83 ">>> ERROR (ROL::ConvexCombinationRiskMeasure): Convex combination parameter and risk measure arrays have different sizes!");
84 Real sum(0), zero(0), one(1);
85 for (
uint i = 0; i < lSize; ++i) {
86 TEUCHOS_TEST_FOR_EXCEPTION((
lambda_[i]>one ||
lambda_[i]<zero), std::invalid_argument,
87 ">>> ERROR (ROL::ConvexCombinationRiskMeasure): Element of convex combination parameter array out of range!");
88 TEUCHOS_TEST_FOR_EXCEPTION(
risk_[i] == Teuchos::null, std::invalid_argument,
89 ">>> ERROR (ROL::ConvexCombinationRiskMeasure): Risk measure pointer is null!");
92 TEUCHOS_TEST_FOR_EXCEPTION((std::abs(sum-one) > std::sqrt(ROL_EPSILON<Real>())),std::invalid_argument,
93 ">>> ERROR (ROL::ConvexCombinationRiskMeasure): Coefficients do not sum to one!");
108 Teuchos::ParameterList &list
109 = parlist.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"Convex Combination Risk Measure");
111 Teuchos::Array<Real> lambda
112 = Teuchos::getArrayFromStringParameter<Real>(list,
"Convex Combination Parameters");
119 std::ostringstream convert;
121 std::string si = convert.str();
122 Teuchos::ParameterList &ilist = list.sublist(si);
123 std::string name = ilist.get<std::string>(
"Name");
124 parlist_[i].sublist(
"SOL").sublist(
"Risk Measure").set(
"Name",name);
125 parlist_[i].sublist(
"SOL").sublist(
"Risk Measure").sublist(name) = ilist;
133 std::vector<Real> stat, stati;
137 Teuchos::RCP<const Vector<Real> > xptr = xr.
getVector();
146 for (
int j = 0; j < Ni; ++j) {
147 stati[j] = stat[N+j];
152 risk_[i]->reset(x0,xri);
164 std::vector<Real> xstat, xstati, vstat, vstati;
169 Teuchos::RCP<const Vector<Real> > xptr = xr.
getVector();
170 Teuchos::RCP<const Vector<Real> > vptr = vr.getVector();
174 vr.getStatistic(vstat);
179 xri.getStatistic(xstati);
182 for (
int j = 0; j < Ni; ++j) {
183 xstati[j] = xstat[N+j];
184 vstati[j] = vstat[N+j];
186 xri.setStatistic(xstati);
190 risk_[i]->reset(x0,xri,v0,vri);
199 void update(
const Real val,
const Real weight) {
201 risk_[i]->update(val,weight);
215 risk_[i]->update(val,g,weight);
223 std::vector<Real> stat, stati;
226 risk_[i]->getGradient(gri,sampler);
229 for (
uint j = 0; j < stati.size(); ++j) {
230 stat.push_back(
lambda_[i]*stati[j]);
239 risk_[i]->update(val,g,gv,hv,weight);
247 std::vector<Real> stat, stati;
250 risk_[i]->getHessVec(hvri,sampler);
253 for (
uint j = 0; j < stati.size(); ++j) {
254 stat.push_back(
lambda_[i]*stati[j]);
std::vector< Teuchos::ParameterList > parlist_
void checkInputs(void) const
void update(const Real val, const Vector< Real > &g, const Real weight)
Update internal risk measure storage for gradient computation.
void update(const Real val, const Real weight)
Update internal risk measure storage for value computation.
std::vector< Teuchos::RCP< RiskMeasure< Real > > > risk_
std::vector< Real > lambda_
void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x)
Reset internal risk measure storage. Called for value and gradient computation.
virtual void zero()
Set to zero vector.
ConvexCombinationRiskMeasure(Teuchos::ParameterList &parlist)
Constructor.
Defines the linear algebra or vector space interface.
Teuchos::RCP< const Vector< Real > > getVector(void) const
void setStatistic(const Real stat)
void getHessVec(Vector< Real > &hv, SampleGenerator< Real > &sampler)
Return risk measure Hessian-times-a-vector.
Teuchos::RCP< Vector< Real > > dualVector0_
void update(const Real val, const Vector< Real > &g, const Real gv, const Vector< Real > &hv, const Real weight)
Update internal risk measure storage for Hessian-time-a-vector computation.
Real getValue(SampleGenerator< Real > &sampler)
Return risk measure value.
Teuchos::RCP< const StdVector< Real > > getStatistic(void) const
Provides the interface to implement risk measures.
void getGradient(Vector< Real > &g, SampleGenerator< Real > &sampler)
Return risk measure (sub)gradient.
Provides an interface for a convex combination of risk measures.
void reset(Teuchos::RCP< Vector< Real > > &x0, const Vector< Real > &x, Teuchos::RCP< Vector< Real > > &v0, const Vector< Real > &v)
Reset internal risk measure storage. Called for Hessian-times-a-vector computation.
std::vector< Real >::size_type uint