00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __IPSTDCINTERFACE_H__
00012 #define __IPSTDCINTERFACE_H__
00013
00014 #ifndef IPOPT_EXPORT
00015 #ifdef _MSC_VER
00016 #ifdef IPOPT_DLL
00017 #define IPOPT_EXPORT(type) __declspec(dllexport) type __cdecl
00018 #else
00019 #define IPOPT_EXPORT(type) type __cdecl
00020 #endif
00021 #else
00022 #define IPOPT_EXPORT(type) type
00023 #endif
00024 #endif
00025
00026 #ifdef __cplusplus
00027 extern "C"
00028 {
00029 #endif
00030
00033 typedef double Number;
00034
00037 typedef int Index;
00038
00041 typedef int Int;
00042
00043
00044 #include "IpReturnCodes.h"
00045
00049 struct IpoptProblemInfo;
00050
00052 typedef struct IpoptProblemInfo* IpoptProblem;
00053
00055 typedef int Bool;
00056 #ifndef TRUE
00057 # define TRUE (1)
00058 #endif
00059 #ifndef FALSE
00060 # define FALSE (0)
00061 #endif
00062
00065 typedef void * UserDataPtr;
00066
00070 typedef Bool (*Eval_F_CB)(Index n, Number* x, Bool new_x,
00071 Number* obj_value, UserDataPtr user_data);
00072
00076 typedef Bool (*Eval_Grad_F_CB)(Index n, Number* x, Bool new_x,
00077 Number* grad_f, UserDataPtr user_data);
00078
00082 typedef Bool (*Eval_G_CB)(Index n, Number* x, Bool new_x,
00083 Index m, Number* g, UserDataPtr user_data);
00084
00088 typedef Bool (*Eval_Jac_G_CB)(Index n, Number *x, Bool new_x,
00089 Index m, Index nele_jac,
00090 Index *iRow, Index *jCol, Number *values,
00091 UserDataPtr user_data);
00092
00096 typedef Bool (*Eval_H_CB)(Index n, Number *x, Bool new_x, Number obj_factor,
00097 Index m, Number *lambda, Bool new_lambda,
00098 Index nele_hess, Index *iRow, Index *jCol,
00099 Number *values, UserDataPtr user_data);
00100
00108 typedef Bool (*Intermediate_CB)(Index alg_mod,
00109 Index iter_count, Number obj_value,
00110 Number inf_pr, Number inf_du,
00111 Number mu, Number d_norm,
00112 Number regularization_size,
00113 Number alpha_du, Number alpha_pr,
00114 Index ls_trials, UserDataPtr user_data);
00115
00127 IPOPT_EXPORT(IpoptProblem) CreateIpoptProblem(
00128 Index n
00129 , Number* x_L
00137 , Number* x_U
00145 , Index m
00146 , Number* g_L
00154 , Number* g_U
00162 , Index nele_jac
00164 , Index nele_hess
00166 , Index index_style
00168 , Eval_F_CB eval_f
00170 , Eval_G_CB eval_g
00172 , Eval_Grad_F_CB eval_grad_f
00175 , Eval_Jac_G_CB eval_jac_g
00178 , Eval_H_CB eval_h
00180 );
00181
00184 IPOPT_EXPORT(void) FreeIpoptProblem(IpoptProblem ipopt_problem);
00185
00186
00189 IPOPT_EXPORT(Bool) AddIpoptStrOption(IpoptProblem ipopt_problem, char* keyword, char* val);
00190
00193 IPOPT_EXPORT(Bool) AddIpoptNumOption(IpoptProblem ipopt_problem, char* keyword, Number val);
00194
00197 IPOPT_EXPORT(Bool) AddIpoptIntOption(IpoptProblem ipopt_problem, char* keyword, Int val);
00198
00202 IPOPT_EXPORT(Bool) OpenIpoptOutputFile(IpoptProblem ipopt_problem, char* file_name,
00203 Int print_level);
00204
00209 IPOPT_EXPORT(Bool) SetIpoptProblemScaling(IpoptProblem ipopt_problem,
00210 Number obj_scaling,
00211 Number* x_scaling,
00212 Number* g_scaling);
00213
00223 IPOPT_EXPORT(Bool) SetIntermediateCallback(IpoptProblem ipopt_problem,
00224 Intermediate_CB intermediate_cb);
00225
00231 IPOPT_EXPORT(enum ApplicationReturnStatus) IpoptSolve(
00232 IpoptProblem ipopt_problem
00236 , Number* x
00238 , Number* g
00240 , Number* obj_val
00242 , Number* mult_g
00247 , Number* mult_x_L
00252 , Number* mult_x_U
00257 , UserDataPtr user_data
00261 );
00262
00267 #ifdef __cplusplus
00268 }
00269 #endif
00270
00271 #endif