Ipopt 3.11.9
Loading...
Searching...
No Matches
callbackfunctions.hpp
Go to the documentation of this file.
1// Copyright (C) 2008 Peter Carbonetto. All Rights Reserved.
2// This code is published under the Eclipse Public License.
3//
4// Author: Peter Carbonetto
5// Dept. of Computer Science
6// University of British Columbia
7// September 18, 2008
8
9#ifndef INCLUDE_CALLBACKFUNCTIONS
10#define INCLUDE_CALLBACKFUNCTIONS
11
12#include "mex.h"
13#include "iterate.hpp"
14#include "sparsematrix.hpp"
17#include "IpIpoptData.hpp"
18#include "IpTNLPAdapter.hpp"
19#include "IpOrigIpoptNLP.hpp"
20
21// Class CallbackFunctions.
22// -----------------------------------------------------------------
23// An object of this class does two things. First of all, it stores
24// handles to MATLAB functions (type HELP FUNCTION_HANDLE in the
25// MATLAB console) for all the necessary and optional callback
26// functions for IPOPT. Secondly, this class actually provides the
27// routines for calling these functions with the necessary inputs and
28// outputs.
30public:
31
32 // The constructor must be provided with a single MATLAB array, and
33 // this MATLAB array must be a structure array in which each field
34 // is a function handle.
35 explicit CallbackFunctions (const mxArray* ptr);
36
37 // The destructor.
39
40 // These functions return true if the respective callback functions
41 // are available.
42 bool constraintFuncIsAvailable() const { return *constraintfunc; };
43 bool jacobianFuncIsAvailable () const { return *jacobianfunc; };
44 bool hessianFuncIsAvailable () const { return *hessianfunc; };
45 bool iterFuncIsAvailable () const { return *iterfunc; };
46
47 // These functions execute the various callback functions with the
48 // appropriate inputs and outputs. Here, m is the number of constraints.
49 // The first function returns the value of the objective at x.
50 double computeObjective (const Iterate& x) const;
51
52 // This function computes the value of the gradient at x, and
53 // returns the gradient entries in the array g, which must be of
54 // length equal to the number of optimization variables.
55 void computeGradient (const Iterate& x, double* g) const;
56
57 // This function computes the response of the vector-valued
58 // constraint function at x, and stores the result in the array c
59 // which must be of length m.
60 void computeConstraints (const Iterate& x, int m, double* c) const;
61
62 // This function gets the structure of the sparse m x n Jacobian matrix.
63 SparseMatrix* getJacobianStructure (int n, int m) const;
64
65 // This function gets the structure of the sparse n x n Hessian matrix.
67
68 // This function computes the Jacobian of the constraints at x.
69 void computeJacobian (int m, const Iterate& x, SparseMatrix& J) const;
70
71 // This function computes the Hessian of the Lagrangian at x.
72 void computeHessian (const Iterate& x, double sigma, int m,
73 const double* lambda, SparseMatrix& H) const;
74
75 // Call the intermediate callback function. A return value of false
76 // tells IPOPT to terminate.
77 bool iterCallback (int t, double f,
78 double inf_pr, double inf_du,
79 double mu, double d_norm,
80 double regularization_size,
81 double alpha_du, double alpha_pr,
82 int ls_trials, const Ipopt::IpoptData* ip_data,
84 int n) const;
85
86protected:
87 MatlabFunctionHandle* objfunc; // Objective callback function.
88 MatlabFunctionHandle* gradfunc; // Gradient callback function.
89 MatlabFunctionHandle* constraintfunc; // Constraint callback function.
90 MatlabFunctionHandle* jacobianfunc; // Jacobian callback function.
91 MatlabFunctionHandle* jacstrucfunc; // Jacobian structure function.
92 MatlabFunctionHandle* hessianfunc; // Hessian callback function.
93 MatlabFunctionHandle* hesstrucfunc; // Hessian structure function.
94 MatlabFunctionHandle* iterfunc; // Iterative callback function.
95};
96
97#endif
Number * x
Input: Starting point Output: Optimal solution.
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
Number Number Index m
Number of constraints.
void computeJacobian(int m, const Iterate &x, SparseMatrix &J) const
double computeObjective(const Iterate &x) const
SparseMatrix * getJacobianStructure(int n, int m) const
MatlabFunctionHandle * hesstrucfunc
SparseMatrix * getHessianStructure(int n) const
MatlabFunctionHandle * hessianfunc
MatlabFunctionHandle * iterfunc
bool jacobianFuncIsAvailable() const
void computeGradient(const Iterate &x, double *g) const
bool iterCallback(int t, double f, double inf_pr, double inf_du, double mu, double d_norm, double regularization_size, double alpha_du, double alpha_pr, int ls_trials, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq, int n) const
MatlabFunctionHandle * objfunc
MatlabFunctionHandle * gradfunc
MatlabFunctionHandle * jacstrucfunc
CallbackFunctions(const mxArray *ptr)
bool constraintFuncIsAvailable() const
void computeConstraints(const Iterate &x, int m, double *c) const
MatlabFunctionHandle * constraintfunc
bool iterFuncIsAvailable() const
bool hessianFuncIsAvailable() const
void computeHessian(const Iterate &x, double sigma, int m, const double *lambda, SparseMatrix &H) const
MatlabFunctionHandle * jacobianfunc
Class for all IPOPT specific calculated quantities.
Class to organize all the data required by the algorithm.