Ipopt 3.11.9
Loading...
Searching...
No Matches
Ipopt.java
Go to the documentation of this file.
1
9package org.coinor;
10
11import java.io.File;
12
47public abstract class Ipopt
48{
50 private native boolean AddIpoptIntOption(long ipopt, String keyword, int val);
51
53 private native boolean AddIpoptNumOption(long ipopt, String keyword, double val);
54
56 private native boolean AddIpoptStrOption(long ipopt, String keyword, String val);
57
59 private native long CreateIpoptProblem(int n,int m,
60 int nele_jac, int nele_hess, int index_style);
61
63 private native void FreeIpoptProblem(long ipopt);
64
66 private native int OptimizeTNLP(long ipopt,
67 double x[], double g[],
68 double obj_val[], double mult_g[], double mult_x_L[], double mult_x_U[],
69 double callback_grad_f[], double callback_jac_g[], double callback_hess[]);
70
71
73 public static final String DLLNAME = "jipopt";
75 public static final String DLLPATH = "lib";
76
78 public final static int C_STYLE = 0;
80 public final static int FORTRAN_STYLE = 1;
81
83 public final static int SOLVE_SUCCEEDED = 0;
84 public final static int ACCEPTABLE_LEVEL = 1;
85 public final static int INFEASIBLE_PROBLEM = 2;
86 public final static int SEARCH_DIRECTION_TOO_SMALL = 3;
87 public final static int DIVERGING_ITERATES = 4;
88 public final static int USER_REQUESTED_STOP = 5;
89 public final static int ITERATION_EXCEEDED = -1;
90 public final static int RESTORATION_FAILED = -2;
91 public final static int ERROR_IN_STEP_COMPUTATION = -3;
92 public final static int CPUTIME_EXCEEDED = -4;
93 public final static int NOT_ENOUGH_DEGREES_OF_FRE = -10;
94 public final static int INVALID_PROBLEM_DEFINITION = -11;
95 public final static int INVALID_OPTION = -12;
96 public final static int INVALID_NUMBER_DETECTED = -13;
97 public final static int UNRECOVERABLE_EXCEPTION = -100;
98 public final static int NON_IPOPT_EXCEPTION = -101;
99 public final static int INSUFFICIENT_MEMORY = -102;
100 public final static int INTERNAL_ERROR = -199;
101
103 private long ipopt;
104
106 private double callback_grad_f[];
107 private double callback_jac_g[];
108 private double callback_hess[];
109
111 private double x[];
112
114 private double obj_val[] = {0.0};
115
117 private double g[];
118
120 private double mult_x_L[];
121
123 private double mult_x_U[];
124
126 private double mult_g[];
127
130
135 public Ipopt()
136 {
137 this(DLLPATH, DLLNAME);
138 }
139
148 public Ipopt(String path, String DLL)
149 {
150 // Loads the library
151 File file = new File(path, System.mapLibraryName(DLL));
152 System.load(file.getAbsolutePath());
153 }
154
156 abstract protected boolean get_bounds_info(int n, double[] x_l, double[] x_u,
157 int m, double[] g_l, double[] g_u);
158
160 abstract protected boolean get_starting_point(int n, boolean init_x, double[] x,
161 boolean init_z, double[] z_L, double[] z_U,
162 int m, boolean init_lambda, double[] lambda);
163
165 abstract protected boolean eval_f(int n, double[] x, boolean new_x, double[] obj_value);
166
168 abstract protected boolean eval_grad_f(int n, double[] x, boolean new_x, double[] grad_f);
169
171 abstract protected boolean eval_g(int n, double[] x, boolean new_x, int m, double[] g);
172
174 abstract protected boolean eval_jac_g(int n, double[] x, boolean new_x,
175 int m, int nele_jac, int[] iRow, int[] jCol, double[] values);
176
178 abstract protected boolean eval_h(int n, double[] x, boolean new_x, double obj_factor,
179 int m, double[] lambda, boolean new_lambda,
180 int nele_hess, int[] iRow, int[] jCol,
181 double[] values);
182
192 public void dispose()
193 {
194 // dispose the native implementation
195 if( ipopt != 0 )
196 {
198 ipopt = 0;
199 }
200 }
201
202 protected void finalize() throws Throwable
203 {
204 dispose();
205 }
206
217 public boolean create(int n, int m, int nele_jac, int nele_hess, int index_style)
218 {
219 // delete any previously created native memory
220 dispose();
221
222 x = new double[n];
223 // allocate the callback arguments
224 callback_grad_f = new double[n];
225 callback_jac_g = new double[nele_jac];
226 callback_hess = new double[nele_hess];
227
228 // the multiplier
229 mult_x_U = new double[n];
230 mult_x_L = new double[n];
231 g = new double[m];
232 mult_g = new double[m];
233
234 // Create the optimization problem and return a pointer to it
236
237 //System.out.println("Finish Java Obj");
238 return ipopt == 0 ? false : true;
239 }
240
249 public boolean setIntegerOption(String keyword, int val)
250 {
251 return ipopt == 0 ? false : AddIpoptIntOption(ipopt, keyword, val);
252 }
253
262 public boolean setNumericOption(String keyword, double val)
263 {
264 return ipopt == 0 ? false : AddIpoptNumOption(ipopt, keyword, val);
265 }
266
275 public boolean setStringOption(String keyword, String val)
276 {
277 return ipopt == 0 ? false : AddIpoptStrOption(ipopt, keyword, val.toLowerCase());
278 }
279
290 public int OptimizeNLP()
291 {
292 this.status = this.OptimizeTNLP(ipopt,
295
296 return this.status;
297 }
298
302 public double[] getVariableValues()
303 {
304 return x;
305 }
306
310 public double getObjectiveValue()
311 {
312 return obj_val[0];
313 }
314
320 public int getStatus()
321 {
322 return status;
323 }
324
328 public double[] getConstraintValues()
329 {
330 return g;
331 }
332
336 public double[] getConstraintMultipliers()
337 {
338 return mult_g;
339 }
340
344 public double[] getLowerBoundMultipliers()
345 {
346 return mult_x_L;
347 }
348
352 public double[] getUpperBoundMultipliers()
353 {
354 return mult_x_U;
355 }
356
371 public boolean get_scaling_parameters(double[] obj_scaling,
372 int n, double[] x_scaling,
373 int m, double[] g_scaling,
374 boolean[] use_x_g_scaling)
375 {
376 return false;
377 }
378
384 {
385 return -1;
386 }
387
395 public boolean get_list_of_nonlinear_variables(int num_nonlin_vars,
396 int[] pos_nonlin_vars)
397 {
398 return false;
399 }
400}
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
Number Number * x_scaling
char * keyword
Number obj_scaling
char char * val
Number Number Number * g_scaling
Number Number Index m
Number of constraints.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
abstract boolean eval_g(int n, double[] x, boolean new_x, int m, double[] g)
Callback function for the constraints.
static final int SOLVE_SUCCEEDED
The possible Ipopt status return codes: should be kept in sync with Ipopt return codes.
Definition Ipopt.java:83
boolean setStringOption(String keyword, String val)
Function for setting a string option.
Definition Ipopt.java:275
double callback_hess[]
Definition Ipopt.java:108
static final int DIVERGING_ITERATES
Definition Ipopt.java:87
static final int INFEASIBLE_PROBLEM
Definition Ipopt.java:85
abstract boolean get_starting_point(int n, boolean init_x, double[] x, boolean init_z, double[] z_L, double[] z_U, int m, boolean init_lambda, double[] lambda)
Callback function for retrieving a starting point.
boolean get_scaling_parameters(double[] obj_scaling, int n, double[] x_scaling, int m, double[] g_scaling, boolean[] use_x_g_scaling)
If you using_scaling_parameters = true, please overload this method,.
Definition Ipopt.java:371
abstract boolean eval_jac_g(int n, double[] x, boolean new_x, int m, int nele_jac, int[] iRow, int[] jCol, double[] values)
Callback function for the constraints Jacobian.
native boolean AddIpoptIntOption(long ipopt, String keyword, int val)
Native function should not be used directly.
double[] getUpperBoundMultipliers()
Gives dual multipliers for variable upper bounds in final point.
Definition Ipopt.java:352
double[] getConstraintValues()
Gives constraint function values at final point.
Definition Ipopt.java:328
static final String DLLPATH
The relative path where the native DLL is found.
Definition Ipopt.java:75
double callback_jac_g[]
Definition Ipopt.java:107
Ipopt(String path, String DLL)
Creates a NLP Solver for the given DLL file.
Definition Ipopt.java:148
static final int UNRECOVERABLE_EXCEPTION
Definition Ipopt.java:97
double mult_x_U[]
Final multipliers for upper variable bounds.
Definition Ipopt.java:123
static final int C_STYLE
Use C index style for iRow and jCol vectors.
Definition Ipopt.java:78
double g[]
Values of constraint at final point.
Definition Ipopt.java:117
double x[]
Final value of variable values.
Definition Ipopt.java:111
native int OptimizeTNLP(long ipopt, double x[], double g[], double obj_val[], double mult_g[], double mult_x_L[], double mult_x_U[], double callback_grad_f[], double callback_jac_g[], double callback_hess[])
Native function should not be used directly.
native void FreeIpoptProblem(long ipopt)
Native function should not be used directly.
int status
Status returned by the solver.
Definition Ipopt.java:129
static final int INSUFFICIENT_MEMORY
Definition Ipopt.java:99
static final int NOT_ENOUGH_DEGREES_OF_FRE
Definition Ipopt.java:93
static final int INVALID_PROBLEM_DEFINITION
Definition Ipopt.java:94
double getObjectiveValue()
Gives objective function value at final point.
Definition Ipopt.java:310
void dispose()
Dispose of the natively allocated memory.
Definition Ipopt.java:192
static final int SEARCH_DIRECTION_TOO_SMALL
Definition Ipopt.java:86
abstract boolean eval_grad_f(int n, double[] x, boolean new_x, double[] grad_f)
Callback function for the objective function gradient.
boolean setIntegerOption(String keyword, int val)
Function for setting an integer option.
Definition Ipopt.java:249
static final int ITERATION_EXCEEDED
Definition Ipopt.java:89
abstract boolean eval_f(int n, double[] x, boolean new_x, double[] obj_value)
Callback function for the objective function.
abstract boolean eval_h(int n, double[] x, boolean new_x, double obj_factor, int m, double[] lambda, boolean new_lambda, int nele_hess, int[] iRow, int[] jCol, double[] values)
Callback function for the hessian.
native boolean AddIpoptStrOption(long ipopt, String keyword, String val)
Native function should not be used directly.
static final int INVALID_NUMBER_DETECTED
Definition Ipopt.java:96
double[] getLowerBoundMultipliers()
Gives dual multipliers for variable lower bounds in final point.
Definition Ipopt.java:344
boolean create(int n, int m, int nele_jac, int nele_hess, int index_style)
Create a new problem.
Definition Ipopt.java:217
boolean get_list_of_nonlinear_variables(int num_nonlin_vars, int[] pos_nonlin_vars)
When LBFGS hessian approximation is used, this method should be overloaded.
Definition Ipopt.java:395
double obj_val[]
Final value of objective function.
Definition Ipopt.java:114
int getStatus()
Gives Ipopt status of last OptimizeNLP call.
Definition Ipopt.java:320
static final int INVALID_OPTION
Definition Ipopt.java:95
static final int ACCEPTABLE_LEVEL
Definition Ipopt.java:84
long ipopt
Pointer to the native optimization object.
Definition Ipopt.java:103
double mult_g[]
Final multipliers for constraints.
Definition Ipopt.java:126
double[] getConstraintMultipliers()
Gives constraint dual multipliers in final point.
Definition Ipopt.java:336
Ipopt()
Creates a new NLP Solver using {@value #DLLPATH} as path and {@value #DLLNAME} as the DLL name.
Definition Ipopt.java:135
double mult_x_L[]
Final multipliers for lower variable bounds.
Definition Ipopt.java:120
static final int ERROR_IN_STEP_COMPUTATION
Definition Ipopt.java:91
static final int USER_REQUESTED_STOP
Definition Ipopt.java:88
native boolean AddIpoptNumOption(long ipopt, String keyword, double val)
Native function should not be used directly.
static final int NON_IPOPT_EXCEPTION
Definition Ipopt.java:98
static final String DLLNAME
The default DLL name of the native implementation (without any platform dependent prefixes or suffixe...
Definition Ipopt.java:73
boolean setNumericOption(String keyword, double val)
Function for setting a number option.
Definition Ipopt.java:262
static final int RESTORATION_FAILED
Definition Ipopt.java:90
abstract boolean get_bounds_info(int n, double[] x_l, double[] x_u, int m, double[] g_l, double[] g_u)
Callback function for the variable bounds and constraint sides.
static final int FORTRAN_STYLE
Use FORTRAN index style for iRow and jCol vectors.
Definition Ipopt.java:80
native long CreateIpoptProblem(int n, int m, int nele_jac, int nele_hess, int index_style)
Native function should not be used directly.
int OptimizeNLP()
This function actually solve the problem.
Definition Ipopt.java:290
int get_number_of_nonlinear_variables()
When LBFGS hessian approximation is used, this method should be overloaded.
Definition Ipopt.java:383
double callback_grad_f[]
Callback arguments.
Definition Ipopt.java:106
double[] getVariableValues()
Gives primal variable values at final point.
Definition Ipopt.java:302
static final int CPUTIME_EXCEEDED
Definition Ipopt.java:92
void finalize()
Definition Ipopt.java:202
static final int INTERNAL_ERROR
Definition Ipopt.java:100