15 public static void main(String argv[]) {
16 System.loadLibrary(
"conoptjni4");
18 String
name =
"leastsq10";
21 LeastSq10ModelData
model =
new LeastSq10ModelData(700, 500);
31 int license_int_1 = Integer.parseInt(System.getenv(
"CONOPT_LICENSE_INT_1"));
32 int license_int_2 = Integer.parseInt(System.getenv(
"CONOPT_LICENSE_INT_2"));
33 int license_int_3 = Integer.parseInt(System.getenv(
"CONOPT_LICENSE_INT_3"));
34 String
license_text = System.getenv(
"CONOPT_LICENSE_TEXT");
38 }
catch (Exception e) {
39 System.out.println(
"Unable to set license: " + e.getMessage());
48 conopt.objectiveValue(), 19.4443, 0.001);
56class LeastSq10ModelData
extends ModelData {
57 private int seed = 12359;
71 public int[] consresidual;
74 public LeastSq10ModelData(
int numobs,
int dimensionx) {
78 this.dimx = dimensionx;
80 this.A =
new double[nobs * dimx];
81 this.B =
new double[nobs * dimx];
82 this.C =
new double[nobs * dimx];
83 this.Obs =
new double[nobs];
89 private double rndx() {
90 seed = seed * 1027 + 25;
91 int times = seed / 1_048_576;
92 seed = seed - 1_048_576 * times;
93 return (
double) seed / 1_048_576.0;
97 private void defineData() {
98 final double Xtarg = -1.0;
99 final double Noise = 1.0;
102 for (
int i = 0; i < nobs; ++i) {
104 for (
int j = 0; j < dimx; ++j) {
107 O += A[
k] * Xtarg + B[
k] * (Xtarg * Xtarg);
110 Obs[i] = O + Noise * rndx();
120 List<Integer> varxList =
new ArrayList<>(dimx);
121 for (
int i = 0; i < dimx; ++i) {
123 varxList.add(varidx);
126 List<Integer> varresList =
new ArrayList<>(nobs);
127 for (
int i = 0; i < nobs; ++i) {
129 varresList.add(varidx);
132 this.varx = varxList.stream().mapToInt(Integer::intValue).toArray();
133 this.varres = varresList.stream().mapToInt(Integer::intValue).toArray();
138 this.consresidual =
new int[nobs];
139 for (
int i = 0; i < nobs; ++i) {
142 int[] varidx =
new int[m];
143 double[] coeffs =
new double[m];
144 int[] nlf =
new int[m];
146 for (
int j = 0; j < dimx; ++j) {
153 varidx[dimx] = varres[i];
158 consresidual[i] = considx;
162 double[] objCoeffs =
new double[nobs];
163 int[] objNlf =
new int[nobs];
164 for (
int i = 0; i < nobs; ++i) {
187 if (rowno == consobj) {
189 for (
int i = 0; i < nobs; i++) {
190 sum += Math.pow(x[varres[i]], 2);
195 int k = rowno * dimx;
197 for (
int i = 0; i < dimx; i++) {
198 sum += A[k] * x[varx[i]] + B[k] * Math.pow(x[varx[i]], 2);
212 assert x.length == jac.length;
214 if (rowno == consobj) {
215 for (
int i = 0; i < nobs; i++) {
216 jac[varres[i]] = 2 * x[varres[i]];
220 int k = rowno * dimx;
221 for (
int i = 0; i < dimx; i++) {
222 jac[varx[i]] = A[k] + 2 * B[k] * x[varx[i]];
237 for (
int i = 0; i < nobs; i++) {
238 for (
int j = 0; j < dimx; j++) {
239 C[k] = 2.0 * B[k] * dx[varx[j]];
251 assert x.length == d2g.length;
252 assert dx.length == d2g.length;
257 for (
int i = 0; i < dimx; i++)
259 for (
int i = 0; i < nobs; i++)
260 d2g[varres[i]] = 2.0 * dx[varres[i]];
265 int k = rowno * dimx;
266 for (
int i = 0; i < dimx; i++) {
270 for (
int i = 0; i < nobs; i++)
static final ConstraintType Eq
static final ConstraintType Free
A class that can be extended to build and solve a model using Conopt.
static final ObjectiveElement Constraint
static final SDEvaluationType Constraint
static final Sense Minimize
static void main(String argv[])
static int checkSolve(String name, int model_status, int solution_status, double objective, double expected_objective, double tol)
addConstraint(self, *args)
Overload 1: adds a constraint to the problem.
setObjectiveElement(self, elem, elemindex)
sets the index for the objective variable or constraint
addVariable(self, *args)
Overload 1: adds a variable to the model.
setOptimizationSense(self, sense)
sets the optimisation direction.
setSDEvaluationType(self, sdevaltype)
informs CONOPT of the method for evaluating the second derivative
void evaluateNonlinearJacobian(double[] x, double[] jac, int rowno, int[] jacnum, boolean ignerr, int thread)
callback method for evaluating the jacobian for the nonlinear terms in a given row
void buildModel()
adds variables and constraints to the model
double evaluateNonlinearTerm(double[] x, int rowno, boolean ignerr, int thread)
callback method for evaluating the nonlinear terms in a given row
void evaluateDirectionalSD(double[] x, double[] dx, double[] d2g, int rowno, int[] jacnum, int thread)
computes the directional second derivative for a single constraint
void initDirectionalSDEval(double[] x, double[] dx, int[] rowlist, int numthread, boolean newpoint)
a callback for the initialisation of the second derivative evaluation.