00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef INCLUDE_MATLABPROGRAM
00010 #define INCLUDE_MATLABPROGRAM
00011
00012 #include "iterate.hpp"
00013 #include "options.hpp"
00014 #include "matlabinfo.hpp"
00015 #include "callbackfunctions.hpp"
00016 #include "IpTNLP.hpp"
00017
00018 using Ipopt::TNLP;
00019 using Ipopt::SolverReturn;
00020 using Ipopt::AlgorithmMode;
00021 using Ipopt::IpoptData;
00022 using Ipopt::IpoptCalculatedQuantities;
00023
00024
00025
00026 class MatlabProgram : public TNLP {
00027 public:
00028
00029
00030 MatlabProgram (const Iterate& x0, const CallbackFunctions& funcs,
00031 const Options& options, Iterate& x, const mxArray* auxdata,
00032 MatlabInfo& info);
00033
00034
00035 virtual ~MatlabProgram();
00036
00037
00038 virtual bool get_nlp_info (int& n, int& m, int& sizeOfJ, int& sizeOfH,
00039 IndexStyleEnum& indexStyle);
00040
00041
00042 virtual bool get_bounds_info (int n, double* lb, double* ub, int m,
00043 double* cl, double* cu);
00044
00045
00046 virtual bool get_starting_point (int n, bool initializeVars, double* vars,
00047 bool initializez, double* zl, double* zu,
00048 int m, bool initializeLambda,
00049 double* lambda);
00050
00051
00052 virtual bool eval_f (int n, const double* vars, bool ignore, double& f);
00053
00054
00055 virtual bool eval_grad_f (int n, const double* vars, bool ignore,
00056 double* grad);
00057
00058
00059 virtual bool eval_g (int n, const double* vars, bool ignore, int m,
00060 double* g);
00061
00062
00063
00064
00065 virtual bool eval_jac_g (int numVariables, const double* variables,
00066 bool ignoreThis, int numConstraints,
00067 int sizeOfJ, int* rows, int *cols, double* Jx);
00068
00069
00070
00071
00072 virtual bool eval_h (int n, const double* vars, bool ignore, double sigma,
00073 int m, const double* lambda, bool ignoretoo,
00074 int sizeOfH, int* rows, int* cols, double* Hx);
00075
00076
00077 virtual void finalize_solution (SolverReturn status, int numVariables,
00078 const double* variables, const double* zl,
00079 const double* zu, int numConstraints,
00080 const double* constraints,
00081 const double* lambda, double objective,
00082 const IpoptData* ip_data,
00083 IpoptCalculatedQuantities* ip_cq);
00084
00085
00086
00087 virtual bool intermediate_callback (AlgorithmMode mode, int t, double f,
00088 double inf_pr, double inf_du,
00089 double mu, double d_norm,
00090 double regularization_ize,
00091 double alpha_du, double alpha_pr,
00092 int ls_trials,
00093 const IpoptData* ip_data,
00094 IpoptCalculatedQuantities* ip_cq);
00095
00096 protected:
00097 const Iterate& x0;
00098 const CallbackFunctions& funcs;
00099 const Options& options;
00100 Iterate& x;
00101 const mxArray* auxdata;
00102 MatlabInfo& info;
00103
00104
00105
00106
00107 SparseMatrix* J;
00108 SparseMatrix* H;
00109 };
00110
00111 #endif