1 // @HEADER 2 // ************************************************************************ 3 // 4 // Rapid Optimization Library (ROL) Package 5 // Copyright (2014) Sandia Corporation 6 // 7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 8 // license for use of this work by or on behalf of the U.S. Government. 9 // 10 // Redistribution and use in source and binary forms, with or without 11 // modification, are permitted provided that the following conditions are 12 // met: 13 // 14 // 1. Redistributions of source code must retain the above copyright 15 // notice, this list of conditions and the following disclaimer. 16 // 17 // 2. Redistributions in binary form must reproduce the above copyright 18 // notice, this list of conditions and the following disclaimer in the 19 // documentation and/or other materials provided with the distribution. 20 // 21 // 3. Neither the name of the Corporation nor the names of the 22 // contributors may be used to endorse or promote products derived from 23 // this software without specific prior written permission. 24 // 25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 // 37 // Questions? Contact lead developers: 38 // Drew Kouri (dpkouri@sandia.gov) and 39 // Denis Ridzal (dridzal@sandia.gov) 40 // 41 // ************************************************************************ 42 // @HEADER 43 44 #ifndef HS_PROBLEM_016_HPP 45 #define HS_PROBLEM_016_HPP 46 47 #include "ROL_NonlinearProgram.hpp" 48 49 namespace HS { 50 51 namespace HS_016 { 52 template<class Real> 53 class Obj { 54 public: 55 template<class ScalarT> value(const std::vector<ScalarT> & x,Real & tol)56 ScalarT value( const std::vector<ScalarT> &x, Real &tol ) { 57 ScalarT a = x[1]-x[0]*x[0]; 58 ScalarT b = 1-x[0]; 59 return 100*a*a+b*b; 60 } 61 }; 62 63 template<class Real> 64 class InCon { 65 public: 66 template<class ScalarT> value(std::vector<ScalarT> & c,const std::vector<ScalarT> & x,Real & tol)67 void value( std::vector<ScalarT> &c, 68 const std::vector<ScalarT> &x, 69 Real &tol ) { 70 c[0] = x[0] + x[1]*x[1]; 71 c[1] = x[0]*x[0] + x[1]; 72 } 73 }; 74 } 75 76 77 template<class Real> 78 class Problem_016 : public ROL::NonlinearProgram<Real> { 79 80 81 82 typedef ROL::Vector<Real> V; 83 typedef ROL::Objective<Real> OBJ; 84 typedef ROL::Constraint<Real> CON; 85 typedef ROL::NonlinearProgram<Real> NP; 86 87 public: 88 Problem_016()89 Problem_016() : NP( dimension_x() ) { 90 NP::setLower(0,-2); 91 NP::setUpper(0,0.5); 92 NP::setUpper(1,1.0); 93 } 94 dimension_x()95 int dimension_x() { return 2; } dimension_ci()96 int dimension_ci() { return 2; } 97 getObjective()98 const ROL::Ptr<OBJ> getObjective() { 99 return ROL::makePtr<ROL::Sacado_StdObjective<Real,HS_016::Obj>>(); 100 } 101 getInequalityConstraint()102 const ROL::Ptr<CON> getInequalityConstraint() { 103 return ROL::makePtr<ROL::Sacado_StdConstraint<Real,HS_016::InCon>>(); 104 } 105 getInitialGuess()106 const ROL::Ptr<const V> getInitialGuess() { 107 Real x[] = {-2,1}; 108 return NP::createOptVector(x); 109 }; 110 initialGuessIsFeasible()111 bool initialGuessIsFeasible() { return false; } 112 getInitialObjectiveValue()113 Real getInitialObjectiveValue() { 114 return Real(909); 115 } 116 getSolutionObjectiveValue()117 Real getSolutionObjectiveValue() { 118 return 0.25; 119 } 120 getSolutionSet()121 ROL::Ptr<const V> getSolutionSet() { 122 Real x[] = {0.5,0.25}; 123 return ROL::CreatePartitionedVector(NP::createOptVector(x)); 124 } 125 126 }; 127 128 } // namespace HS 129 130 #endif // HS_PROBLEM_016_HPP 131