MOOCHO (Single Doxygen Collection) Version of the Day
NLPInterfacePack_ExampleNLPObjGrad.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef EXAMPLE_NLP_OBJ_GRADIENT_H
00043 #define EXAMPLE_NLP_OBJ_GRADIENT_H
00044 
00045 #include "NLPInterfacePack_NLPObjGrad.hpp"
00046 #include "AbstractLinAlgPack_VectorMutable.hpp"
00047 #include "AbstractLinAlgPack_VectorSpace.hpp"
00048 #include "AbstractLinAlgPack_VectorSpaceBlocked.hpp"
00049 #include "Teuchos_Assert.hpp"
00050 
00051 namespace NLPInterfacePack {
00052 
00072 class ExampleNLPObjGrad : virtual public NLPObjGrad {
00073 public:
00074 
00088   ExampleNLPObjGrad(
00089     const VectorSpace::space_ptr_t&  vec_space
00090     ,value_type                      xo
00091     ,bool                            has_bounds
00092     ,bool                            dep_bounded
00093     );
00094 
00097 
00099   virtual Range1D var_dep() const;
00101   virtual Range1D var_indep() const;
00102 
00104 
00107 
00109   void initialize(bool test_setup);
00111   bool is_initialized() const;
00113   size_type n() const;
00115   size_type m() const;
00117   vec_space_ptr_t space_x() const;
00119   vec_space_ptr_t space_c() const;
00121     size_type num_bounded_x() const;
00123   void force_xinit_in_bounds(bool force_xinit_in_bounds);
00125   bool force_xinit_in_bounds() const;
00127   const Vector& xinit() const;
00129   const Vector& xl() const;
00131   const Vector& xu() const;
00133   value_type max_var_bounds_viol() const;
00135   void scale_f( value_type scale_f );
00137   value_type scale_f() const;
00139   void report_final_solution(
00140     const Vector&    x
00141     ,const Vector*   lambda
00142     ,const Vector*   nu
00143     ,bool            optimal
00144     );
00145 
00147 
00148 protected:
00149 
00152 
00154   void imp_calc_f(
00155     const Vector& x, bool newx
00156     ,const ZeroOrderInfo& zero_order_info) const;
00158   void imp_calc_c(
00159     const Vector& x, bool newx
00160     ,const ZeroOrderInfo& zero_order_info) const;
00162   void imp_calc_h(const Vector& x, bool newx, const ZeroOrderInfo& zero_order_info) const;
00163 
00165 
00168 
00170   void imp_calc_Gf(
00171     const Vector& x, bool newx
00172     ,const ObjGradInfo& obj_grad_info) const;
00173 
00175 
00176 private:
00177 
00178   // /////////////////////////////////////////
00179   // Private data members
00180 
00181   VectorSpace::space_ptr_t    vec_space_;       // The vector space for dependent and indepenent variables and c(x).
00182   VectorSpace::space_ptr_t    vec_space_comp_;  // Composite vector space for x = [ xD; xI ]
00183   Range1D                     var_dep_;         // Range for dependnet variables.
00184   Range1D                     var_indep_;       // Range for independent variables.
00185 
00186   bool         initialized_;            // flag for if initialized has been called.
00187   value_type   obj_scale_;              // default = 1.0;
00188   bool         has_bounds_;             // default = true
00189   bool         force_xinit_in_bounds_;  // default = true.
00190 
00191   size_type    n_;                      // Number of variables in the problem.
00192   VectorSpace::vec_mut_ptr_t  xinit_;   // Initial guess.
00193   VectorSpace::vec_mut_ptr_t  xl_;      // lower bounds.
00194   VectorSpace::vec_mut_ptr_t  xu_;      // upper bounds.
00195 
00196   // /////////////////////////////////////////
00197   // Private member functions
00198 
00200   void assert_is_initialized() const;
00201 
00202 };  // end class ExampleNLPObjGrad
00203 
00204 // ///////////////////////////////////////////////
00205 // Inline member functions
00206 
00207 inline
00208 void ExampleNLPObjGrad::assert_is_initialized() const
00209 {
00210   typedef NLPInterfacePack::NLP NLP;
00211   TEUCHOS_TEST_FOR_EXCEPTION(
00212     !is_initialized(), NLP::UnInitialized
00213     ,"ExampleNLPObjGrad::assert_is_initialized() : Error, "
00214     "ExampleNLPObjGrad::initialize() has not been called yet." );
00215 }
00216 
00217 } // end namespace NLPInterfacePack
00218 
00219 #endif  // EXAMPLE_NLP_OBJ_GRADIENT_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines