/home/coin/SVN-release/OS-2.4.2/OS/src/OSSolverInterfaces/OSBonminSolver.h

Go to the documentation of this file.
00001 /* $Id: OSBonminSolver.h 4292 2011-09-21 05:47:18Z kmartin $ */
00015 #ifndef BONMINSOLVER_H
00016 #define BONMINSOLVER_H
00017 
00018 #include "OSConfig.h"
00019 #include "OSDefaultSolver.h"
00020 #include "OSrLWriter.h"
00021 #include "OSInstance.h"
00022 #include "OSParameters.h"
00023 #include "OSnLNode.h"
00024 #include "OSiLReader.h"
00025 #include "OSrLReader.h"
00026 #include "OSoLReader.h"
00027 #include "OSInstance.h"
00028 #include "OSExpressionTree.h"
00029 #include "OSnLNode.h"
00030 #include "OSDataStructures.h"
00031 #include "OSFileUtil.h"
00032 #include "OSErrorClass.h"
00033 
00034 #include "OSResult.h"
00035 #include "OSInstance.h"
00036 #include "OSOption.h"
00037 
00038 #include <cstddef>
00039 #include <cstdlib>
00040 #include <cctype>
00041 #include <cassert>
00042 #include <stack>
00043 #include <string>
00044 #include <iostream>
00045 #include <vector>
00046 #include <map>
00047 
00048 #include "BonCbc.hpp"
00049 #include "BonTMINLP.hpp"
00050 #include "BonBonminSetup.hpp"
00051 
00052 // for Stefan
00053 class BonminProblem : public Bonmin::TMINLP
00054 {
00055 
00056 
00057 
00058 public:
00059 
00061     BonminProblem(OSInstance *osinstance_ , OSOption *osoption_);
00062 
00064     virtual ~BonminProblem();
00065 
00066     OSInstance *osinstance;
00067 
00068     OSOption *osoption;
00069 
00070     Bonmin::TMINLP::SolverReturn status;
00071 
00072 
00082     virtual bool get_variables_types(Ipopt::Index n, VariableType* var_types);
00083 
00085     virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType* var_types);
00086 
00091     virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType* const_types);
00093 
00106     virtual bool get_nlp_info(Ipopt::Index& n, Ipopt::Index&m, Ipopt::Index& nnz_jac_g,
00107                               Ipopt::Index& nnz_h_lag, Ipopt::TNLP::IndexStyleEnum& index_style);
00108 
00109 
00110 
00112     //virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
00113     //                       Index& nnz_h_lag, IndexStyleEnum& index_style);
00114 
00116     virtual bool get_bounds_info(Ipopt::Index n, Ipopt::Number* x_l, Ipopt::Number* x_u,
00117                                  Ipopt::Index m, Ipopt::Number* g_l, Ipopt::Number* g_u);
00118 
00120     virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number* x,
00121                                     bool init_z, Ipopt::Number* z_L, Ipopt::Number* z_U,
00122                                     Ipopt::Index m, bool init_lambda,
00123                                     Ipopt::Number* lambda);
00124 
00126     virtual bool eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number& obj_value);
00127 
00129     virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number* grad_f);
00130 
00132     virtual bool eval_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Index m, Ipopt::Number* g);
00133 
00138     virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
00139                             Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index* iRow, Ipopt::Index *jCol,
00140                             Ipopt::Number* values);
00141 
00146     virtual bool eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
00147                         Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number* lambda,
00148                         bool new_lambda, Ipopt::Index nele_hess, Ipopt::Index* iRow,
00149                         Ipopt::Index* jCol, Ipopt::Number* values);
00150 
00152 
00153 
00154     virtual bool get_scaling_parameters(Ipopt::Number& obj_scaling,
00155                                         bool& use_x_scaling, Ipopt::Index n,
00156                                         Ipopt::Number* x_scaling,
00157                                         bool& use_g_scaling, Ipopt::Index m,
00158                                         Ipopt::Number* g_scaling);
00159 
00162     virtual void finalize_solution(Bonmin::TMINLP::SolverReturn status_,
00163                                    Ipopt::Index n, const Ipopt::Number* x, Ipopt::Number obj_value);
00165 
00166     virtual const SosInfo * sosConstraints() const
00167     {
00168         return NULL;
00169     }
00170     virtual const BranchingInfo* branchingInfo() const
00171     {
00172         return NULL;
00173     }
00174 
00175     void printSolutionAtEndOfAlgorithm()
00176     {
00177         printSol_ = true;
00178     }
00179 
00180 
00181 
00182 
00183 
00184 private:
00185     bool printSol_;
00186 
00187 private:
00199     //  HS071_NLP();
00200 
00202 
00203 
00204 
00205     std::string bonminErrorMsg;
00206 
00207 
00208 };
00209 
00210 
00225 class BonminSolver : public DefaultSolver
00226 {
00227 public:
00228 
00229 
00230 
00232     BonminSolver();
00233 
00235     ~BonminSolver();
00236 
00237 
00238 
00239     Ipopt::SmartPtr<BonminProblem> tminlp;
00240 
00241     // this is a Bonmin BonCbc object;
00242     Bonmin::Bab bb;
00243 
00244     Bonmin::TMINLP::SolverReturn status;
00245 
00246     //SmartPtr<IpoptApplication> app;
00247 
00248 
00251     virtual void  solve() throw (ErrorClass) ;
00252 
00257     virtual void  buildSolverInstance() throw(ErrorClass);
00258 
00263     virtual void  setSolverOptions() throw(ErrorClass);
00264 
00270     void dataEchoCheck();
00271 
00276     OSiLReader *m_osilreader;
00277 
00282     OSoLReader *m_osolreader;
00283 
00284 
00285 
00290     void writeResult();
00291 
00292 
00293 private:
00294     OSrLWriter  *osrlwriter;
00295 
00296     Bonmin::BonminSetup bonminSetup;
00297 
00298     std::string bonminErrorMsg;
00299 };
00300 
00301 
00302 #endif /*BONMINSOLVER_H*/

Generated on Wed Nov 30 03:04:23 2011 by  doxygen 1.4.7