You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
13 KiB
271 lines
13 KiB
/*************************************************************************
|
|
Copyright (C) 2004, 2010 International Business Machines and others.
|
|
All Rights Reserved.
|
|
This code is published under the Eclipse Public License.
|
|
|
|
$Id: IpStdCInterface.h 2082 2012-02-16 03:00:34Z andreasw $
|
|
|
|
Authors: Carl Laird, Andreas Waechter IBM 2004-09-02
|
|
*************************************************************************/
|
|
|
|
#ifndef __IPSTDCINTERFACE_H__
|
|
#define __IPSTDCINTERFACE_H__
|
|
|
|
#ifndef IPOPT_EXPORT
|
|
#ifdef _MSC_VER
|
|
#ifdef IPOPT_DLL
|
|
#define IPOPT_EXPORT(type) __declspec(dllexport) type __cdecl
|
|
#else
|
|
#define IPOPT_EXPORT(type) type __cdecl
|
|
#endif
|
|
#else
|
|
#define IPOPT_EXPORT(type) type
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/** Type for all number. We need to make sure that this is
|
|
identical with what is defined in Common/IpTypes.hpp */
|
|
typedef double Number;
|
|
|
|
/** Type for all incides. We need to make sure that this is
|
|
identical with what is defined in Common/IpTypes.hpp */
|
|
typedef int Index;
|
|
|
|
/** Type for all integers. We need to make sure that this is
|
|
identical with what is defined in Common/IpTypes.hpp */
|
|
typedef int Int;
|
|
|
|
/* This includes the SolverReturn enum type */
|
|
#include "IpReturnCodes.h"
|
|
|
|
/** Structure collecting all information about the problem
|
|
* definition and solve statistics etc. This is defined in the
|
|
* source file. */
|
|
struct IpoptProblemInfo;
|
|
|
|
/** Pointer to a Ipopt Problem. */
|
|
typedef struct IpoptProblemInfo* IpoptProblem;
|
|
|
|
/** define a boolean type for C */
|
|
typedef int Bool;
|
|
#ifndef TRUE
|
|
# define TRUE (1)
|
|
#endif
|
|
#ifndef FALSE
|
|
# define FALSE (0)
|
|
#endif
|
|
|
|
/** A pointer for anything that is to be passed between the called
|
|
* and individual callback function */
|
|
typedef void * UserDataPtr;
|
|
|
|
/** Type defining the callback function for evaluating the value of
|
|
* the objective function. Return value should be set to false if
|
|
* there was a problem doing the evaluation. */
|
|
typedef Bool (*Eval_F_CB)(Index n, Number* x, Bool new_x,
|
|
Number* obj_value, UserDataPtr user_data);
|
|
|
|
/** Type defining the callback function for evaluating the gradient of
|
|
* the objective function. Return value should be set to false if
|
|
* there was a problem doing the evaluation. */
|
|
typedef Bool (*Eval_Grad_F_CB)(Index n, Number* x, Bool new_x,
|
|
Number* grad_f, UserDataPtr user_data);
|
|
|
|
/** Type defining the callback function for evaluating the value of
|
|
* the constraint functions. Return value should be set to false if
|
|
* there was a problem doing the evaluation. */
|
|
typedef Bool (*Eval_G_CB)(Index n, Number* x, Bool new_x,
|
|
Index m, Number* g, UserDataPtr user_data);
|
|
|
|
/** Type defining the callback function for evaluating the Jacobian of
|
|
* the constrant functions. Return value should be set to false if
|
|
* there was a problem doing the evaluation. */
|
|
typedef Bool (*Eval_Jac_G_CB)(Index n, Number *x, Bool new_x,
|
|
Index m, Index nele_jac,
|
|
Index *iRow, Index *jCol, Number *values,
|
|
UserDataPtr user_data);
|
|
|
|
/** Type defining the callback function for evaluating the Hessian of
|
|
* the Lagrangian function. Return value should be set to false if
|
|
* there was a problem doing the evaluation. */
|
|
typedef Bool (*Eval_H_CB)(Index n, Number *x, Bool new_x, Number obj_factor,
|
|
Index m, Number *lambda, Bool new_lambda,
|
|
Index nele_hess, Index *iRow, Index *jCol,
|
|
Number *values, UserDataPtr user_data);
|
|
|
|
/** Type defining the callback function for giving intermediate
|
|
* execution control to the user. If set, it is called once per
|
|
* iteration, providing the user with some information on the state
|
|
* of the optimization. This can be used to print some
|
|
* user-defined output. It also gives the user a way to terminate
|
|
* the optimization prematurely. If this method returns false,
|
|
* Ipopt will terminate the optimization. */
|
|
typedef Bool (*Intermediate_CB)(Index alg_mod, /* 0 is regular, 1 is resto */
|
|
Index iter_count, 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, UserDataPtr user_data);
|
|
|
|
/** Function for creating a new Ipopt Problem object. This function
|
|
* returns an object that can be passed to the IpoptSolve call. It
|
|
* contains the basic definition of the optimization problem, such
|
|
* as number of variables and constraints, bounds on variables and
|
|
* constraints, information about the derivatives, and the callback
|
|
* function for the computation of the optimization problem
|
|
* functions and derivatives. During this call, the options file
|
|
* PARAMS.DAT is read as well.
|
|
*
|
|
* If NULL is returned, there was a problem with one of the inputs
|
|
* or reading the options file. */
|
|
IPOPT_EXPORT(IpoptProblem) CreateIpoptProblem(
|
|
Index n /** Number of optimization variables */
|
|
, Number* x_L /** Lower bounds on variables. This array of
|
|
size n is copied internally, so that the
|
|
caller can change the incoming data after
|
|
return without that IpoptProblem is
|
|
modified. Any value less or equal than
|
|
the number specified by option
|
|
'nlp_lower_bound_inf' is interpreted to
|
|
be minus infinity. */
|
|
, Number* x_U /** Upper bounds on variables. This array of
|
|
size n is copied internally, so that the
|
|
caller can change the incoming data after
|
|
return without that IpoptProblem is
|
|
modified. Any value greater or equal
|
|
than the number specified by option
|
|
'nlp_upper_bound_inf' is interpreted to
|
|
be plus infinity. */
|
|
, Index m /** Number of constraints. */
|
|
, Number* g_L /** Lower bounds on constraints. This array of
|
|
size m is copied internally, so that the
|
|
caller can change the incoming data after
|
|
return without that IpoptProblem is
|
|
modified. Any value less or equal than
|
|
the number specified by option
|
|
'nlp_lower_bound_inf' is interpreted to
|
|
be minus infinity. */
|
|
, Number* g_U /** Upper bounds on constraints. This array of
|
|
size m is copied internally, so that the
|
|
caller can change the incoming data after
|
|
return without that IpoptProblem is
|
|
modified. Any value greater or equal
|
|
than the number specified by option
|
|
'nlp_upper_bound_inf' is interpreted to
|
|
be plus infinity. */
|
|
, Index nele_jac /** Number of non-zero elements in constraint
|
|
Jacobian. */
|
|
, Index nele_hess /** Number of non-zero elements in Hessian of
|
|
Lagrangian. */
|
|
, Index index_style /** indexing style for iRow & jCol,
|
|
0 for C style, 1 for Fortran style */
|
|
, Eval_F_CB eval_f /** Callback function for evaluating
|
|
objective function */
|
|
, Eval_G_CB eval_g /** Callback function for evaluating
|
|
constraint functions */
|
|
, Eval_Grad_F_CB eval_grad_f
|
|
/** Callback function for evaluating gradient
|
|
of objective function */
|
|
, Eval_Jac_G_CB eval_jac_g
|
|
/** Callback function for evaluating Jacobian
|
|
of constraint functions */
|
|
, Eval_H_CB eval_h /** Callback function for evaluating Hessian
|
|
of Lagrangian function */
|
|
);
|
|
|
|
/** Method for freeing a previously created IpoptProblem. After
|
|
freeing an IpoptProblem, it cannot be used anymore. */
|
|
IPOPT_EXPORT(void) FreeIpoptProblem(IpoptProblem ipopt_problem);
|
|
|
|
|
|
/** Function for adding a string option. Returns FALSE the option
|
|
* could not be set (e.g., if keyword is unknown) */
|
|
IPOPT_EXPORT(Bool) AddIpoptStrOption(IpoptProblem ipopt_problem, char* keyword, char* val);
|
|
|
|
/** Function for adding a Number option. Returns FALSE the option
|
|
* could not be set (e.g., if keyword is unknown) */
|
|
IPOPT_EXPORT(Bool) AddIpoptNumOption(IpoptProblem ipopt_problem, char* keyword, Number val);
|
|
|
|
/** Function for adding an Int option. Returns FALSE the option
|
|
* could not be set (e.g., if keyword is unknown) */
|
|
IPOPT_EXPORT(Bool) AddIpoptIntOption(IpoptProblem ipopt_problem, char* keyword, Int val);
|
|
|
|
/** Function for opening an output file for a given name with given
|
|
* printlevel. Returns false, if there was a problem opening the
|
|
* file. */
|
|
IPOPT_EXPORT(Bool) OpenIpoptOutputFile(IpoptProblem ipopt_problem, char* file_name,
|
|
Int print_level);
|
|
|
|
/** Optional function for setting scaling parameter for the NLP.
|
|
* This corresponds to the get_scaling_parameters method in TNLP.
|
|
* If the pointers x_scaling or g_scaling are NULL, then no scaling
|
|
* for x resp. g is done. */
|
|
IPOPT_EXPORT(Bool) SetIpoptProblemScaling(IpoptProblem ipopt_problem,
|
|
Number obj_scaling,
|
|
Number* x_scaling,
|
|
Number* g_scaling);
|
|
|
|
/** Setting a callback function for the "intermediate callback"
|
|
* method in the TNLP. This gives control back to the user once
|
|
* per iteration. If set, it provides the user with some
|
|
* information on the state of the optimization. This can be used
|
|
* to print some user-defined output. It also gives the user a way
|
|
* to terminate the optimization prematurely. If the callback
|
|
* method returns false, Ipopt will terminate the optimization.
|
|
* Calling this set method to set the CB pointer to NULL disables
|
|
* the intermediate callback functionality. */
|
|
IPOPT_EXPORT(Bool) SetIntermediateCallback(IpoptProblem ipopt_problem,
|
|
Intermediate_CB intermediate_cb);
|
|
|
|
/** Function calling the Ipopt optimization algorithm for a problem
|
|
previously defined with CreateIpoptProblem. The return
|
|
specified outcome of the optimization procedure (e.g., success,
|
|
failure etc).
|
|
*/
|
|
IPOPT_EXPORT(enum ApplicationReturnStatus) IpoptSolve(
|
|
IpoptProblem ipopt_problem
|
|
/** Problem that is to be optimized. Ipopt
|
|
will use the options previously specified with
|
|
AddIpoptOption (etc) for this problem. */
|
|
, Number* x /** Input: Starting point
|
|
Output: Optimal solution */
|
|
, Number* g /** Values of constraint at final point
|
|
(output only - ignored if set to NULL) */
|
|
, Number* obj_val /** Final value of objective function
|
|
(output only - ignored if set to NULL) */
|
|
, Number* mult_g /** Input: Initial values for the constraint
|
|
multipliers (only if warm start option
|
|
is chosen)
|
|
Output: Final multipliers for constraints
|
|
(ignored if set to NULL) */
|
|
, Number* mult_x_L /** Input: Initial values for the multipliers for
|
|
lower variable bounds (only if warm start
|
|
option is chosen)
|
|
Output: Final multipliers for lower variable
|
|
bounds (ignored if set to NULL) */
|
|
, Number* mult_x_U /** Input: Initial values for the multipliers for
|
|
upper variable bounds (only if warm start
|
|
option is chosen)
|
|
Output: Final multipliers for upper variable
|
|
bounds (ignored if set to NULL) */
|
|
, UserDataPtr user_data
|
|
/** Pointer to user data. This will be
|
|
passed unmodified to the callback
|
|
functions. */
|
|
);
|
|
|
|
/**
|
|
void IpoptStatisticsCounts;
|
|
|
|
void IpoptStatisticsInfeasibilities; */
|
|
#ifdef __cplusplus
|
|
} /* extern "C" { */
|
|
#endif
|
|
|
|
#endif
|
|
|