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]);
Number * x
Input: Starting point Output: Optimal solution.
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 Index m
Number of constraints.
static final int C_STYLE
Use C index style for iRow and jCol vectors.
double g[]
Values of constraint at final point.
Implementation of Example 5.1 from "Sparse and Parially Separable Test Problems for Unconstrained and...
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 eval_grad_f(int n, double[] x, boolean new_x, double[] grad_f)
Callback function for the objective function gradient.
boolean eval_g(int n, double[] x, boolean new_x, int m, double[] g)
Callback function for the constraints.
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_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.
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 eval_f(int n, double[] x, boolean new_x, double[] obj_value)
Callback function for the objective function.
LuksanVlcek1(String name, double gl, double gu)
Constructor.
boolean initialize(int n)
In this function all problem sizes, bounds and initial guess should be initialized.
Abstract class for the scalable problems.