9 package org.coinor.examples.scalable;
34 System.out.print(
"N needs to be at least 3.\n");
53 for(
int i = 0; i < n; ++i )
62 for(
int i = 0; i < m; ++i )
70 for(
int i = 0; i < n/2; ++i )
82 int m,
double[] g_l,
double[] g_u)
85 for(
int i = 0; i < n; ++i )
92 for(
int i = 0; i < m; ++i )
102 boolean init_z,
double[] z_L,
double[] z_U,
103 int m,
boolean init_lambda,
double[] lambda)
105 for(
int i = 0; i < n/2; ++i )
117 protected boolean eval_f(
int n,
double[] x,
boolean new_x,
double[] obj_value)
120 for(
int i = 0; i < n-1; ++i )
122 double a1 = x[i] * x[i] - x[i+1];
123 double a2 = x[i] - 1.0;
124 obj_value[0] += 100.0 * a1 * a1 + a2 * a2;
131 protected boolean eval_g(
int n,
double[] x,
boolean new_x,
int m,
double[]
g)
133 for(
int i = 0; i < n-2; ++i )
134 g[i] = 3.0 * Math.pow(x[i+1], 3.0) + 2.0 * x[i+2] - 5.0 + Math.sin(x[i+1]-x[i+2]) * Math.sin(x[i+1]+x[i+2])
135 + 4.0 * x[i+1] - x[i] * Math.exp(x[i] - x[i+1]) - 3.0;
141 protected boolean eval_grad_f(
int n,
double[] x,
boolean new_x,
double[] grad_f)
144 for(
int i = 0; i < n-1; ++i )
146 grad_f[i] += 400.0 * x[i] * (x[i] * x[i] - x[i+1]) + 2.0 * (x[i] - 1.0);
147 grad_f[i+1] = -200.0 * (x[i] * x[i] - x[i+1]);
154 protected boolean eval_jac_g(
int n,
double[] x,
boolean new_x,
int m,
155 int nele_jac,
int[] iRow,
int[] jCol,
double[] values)
161 for(
int i = 0; i < n-2; ++i )
179 for(
int i = 0; i < n-2; ++i )
182 values[ijac] = -(1.0 + x[i]) * Math.exp(x[i] - x[i+1]);
185 values[ijac] = 9.0 * x[i+1] * x[i+1]
186 + Math.cos(x[i+1] - x[i+2]) * Math.sin(x[i+1] + x[i+2])
187 + Math.sin(x[i+1] - x[i+2]) * Math.cos(x[i+1] + x[i+2])
188 + 4.0 + x[i] * Math.exp(x[i] - x[i+1]);
192 - Math.cos(x[i+1] - x[i+2]) * Math.sin(x[i+1] + x[i+2])
193 + Math.sin(x[i+1] - x[i+2]) * Math.cos(x[i+1] + x[i+2]);
202 protected boolean eval_h(
int n,
double[] x,
boolean new_x,
203 double obj_factor,
int m,
double[] lambda,
boolean new_lambda,
204 int nele_hess,
int[] iRow,
int[] jCol,
double[] values)
209 for(
int i = 0; i < n; ++i )
226 for(
int i = 0; i < n; ++i )
231 values[ihes] = obj_factor * (2.0 + 400.0 * (3.0 * x[i] * x[i] - x[i+1]));
233 values[ihes] -= lambda[i] * (2.0 + x[i]) * Math.exp(x[i] - x[i+1]);
241 values[ihes] += obj_factor * 200.0;
243 values[ihes] += lambda[i-1]* (18.0 * x[i]
244 - 2.0 * Math.sin(x[i] - x[i+1]) * Math.sin(x[i] + x[i+1])
245 + 2.0 * Math.cos(x[i] - x[i+1]) * Math.cos(x[i] + x[i+1])
246 - x[i-1] * Math.exp(x[i-1] - x[i]));
250 values[ihes] += lambda[i-2] * (-2.0 * Math.sin(x[i-1] - x[i]) * Math.sin(x[i-1] + x[i])
251 - 2.0 * Math.cos(x[i-1] - x[i]) * Math.cos(x[i-1] + x[i]));
257 values[ihes] = obj_factor * (-400.0 * x[i]);
259 values[ihes] += lambda[i]*(1.+x[i])*Math.exp(x[i]-x[i+1]);
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.
boolean initialize(int n)
In this function all problem sizes, bounds and initial guess should be initialized.
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.
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.
Implementation of Example 5.1 from "Sparse and Parially Separable Test Problems for Unconstrained and...
Abstract class for the scalable problems.
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
LuksanVlcek1(String name, double gl, double gu)
Constructor.
boolean eval_g(int n, double[] x, boolean new_x, int m, double[] g)
Callback function for the constraints.
double g[]
Values of constraint at final point.
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
boolean eval_grad_f(int n, double[] x, boolean new_x, double[] grad_f)
Callback function for the objective function gradient.
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 C_STYLE
Use C index style for iRow and jCol vectors.
boolean eval_f(int n, double[] x, boolean new_x, double[] obj_value)
Callback function for the objective function.