Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
MatlabProgram Class Reference

#include <matlabprogram.hpp>

Inheritance diagram for MatlabProgram:
Ipopt::TNLP Ipopt::TNLP Ipopt::ReferencedObject Ipopt::ReferencedObject

Public Member Functions

 MatlabProgram (const Iterate &x0, const CallbackFunctions &funcs, const Options &options, Iterate &x, const mxArray *auxdata, MatlabInfo &info)
virtual ~MatlabProgram ()
virtual bool get_nlp_info (int &n, int &m, int &sizeOfJ, int &sizeOfH, IndexStyleEnum &indexStyle)
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.
virtual bool get_bounds_info (int n, double *lb, double *ub, int m, double *cl, double *cu)
 overload this method to return the information about the bound on the variables and constraints.
virtual bool get_starting_point (int n, bool initializeVars, double *vars, bool initializez, double *zl, double *zu, int m, bool initializeLambda, double *lambda)
 overload this method to return the starting point.
virtual bool eval_f (int n, const double *vars, bool ignore, double &f)
 overload this method to return the value of the objective function
virtual bool eval_grad_f (int n, const double *vars, bool ignore, double *grad)
 overload this method to return the vector of the gradient of the objective w.r.t.
virtual bool eval_g (int n, const double *vars, bool ignore, int m, double *g)
 overload this method to return the vector of constraint values
virtual bool eval_jac_g (int numVariables, const double *variables, bool ignoreThis, int numConstraints, int sizeOfJ, int *rows, int *cols, double *Jx)
 overload this method to return the jacobian of the constraints.
virtual bool eval_h (int n, const double *vars, bool ignore, double sigma, int m, const double *lambda, bool ignoretoo, int sizeOfH, int *rows, int *cols, double *Hx)
 overload this method to return the hessian of the lagrangian.
virtual void finalize_solution (SolverReturn status, int numVariables, const double *variables, const double *zl, const double *zu, int numConstraints, const double *constraints, const double *lambda, double objective, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
virtual bool intermediate_callback (AlgorithmMode mode, int t, double f, double inf_pr, double inf_du, double mu, double d_norm, double regularization_ize, double alpha_du, double alpha_pr, int ls_trials, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
 MatlabProgram (const ArrayOfMatrices &x0, const ArrayOfMatrices &lb, const ArrayOfMatrices &ub, const Matrix &constraintlb, const Matrix &constraintub, const MatlabFunctionHandle &objFunc, const MatlabFunctionHandle &gradFunc, const MatlabFunctionHandle &constraintFunc, const MatlabFunctionHandle &jacobianFunc, const MatlabFunctionHandle &hessianFunc, const MatlabFunctionHandle &iterFunc, const mxArray *auxData, ArrayOfMatrices &xsol, bool useQuasiNewton, Multipliers *initialMultipliers=0, Multipliers *multipliers=0)
virtual ~MatlabProgram ()
char * geterrormsg () const
int getnumiterations () const
virtual bool get_nlp_info (int &numVariables, int &numConstraints, int &sizeOfJ, int &sizeOfH, IndexStyleEnum &indexStyle)
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.
virtual bool get_bounds_info (int numVariables, double *lbptr, double *ubptr, int numConstraints, double *clbptr, double *cubptr)
 overload this method to return the information about the bound on the variables and constraints.
virtual bool get_starting_point (int numVariables, bool initializeVars, double *variables, bool initializez, double *zl, double *zu, int numConstraints, bool initializeLambda, double *lambda)
 overload this method to return the starting point.
virtual bool eval_f (int numVariables, const double *variables, bool ignoreThis, double &objective)
 overload this method to return the value of the objective function
virtual bool eval_grad_f (int numVariables, const double *variables, bool ignoreThis, double *gradient)
 overload this method to return the vector of the gradient of the objective w.r.t.
virtual bool eval_g (int numVariables, const double *variables, bool ignoreThis, int numConstraints, double *constraints)
 overload this method to return the vector of constraint values
virtual bool eval_jac_g (int numVariables, const double *variables, bool ignoreThis, int numConstraints, int sizeOfJ, int *rows, int *cols, double *Jacobian)
 overload this method to return the jacobian of the constraints.
virtual bool eval_h (int numVariables, const double *variables, bool ignoreThis, double sigma, int numConstraints, const double *multipliers, bool ignoreThisToo, int sizeOfH, int *rows, int *cols, double *Hessian)
 overload this method to return the hessian of the lagrangian.
virtual void finalize_solution (SolverReturn status, int numVariables, const double *variables, const double *zl, const double *zu, int numConstraints, const double *constraints, const double *lambda, double objective, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
virtual bool intermediate_callback (AlgorithmMode mode, int iteration, double objective, double inf_pr, double inf_du, double mu, double d_norm, double regularization_ize, double alpha_du, double alpha_pr, int ls_trials, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
- Public Member Functions inherited from Ipopt::TNLP
 DECLARE_STD_EXCEPTION (INVALID_TNLP)
 TNLP ()
 Default destructor.
virtual ~TNLP ()
 Default destructor.
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)=0
 This method is called when the algorithm is complete so the TNLP can store/write the solution.
virtual void finalize_metadata (Index n, const StringMetaDataMapType &var_string_md, const IntegerMetaDataMapType &var_integer_md, const NumericMetaDataMapType &var_numeric_md, Index m, const StringMetaDataMapType &con_string_md, const IntegerMetaDataMapType &con_integer_md, const NumericMetaDataMapType &con_numeric_md)
 This method is called just before finalize_solution.
virtual bool intermediate_callback (AlgorithmMode mode, Index iter, Number obj_value, Number inf_pr, Number inf_du, Number mu, Number d_norm, Number regularization_size, Number alpha_du, Number alpha_pr, Index ls_trials, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
 Intermediate Callback method for the user.
virtual Index get_number_of_nonlinear_variables ()
virtual bool get_list_of_nonlinear_variables (Index num_nonlin_vars, Index *pos_nonlin_vars)
virtual bool get_var_con_metadata (Index n, StringMetaDataMapType &var_string_md, IntegerMetaDataMapType &var_integer_md, NumericMetaDataMapType &var_numeric_md, Index m, StringMetaDataMapType &con_string_md, IntegerMetaDataMapType &con_integer_md, NumericMetaDataMapType &con_numeric_md)
 overload this method to return any meta data for the variables and the constraints
virtual bool get_scaling_parameters (Number &obj_scaling, bool &use_x_scaling, Index n, Number *x_scaling, bool &use_g_scaling, Index m, Number *g_scaling)
 overload this method to return scaling parameters.
virtual bool get_variables_linearity (Index n, LinearityType *var_types)
 overload this method to return the variables linearity (TNLP::Linear or TNLP::NonLinear).
virtual bool get_constraints_linearity (Index m, LinearityType *const_types)
 overload this method to return the constraint linearity.
virtual bool get_warm_start_iterate (IteratesVector &warm_start_iterate)
 overload this method to provide an Ipopt iterate (already in the form Ipopt requires it internally) for a warm start.
- Public Member Functions inherited from Ipopt::ReferencedObject
 ReferencedObject ()
virtual ~ReferencedObject ()
Index ReferenceCount () const
void AddRef (const Referencer *referencer) const
void ReleaseRef (const Referencer *referencer) const

Protected Member Functions

 MatlabProgram (const MatlabProgram &source)
MatlabProgramoperator= (const MatlabProgram &source)

Protected Attributes

const Iteratex0
const CallbackFunctionsfuncs
const Optionsoptions
Iteratex
const mxArray * auxdata
MatlabInfoinfo
SparseMatrixJ
SparseMatrixH
const ArrayOfMatricesx0
const ArrayOfMatriceslb
const ArrayOfMatricesub
const Matrixconstraintlb
const Matrixconstraintub
const mxArray * auxData
ArrayOfMatricesxsol
ArrayOfMatricesx
MultipliersinitialMultipliers
Multipliersmultipliers
Array< double > * lambda
int numiter
mxArray ** prhs
mxArray * lambdarhs
bool useQuasiNewton
SparseMatrixStructureJacobianStructure
SparseMatrixStructureHessianStructure
const MatlabFunctionHandleobjFunc
const MatlabFunctionHandlegradFunc
const MatlabFunctionHandleconstraintFunc
const MatlabFunctionHandlejacobianFunc
const MatlabFunctionHandlehessianFunc
const MatlabFunctionHandleiterFunc

Private Member Functions

double computeObjective (const ArrayOfMatrices &x)
void computeGradient (const ArrayOfMatrices &x, ArrayOfMatrices &grad)
void computeConstraints (const ArrayOfMatrices &x, Array< double > &g)
void computeJacobian (const ArrayOfMatrices &x, double *Jacobian)
void computeHessian (const ArrayOfMatrices &x, const Array< double > &lambda, double sigma, double *Hessian)
mxArray * callMatlabJacobianRoutine (const ArrayOfMatrices &x, bool returnStructureOnly=true)
mxArray * callMatlabHessianRoutine (const ArrayOfMatrices &x, const Array< double > &lambda, bool returnStructureOnly=true, double sigma=0)

Additional Inherited Members

- Public Types inherited from Ipopt::TNLP
enum  LinearityType { LINEAR, NON_LINEAR }
 Type of the constraints. More...
enum  IndexStyleEnum { C_STYLE = 0, FORTRAN_STYLE = 1 }
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian. More...
typedef std::map< std::string,
std::vector< std::string > > 
StringMetaDataMapType
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.
typedef std::map< std::string,
std::vector< Index > > 
IntegerMetaDataMapType
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.
typedef std::map< std::string,
std::vector< Number > > 
NumericMetaDataMapType
 overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.

Detailed Description

Definition at line 26 of file matlabprogram.hpp.

Constructor & Destructor Documentation

MatlabProgram::MatlabProgram ( const Iterate x0,
const CallbackFunctions funcs,
const Options options,
Iterate x,
const mxArray *  auxdata,
MatlabInfo info 
)
virtual MatlabProgram::~MatlabProgram ( )
virtual
MatlabProgram::MatlabProgram ( const ArrayOfMatrices x0,
const ArrayOfMatrices lb,
const ArrayOfMatrices ub,
const Matrix constraintlb,
const Matrix constraintub,
const MatlabFunctionHandle objFunc,
const MatlabFunctionHandle gradFunc,
const MatlabFunctionHandle constraintFunc,
const MatlabFunctionHandle jacobianFunc,
const MatlabFunctionHandle hessianFunc,
const MatlabFunctionHandle iterFunc,
const mxArray *  auxData,
ArrayOfMatrices xsol,
bool  useQuasiNewton,
Multipliers initialMultipliers = 0,
Multipliers multipliers = 0 
)
virtual MatlabProgram::~MatlabProgram ( )
virtual
MatlabProgram::MatlabProgram ( const MatlabProgram source)
protected

Member Function Documentation

virtual bool MatlabProgram::get_nlp_info ( int &  n,
int &  m,
int &  nnz_jac_g,
int &  nnz_h_lag,
IndexStyleEnum index_style 
)
virtual

overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.

The index_style parameter lets you specify C or Fortran style indexing for the sparse matrix iRow and jCol parameters. C_STYLE is 0-based, and FORTRAN_STYLE is 1-based.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::get_bounds_info ( int  n,
double *  x_l,
double *  x_u,
int  m,
double *  g_l,
double *  g_u 
)
virtual

overload this method to return the information about the bound on the variables and constraints.

The value that indicates that a bound does not exist is specified in the parameters nlp_lower_bound_inf and nlp_upper_bound_inf. By default, nlp_lower_bound_inf is -1e19 and nlp_upper_bound_inf is 1e19. (see TNLPAdapter)

Implements Ipopt::TNLP.

virtual bool MatlabProgram::get_starting_point ( int  n,
bool  init_x,
double *  x,
bool  init_z,
double *  z_L,
double *  z_U,
int  m,
bool  init_lambda,
double *  lambda 
)
virtual

overload this method to return the starting point.

The bool variables indicate whether the algorithm wants you to initialize x, z_L/z_u, and lambda, respectively. If, for some reason, the algorithm wants you to initialize these and you cannot, return false, which will cause Ipopt to stop. You will have to run Ipopt with different options then.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_f ( int  n,
const double *  x,
bool  new_x,
double &  obj_value 
)
virtual

overload this method to return the value of the objective function

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_grad_f ( int  n,
const double *  x,
bool  new_x,
double *  grad_f 
)
virtual

overload this method to return the vector of the gradient of the objective w.r.t.

x

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_g ( int  n,
const double *  x,
bool  new_x,
int  m,
double *  g 
)
virtual

overload this method to return the vector of constraint values

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_jac_g ( int  n,
const double *  x,
bool  new_x,
int  m,
int  nele_jac,
int *  iRow,
int *  jCol,
double *  values 
)
virtual

overload this method to return the jacobian of the constraints.

The vectors iRow and jCol only need to be set once. The first call is used to set the structure only (iRow and jCol will be non-NULL, and values will be NULL) For subsequent calls, iRow and jCol will be NULL.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_h ( int  n,
const double *  x,
bool  new_x,
double  obj_factor,
int  m,
const double *  lambda,
bool  new_lambda,
int  nele_hess,
int *  iRow,
int *  jCol,
double *  values 
)
virtual

overload this method to return the hessian of the lagrangian.

The vectors iRow and jCol only need to be set once (during the first call). The first call is used to set the structure only (iRow and jCol will be non-NULL, and values will be NULL) For subsequent calls, iRow and jCol will be NULL. This matrix is symmetric - specify the lower diagonal only. A default implementation is provided, in case the user wants to se quasi-Newton approximations to estimate the second derivatives and doesn't not neet to implement this method.

Reimplemented from Ipopt::TNLP.

virtual void MatlabProgram::finalize_solution ( SolverReturn  status,
int  numVariables,
const double *  variables,
const double *  zl,
const double *  zu,
int  numConstraints,
const double *  constraints,
const double *  lambda,
double  objective,
const IpoptData ip_data,
IpoptCalculatedQuantities ip_cq 
)
virtual
virtual bool MatlabProgram::intermediate_callback ( AlgorithmMode  mode,
int  t,
double  f,
double  inf_pr,
double  inf_du,
double  mu,
double  d_norm,
double  regularization_ize,
double  alpha_du,
double  alpha_pr,
int  ls_trials,
const IpoptData ip_data,
IpoptCalculatedQuantities ip_cq 
)
virtual
char* MatlabProgram::geterrormsg ( ) const
int MatlabProgram::getnumiterations ( ) const
inline

Definition at line 57 of file matlabprogram.h.

virtual bool MatlabProgram::get_nlp_info ( int &  n,
int &  m,
int &  nnz_jac_g,
int &  nnz_h_lag,
IndexStyleEnum index_style 
)
virtual

overload this method to return the number of variables and constraints, and the number of non-zeros in the jacobian and the hessian.

The index_style parameter lets you specify C or Fortran style indexing for the sparse matrix iRow and jCol parameters. C_STYLE is 0-based, and FORTRAN_STYLE is 1-based.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::get_bounds_info ( int  n,
double *  x_l,
double *  x_u,
int  m,
double *  g_l,
double *  g_u 
)
virtual

overload this method to return the information about the bound on the variables and constraints.

The value that indicates that a bound does not exist is specified in the parameters nlp_lower_bound_inf and nlp_upper_bound_inf. By default, nlp_lower_bound_inf is -1e19 and nlp_upper_bound_inf is 1e19. (see TNLPAdapter)

Implements Ipopt::TNLP.

virtual bool MatlabProgram::get_starting_point ( int  n,
bool  init_x,
double *  x,
bool  init_z,
double *  z_L,
double *  z_U,
int  m,
bool  init_lambda,
double *  lambda 
)
virtual

overload this method to return the starting point.

The bool variables indicate whether the algorithm wants you to initialize x, z_L/z_u, and lambda, respectively. If, for some reason, the algorithm wants you to initialize these and you cannot, return false, which will cause Ipopt to stop. You will have to run Ipopt with different options then.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_f ( int  n,
const double *  x,
bool  new_x,
double &  obj_value 
)
virtual

overload this method to return the value of the objective function

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_grad_f ( int  n,
const double *  x,
bool  new_x,
double *  grad_f 
)
virtual

overload this method to return the vector of the gradient of the objective w.r.t.

x

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_g ( int  n,
const double *  x,
bool  new_x,
int  m,
double *  g 
)
virtual

overload this method to return the vector of constraint values

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_jac_g ( int  n,
const double *  x,
bool  new_x,
int  m,
int  nele_jac,
int *  iRow,
int *  jCol,
double *  values 
)
virtual

overload this method to return the jacobian of the constraints.

The vectors iRow and jCol only need to be set once. The first call is used to set the structure only (iRow and jCol will be non-NULL, and values will be NULL) For subsequent calls, iRow and jCol will be NULL.

Implements Ipopt::TNLP.

virtual bool MatlabProgram::eval_h ( int  n,
const double *  x,
bool  new_x,
double  obj_factor,
int  m,
const double *  lambda,
bool  new_lambda,
int  nele_hess,
int *  iRow,
int *  jCol,
double *  values 
)
virtual

overload this method to return the hessian of the lagrangian.

The vectors iRow and jCol only need to be set once (during the first call). The first call is used to set the structure only (iRow and jCol will be non-NULL, and values will be NULL) For subsequent calls, iRow and jCol will be NULL. This matrix is symmetric - specify the lower diagonal only. A default implementation is provided, in case the user wants to se quasi-Newton approximations to estimate the second derivatives and doesn't not neet to implement this method.

Reimplemented from Ipopt::TNLP.

virtual void MatlabProgram::finalize_solution ( SolverReturn  status,
int  numVariables,
const double *  variables,
const double *  zl,
const double *  zu,
int  numConstraints,
const double *  constraints,
const double *  lambda,
double  objective,
const IpoptData ip_data,
IpoptCalculatedQuantities ip_cq 
)
virtual
virtual bool MatlabProgram::intermediate_callback ( AlgorithmMode  mode,
int  iteration,
double  objective,
double  inf_pr,
double  inf_du,
double  mu,
double  d_norm,
double  regularization_ize,
double  alpha_du,
double  alpha_pr,
int  ls_trials,
const IpoptData ip_data,
IpoptCalculatedQuantities ip_cq 
)
virtual
MatlabProgram& MatlabProgram::operator= ( const MatlabProgram source)
inlineprotected

Definition at line 175 of file matlabprogram.h.

double MatlabProgram::computeObjective ( const ArrayOfMatrices x)
private
void MatlabProgram::computeGradient ( const ArrayOfMatrices x,
ArrayOfMatrices grad 
)
private
void MatlabProgram::computeConstraints ( const ArrayOfMatrices x,
Array< double > &  g 
)
private
void MatlabProgram::computeJacobian ( const ArrayOfMatrices x,
double *  Jacobian 
)
private
void MatlabProgram::computeHessian ( const ArrayOfMatrices x,
const Array< double > &  lambda,
double  sigma,
double *  Hessian 
)
private
mxArray* MatlabProgram::callMatlabJacobianRoutine ( const ArrayOfMatrices x,
bool  returnStructureOnly = true 
)
private
mxArray* MatlabProgram::callMatlabHessianRoutine ( const ArrayOfMatrices x,
const Array< double > &  lambda,
bool  returnStructureOnly = true,
double  sigma = 0 
)
private

Member Data Documentation

const Iterate& MatlabProgram::x0
protected

Definition at line 97 of file matlabprogram.hpp.

const CallbackFunctions& MatlabProgram::funcs
protected

Definition at line 98 of file matlabprogram.hpp.

const Options& MatlabProgram::options
protected

Definition at line 99 of file matlabprogram.hpp.

Iterate& MatlabProgram::x
protected

Definition at line 100 of file matlabprogram.hpp.

const mxArray* MatlabProgram::auxdata
protected

Definition at line 101 of file matlabprogram.hpp.

MatlabInfo& MatlabProgram::info
protected

Definition at line 102 of file matlabprogram.hpp.

SparseMatrix* MatlabProgram::J
protected

Definition at line 107 of file matlabprogram.hpp.

SparseMatrix* MatlabProgram::H
protected

Definition at line 108 of file matlabprogram.hpp.

const ArrayOfMatrices& MatlabProgram::x0
protected

Definition at line 128 of file matlabprogram.h.

const ArrayOfMatrices& MatlabProgram::lb
protected

Definition at line 129 of file matlabprogram.h.

const ArrayOfMatrices& MatlabProgram::ub
protected

Definition at line 130 of file matlabprogram.h.

const Matrix& MatlabProgram::constraintlb
protected

Definition at line 131 of file matlabprogram.h.

const Matrix& MatlabProgram::constraintub
protected

Definition at line 132 of file matlabprogram.h.

const mxArray* MatlabProgram::auxData
protected

Definition at line 133 of file matlabprogram.h.

ArrayOfMatrices& MatlabProgram::xsol
protected

Definition at line 135 of file matlabprogram.h.

ArrayOfMatrices* MatlabProgram::x
protected

Definition at line 136 of file matlabprogram.h.

Multipliers* MatlabProgram::initialMultipliers
protected

Definition at line 139 of file matlabprogram.h.

Multipliers* MatlabProgram::multipliers
protected

Definition at line 141 of file matlabprogram.h.

Array<double>* MatlabProgram::lambda
protected

Definition at line 144 of file matlabprogram.h.

int MatlabProgram::numiter
protected

Definition at line 148 of file matlabprogram.h.

mxArray** MatlabProgram::prhs
protected

Definition at line 152 of file matlabprogram.h.

mxArray* MatlabProgram::lambdarhs
protected

Definition at line 153 of file matlabprogram.h.

bool MatlabProgram::useQuasiNewton
protected

Definition at line 156 of file matlabprogram.h.

SparseMatrixStructure* MatlabProgram::JacobianStructure
protected

Definition at line 161 of file matlabprogram.h.

SparseMatrixStructure* MatlabProgram::HessianStructure
protected

Definition at line 162 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::objFunc
protected

Definition at line 165 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::gradFunc
protected

Definition at line 166 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::constraintFunc
protected

Definition at line 167 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::jacobianFunc
protected

Definition at line 168 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::hessianFunc
protected

Definition at line 169 of file matlabprogram.h.

const MatlabFunctionHandle& MatlabProgram::iterFunc
protected

Definition at line 170 of file matlabprogram.h.


The documentation for this class was generated from the following files: