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, MatlabInfo& info);
00032
00033
00034 virtual ~MatlabProgram();
00035
00036
00037 virtual bool get_nlp_info (int& n, int& m, int& sizeOfJ, int& sizeOfH,
00038 IndexStyleEnum& indexStyle);
00039
00040
00041 virtual bool get_bounds_info (int n, double* lb, double* ub, int m,
00042 double* cl, double* cu);
00043
00044
00045 virtual bool get_starting_point (int n, bool initializeVars, double* vars,
00046 bool initializez, double* zl, double* zu,
00047 int m, bool initializeLambda,
00048 double* lambda);
00049
00050
00051 virtual bool eval_f (int n, const double* vars, bool ignore, double& f);
00052
00053
00054 virtual bool eval_grad_f (int n, const double* vars, bool ignore,
00055 double* grad);
00056
00057
00058 virtual bool eval_g (int n, const double* vars, bool ignore, int m,
00059 double* g);
00060
00061
00062
00063
00064 virtual bool eval_jac_g (int numVariables, const double* variables,
00065 bool ignoreThis, int numConstraints,
00066 int sizeOfJ, int* rows, int *cols, double* Jx);
00067
00068
00069
00070
00071 virtual bool eval_h (int n, const double* vars, bool ignore, double sigma,
00072 int m, const double* lambda, bool ignoretoo,
00073 int sizeOfH, int* rows, int* cols, double* Hx);
00074
00075
00076 virtual void finalize_solution (SolverReturn status, int numVariables,
00077 const double* variables, const double* zl,
00078 const double* zu, int numConstraints,
00079 const double* constraints,
00080 const double* lambda, double objective,
00081 const IpoptData* ip_data,
00082 IpoptCalculatedQuantities* ip_cq);
00083
00084
00085
00086 virtual bool intermediate_callback (AlgorithmMode mode, int t, double f,
00087 double inf_pr, double inf_du,
00088 double mu, double d_norm,
00089 double regularization_size,
00090 double alpha_du, double alpha_pr,
00091 int ls_trials,
00092 const IpoptData* ip_data,
00093 IpoptCalculatedQuantities* ip_cq);
00094
00095 protected:
00096 const Iterate& x0;
00097 const CallbackFunctions& funcs;
00098 const Options& options;
00099 Iterate& x;
00100 MatlabInfo& info;
00101
00102
00103
00104
00105 SparseMatrix* J;
00106 SparseMatrix* H;
00107 };
00108
00109 #endif