123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Copyright (C) 2005, 2006 International Business Machines and others.
- // All Rights Reserved.
- // This code is published under the Eclipse Public License.
- //
- // $Id: LuksanVlcek5.hpp 1861 2010-12-21 21:34:47Z andreasw $
- //
- // Authors: Andreas Waechter IBM 2005-10-127
- #ifndef __LUKSANVLCEK5_HPP__
- #define __LUKSANVLCEK5_HPP__
- #include "RegisteredTNLP.hpp"
- using namespace Ipopt;
- /** Implementation of Example 5.5 from "Sparse and Parially Separable
- * Test Problems for Unconstrained and Equality Constrained
- * Optimization" by L. Luksan and J. Vlcek. */
- class LuksanVlcek5 : public RegisteredTNLP
- {
- public:
- /** Constructor. Here, g_l and g_u are the bounds for the
- * constraints. The original formulation is obtained by setting
- * g_l and g_u to zero. Using g_l<g_u allows the obtain a problem
- * formulation with inequality constraints. */
- LuksanVlcek5(Number g_l, Number g_u);
- /** Default destructor */
- virtual ~LuksanVlcek5()
- {}
- ;
- /** Overloaded from RegisteredTNLP. */
- virtual bool InitializeProblem(Index N);
- /**@name Overloaded from TNLP */
- //@{
- /** Method to return some info about the nlp */
- virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
- Index& nnz_h_lag, IndexStyleEnum& index_style);
- /** Method to return the bounds for my problem */
- virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u,
- Index m, Number* g_l, Number* g_u);
- /** Method to return the starting point for the algorithm */
- virtual bool get_starting_point(Index n, bool init_x, Number* x,
- bool init_z, Number* z_L, Number* z_U,
- Index m, bool init_lambda,
- Number* lambda);
- /** Method to return the objective value */
- virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value);
- /** Method to return the gradient of the objective */
- virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f);
- /** Method to return the constraint residuals */
- virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g);
- /** Method to return:
- * 1) The structure of the jacobian (if "values" is NULL)
- * 2) The values of the jacobian (if "values" is not NULL)
- */
- virtual bool eval_jac_g(Index n, const Number* x, bool new_x,
- Index m, Index nele_jac, Index* iRow, Index *jCol,
- Number* values);
- /** Method to return:
- * 1) The structure of the hessian of the lagrangian (if "values" is NULL)
- * 2) The values of the hessian of the lagrangian (if "values" is not NULL)
- */
- virtual bool eval_h(Index n, const Number* x, bool new_x,
- Number obj_factor, Index m, const Number* lambda,
- bool new_lambda, Index nele_hess, Index* iRow,
- Index* jCol, Number* values);
- //@}
- /** @name Solution Methods */
- //@{
- /** This method is called when the algorithm is complete so the TNLP can store/write the solution */
- virtual void finalize_solution(SolverReturn status,
- Index n, const Number* x, const Number* z_L, const Number* z_U,
- Index m, const Number* g, const Number* lambda,
- Number obj_value,
- const IpoptData* ip_data,
- IpoptCalculatedQuantities* ip_cq);
- //@}
- private:
- /**@name Methods to block default compiler methods.
- * The compiler automatically generates the following three methods.
- * Since the default compiler implementation is generally not what
- * you want (for all but the most simple classes), we usually
- * put the declarations of these methods in the private section
- * and never implement them. This prevents the compiler from
- * implementing an incorrect "default" behavior without us
- * knowing. (See Scott Meyers book, "Effective C++")
- *
- */
- //@{
- LuksanVlcek5();
- LuksanVlcek5(const LuksanVlcek5&);
- LuksanVlcek5& operator=(const LuksanVlcek5&);
- //@}
- /** Parameter determining problem size */
- Index N_;
- /** General lower bound for all constraints */
- Number g_l_;
- /** General upper bound for all constraints */
- Number g_u_;
- };
- #endif
|