- Main Page
- Classes
- Files

- File List
- File Members

# contrib/JavaInterface/org/coinor/Ipopt.java

Go to the documentation of this file.

    00001
    00009 package org.coinor;
    00010
    00011 import java.io.File;
    00012
    00047 public abstract class Ipopt
    00048 {
    00050     private native boolean AddIpoptIntOption(long ipopt, String keyword, int val);
    00051
    00053     private native boolean AddIpoptNumOption(long ipopt, String keyword, double val);
    00054
    00056     private native boolean AddIpoptStrOption(long ipopt, String keyword, String val);
    00057
    00059     private native long CreateIpoptProblem(int n,int m,
    00060             int nele_jac, int nele_hess, int index_style);
    00061
    00063     private native void FreeIpoptProblem(long ipopt);
    00064
    00066     private native int OptimizeTNLP(long ipopt,
    00067             double x[], double g[],
    00068             double obj_val[], double mult_g[], double mult_x_L[], double mult_x_U[],
    00069             double callback_grad_f[], double callback_jac_g[], double callback_hess[]);
    00070
    00071
    00073     public static final String DLLNAME = "jipopt";
    00075     public static final String DLLPATH = "lib";
    00076
    00078     public final static int C_STYLE = 0;
    00080     public final static int FORTRAN_STYLE = 1;
    00081
    00083     public final static int SOLVE_SUCCEEDED = 0;
    00084     public final static int ACCEPTABLE_LEVEL = 1;
    00085     public final static int INFEASIBLE_PROBLEM = 2;
    00086     public final static int SEARCH_DIRECTION_TOO_SMALL = 3;
    00087     public final static int DIVERGING_ITERATES = 4;
    00088     public final static int USER_REQUESTED_STOP = 5;
    00089     public final static int ITERATION_EXCEEDED = -1;
    00090     public final static int RESTORATION_FAILED = -2;
    00091     public final static int ERROR_IN_STEP_COMPUTATION = -3;
    00092     public final static int CPUTIME_EXCEEDED = -4;
    00093     public final static int NOT_ENOUGH_DEGREES_OF_FRE = -10;
    00094     public final static int INVALID_PROBLEM_DEFINITION = -11;
    00095     public final static int INVALID_OPTION = -12;
    00096     public final static int INVALID_NUMBER_DETECTED = -13;
    00097     public final static int UNRECOVERABLE_EXCEPTION = -100;
    00098     public final static int NON_IPOPT_EXCEPTION = -101;
    00099     public final static int INSUFFICIENT_MEMORY = -102;
    00100     public final static int INTERNAL_ERROR = -199;
    00101
    00103     private long ipopt;
    00104
    00106     private double callback_grad_f[];
    00107     private double callback_jac_g[];
    00108     private double callback_hess[];
    00109
    00111     private double x[];
    00112
    00114     private double obj_val[] = {0.0};
    00115
    00117     private double g[];
    00118
    00120     private double mult_x_L[];
    00121
    00123     private double mult_x_U[];
    00124
    00126     private double mult_g[];
    00127
    00129     private int status = INVALID_PROBLEM_DEFINITION;
    00130
    00135     public Ipopt()
    00136     {
    00137         this(DLLPATH, DLLNAME);
    00138     }
    00139
    00148     public Ipopt(String path, String DLL)
    00149     {
    00150         // Loads the library
    00151         File file = new File(path, System.mapLibraryName(DLL));
    00152         System.load(file.getAbsolutePath());
    00153     }
    00154
    00156     abstract protected boolean get_bounds_info(int n, double[] x_l, double[] x_u,
    00157             int m, double[] g_l, double[] g_u);
    00158
    00160     abstract protected boolean get_starting_point(int n, boolean init_x, double[] x,
    00161             boolean init_z, double[] z_L, double[] z_U,
    00162             int m, boolean init_lambda, double[] lambda);
    00163
    00165     abstract protected boolean eval_f(int n, double[] x, boolean new_x, double[] obj_value);
    00166
    00168     abstract protected boolean eval_grad_f(int n, double[] x, boolean new_x, double[] grad_f);
    00169
    00171     abstract protected boolean eval_g(int n, double[] x, boolean new_x, int m, double[] g);
    00172
    00174     abstract protected boolean eval_jac_g(int n, double[] x, boolean new_x,
    00175             int m, int nele_jac, int[] iRow, int[] jCol, double[] values);
    00176
    00178     abstract protected boolean eval_h(int n, double[] x, boolean new_x, double obj_factor,
    00179             int m, double[] lambda, boolean new_lambda,
    00180             int nele_hess, int[] iRow, int[] jCol,
    00181             double[] values);
    00182
    00192     public void dispose()
    00193     {
    00194         // dispose the native implementation
    00195         if( ipopt != 0 )
    00196         {
    00197             FreeIpoptProblem(ipopt);
    00198             ipopt = 0;
    00199         }
    00200     }
    00201
    00202     protected void finalize() throws Throwable
    00203     {
    00204         dispose();
    00205     }
    00206
    00217     public boolean create(int n, int m,  int nele_jac, int nele_hess, int index_style)
    00218     {
    00219         // delete any previously created native memory
    00220         dispose();
    00221
    00222         x = new double[n];
    00223         // allocate the callback arguments
    00224         callback_grad_f = new double[n];
    00225         callback_jac_g = new double[nele_jac];
    00226         callback_hess = new double[nele_hess];
    00227
    00228         // the multiplier
    00229         mult_x_U = new double[n];
    00230         mult_x_L = new double[n];
    00231         g = new double[m];
    00232         mult_g = new double[m];
    00233
    00234         //  Create the optimization problem and return a pointer to it
    00235         ipopt = CreateIpoptProblem(n, m,  nele_jac, nele_hess, index_style);
    00236
    00237         //System.out.println("Finish Java Obj");
    00238         return ipopt == 0 ? false : true;
    00239     }
    00240
    00249     public boolean setIntegerOption(String keyword, int val)
    00250     {
    00251         return ipopt == 0 ? false : AddIpoptIntOption(ipopt, keyword, val);
    00252     }
    00253
    00262     public boolean setNumericOption(String keyword, double val)
    00263     {
    00264         return ipopt == 0 ? false : AddIpoptNumOption(ipopt, keyword, val);
    00265     }
    00266
    00275     public boolean setStringOption(String keyword, String val)
    00276     {
    00277         return ipopt == 0 ? false : AddIpoptStrOption(ipopt, keyword, val.toLowerCase());
    00278     }
    00279
    00290     public int OptimizeNLP()
    00291     {
    00292         this.status = this.OptimizeTNLP(ipopt,
    00293                 x, g, obj_val, mult_g, mult_x_L, mult_x_U,
    00294                 callback_grad_f, callback_jac_g, callback_hess);
    00295
    00296         return this.status;
    00297     }
    00298
    00302     public double[] getVariableValues()
    00303     {
    00304         return x;
    00305     }
    00306
    00310     public double getObjectiveValue()
    00311     {
    00312         return obj_val[0];
    00313     }
    00314
    00320     public int getStatus()
    00321     {
    00322         return status;
    00323     }
    00324
    00328     public double[] getConstraintValues()
    00329     {
    00330         return g;
    00331     }
    00332
    00336     public double[] getConstraintMultipliers()
    00337     {
    00338         return mult_g;
    00339     }
    00340
    00344     public double[] getLowerBoundMultipliers()
    00345     {
    00346         return mult_x_L;
    00347     }
    00348
    00352     public double[] getUpperBoundMultipliers()
    00353     {
    00354         return mult_x_U;
    00355     }
    00356
    00371     public boolean get_scaling_parameters(double[] obj_scaling,
    00372             int n, double[] x_scaling,
    00373             int m, double[] g_scaling,
    00374             boolean[] use_x_g_scaling)
    00375     {
    00376         return false;
    00377     }
    00378
    00383     public int get_number_of_nonlinear_variables()
    00384     {
    00385         return -1;
    00386     }
    00387
    00395     public boolean get_list_of_nonlinear_variables(int num_nonlin_vars,
    00396             int[] pos_nonlin_vars)
    00397     {
    00398         return false;
    00399     }
    00400 }

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines