00001
00017 #ifndef BONMINSOLVER_H
00018 #define BONMINSOLVER_H
00019
00020 #include "OSConfig.h"
00021 #include "OSDefaultSolver.h"
00022 #include "OSrLWriter.h"
00023 #include "OSInstance.h"
00024 #include "OSParameters.h"
00025 #include "OSnLNode.h"
00026 #include "OSiLReader.h"
00027 #include "OSrLReader.h"
00028 #include "OSoLReader.h"
00029 #include "OSInstance.h"
00030 #include "OSExpressionTree.h"
00031 #include "OSnLNode.h"
00032 #include "OSDataStructures.h"
00033 #include "OSFileUtil.h"
00034 #include "OSErrorClass.h"
00035
00036 #include "OSResult.h"
00037 #include "OSInstance.h"
00038 #include "OSOption.h"
00039
00040 # include <cstddef>
00041 # include <cstdlib>
00042 # include <cctype>
00043 # include <cassert>
00044 # include <stack>
00045 #include <string>
00046 #include<iostream>
00047
00048 #ifdef HAVE_CTIME
00049 # include <ctime>
00050 #else
00051 # ifdef HAVE_TIME_H
00052 # include <time.h>
00053 # else
00054 # error "don't have header file for time"
00055 # endif
00056 #endif
00057
00058
00059 #ifdef HAVE_CMATH
00060 # include <cmath>
00061 #else
00062 # ifdef HAVE_MATH_H
00063 # include <math.h>
00064 # else
00065 # error "don't have header file for math"
00066 # endif
00067 #endif
00068 #include<vector>
00069 #include <map>
00070
00071
00072
00073 #include "BonCbc.hpp"
00074 #include "BonTMINLP.hpp"
00075 #include "BonBonminSetup.hpp"
00076
00077
00078 using namespace Ipopt;
00079 using namespace Bonmin;
00080
00081
00082
00083
00084
00085 class BonminProblem : public TMINLP{
00086
00087
00088
00089 public:
00090
00092 BonminProblem(OSInstance *osinstance_ , OSOption *osoption_);
00093
00095 virtual ~BonminProblem();
00096
00097 OSInstance *osinstance;
00098
00099 OSOption *osoption;
00100
00101 TMINLP::SolverReturn status;
00102
00103
00113 virtual bool get_variables_types(Index n, VariableType* var_types);
00114
00116 virtual bool get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types);
00117
00122 virtual bool get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types);
00124
00137 virtual bool get_nlp_info(Index& n, Index&m, Index& nnz_jac_g,
00138 Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style);
00139
00140
00141
00143
00144
00145
00147 virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u,
00148 Index m, Number* g_l, Number* g_u);
00149
00151 virtual bool get_starting_point(Index n, bool init_x, Number* x,
00152 bool init_z, Number* z_L, Number* z_U,
00153 Index m, bool init_lambda,
00154 Number* lambda);
00155
00157 virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value);
00158
00160 virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f);
00161
00163 virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g);
00164
00169 virtual bool eval_jac_g(Index n, const Number* x, bool new_x,
00170 Index m, Index nele_jac, Index* iRow, Index *jCol,
00171 Number* values);
00172
00177 virtual bool eval_h(Index n, const Number* x, bool new_x,
00178 Number obj_factor, Index m, const Number* lambda,
00179 bool new_lambda, Index nele_hess, Index* iRow,
00180 Index* jCol, Number* values);
00181
00183
00184
00185 virtual bool get_scaling_parameters(Number& obj_scaling,
00186 bool& use_x_scaling, Index n,
00187 Number* x_scaling,
00188 bool& use_g_scaling, Index m,
00189 Number* g_scaling);
00190
00193 virtual void finalize_solution(TMINLP::SolverReturn status_,
00194 Index n, const Number* x, Number obj_value);
00196
00197 virtual const SosInfo * sosConstraints() const{return NULL;}
00198 virtual const BranchingInfo* branchingInfo() const{return NULL;}
00199
00200 void printSolutionAtEndOfAlgorithm(){
00201 printSol_ = true;}
00202
00203
00204
00205
00206
00207 private:
00208 bool printSol_;
00209
00210 private:
00222
00223
00225
00226
00227
00228 std::string bonminErrorMsg;
00229
00230
00231 };
00232
00233
00248 class BonminSolver : public DefaultSolver{
00249 public:
00250
00251
00252
00254 BonminSolver();
00255
00257 ~BonminSolver();
00258
00259
00260
00261 SmartPtr<BonminProblem> tminlp;
00262
00263
00264 Bab bb;
00265
00266 TMINLP::SolverReturn status;
00267
00268
00269
00270
00273 virtual void solve() throw (ErrorClass) ;
00274
00279 virtual void buildSolverInstance() throw(ErrorClass);
00280
00285 virtual void setSolverOptions() throw(ErrorClass);
00286
00292 void dataEchoCheck();
00293
00298 OSiLReader *m_osilreader;
00299
00304 OSoLReader *m_osolreader;
00305
00306
00307
00312 void writeResult();
00313
00314
00315 private:
00316 OSrLWriter *osrlwriter;
00317
00318 BonminSetup bonminSetup;
00319
00320 std::string bonminErrorMsg;
00321 };
00322
00323
00324 #endif