Ipopt  3.11.9
Ipopt.java
Go to the documentation of this file.
1 
9 package org.coinor;
10 
11 import java.io.File;
12 
47 public 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
double[] getVariableValues()
Gives primal variable values at final point.
Definition: Ipopt.java:302
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
double[] getConstraintMultipliers()
Gives constraint dual multipliers in final point.
Definition: Ipopt.java:336
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.
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
double[] getConstraintValues()
Gives constraint function values at final point.
Definition: Ipopt.java:328
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
double[] getUpperBoundMultipliers()
Gives dual multipliers for variable upper bounds in final point.
Definition: Ipopt.java:352
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
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
double[] getLowerBoundMultipliers()
Gives dual multipliers for variable lower bounds in final point.
Definition: Ipopt.java:344
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
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
static final int CPUTIME_EXCEEDED
Definition: Ipopt.java:92
void finalize()
Definition: Ipopt.java:202
static final int INTERNAL_ERROR
Definition: Ipopt.java:100