CONOPT
Loading...
Searching...
No Matches
qp2.java
Go to the documentation of this file.
1
7
8import java.util.*;
9import java.lang.Math;
10import jconopt.*;
11
14public class qp2 {
15 public static void main(String argv[]){
16 System.loadLibrary("conopt4_java");
17
18 String name = "qp2";
19
20 Conopt conopt = new Conopt(name);
21 qp2_TutModelData model = new qp2_TutModelData();
23
24 model.buildModel();
25
26 conopt.loadModel(model);
27 conopt.setMessageHandler(msghdlr);
28
29 // try to set the license using the environment variables
30 try {
31 int license_int_1 = Integer.parseInt(System.getenv("LICENSE_INT_1"));
32 int license_int_2 = Integer.parseInt(System.getenv("LICENSE_INT_2"));
33 int license_int_3 = Integer.parseInt(System.getenv("LICENSE_INT_3"));
34 String license_text = System.getenv("LICENSE_TEXT");
35
38 } catch (Exception e) {
39 System.out.println("Unable to set license: " + e.getMessage());
40 }
41
42 conopt.solve();
43
44 conopt.printStatus();
45
46 std s = new std();
47 int retcode = s.checkSolve(name, conopt.modelStatus(), conopt.solutionStatus(),
48 conopt.objectiveValue(), 59978.0, 0.001);
49
50 msghdlr.close();
51
52 System.exit(retcode);
53 }
54}
55
56class qp2_TutModelData extends ModelData {
57 private int NN;
58 private int NQ;
59 private double[] target;
60 private double[] Qdiag;
61 private double[] Qlowerdiag;
62
63 public qp2_TutModelData() {
64 super();
65
66 setConstants();
67 }
68
69 private void setConstants() {
70 NN = 1000;
71 NQ = NN*2 - 1;
72 target = new double[NN];
73 Qdiag = new double[NN];
74 Qlowerdiag = new double[NN];
75 for (int i = 0; i < NN; i++)
76 {
77 target[i] = 10;
78 Qdiag[i] = 1;
79 }
80
81 for (int i = 0; i < NN - 1; i++)
82 Qlowerdiag[i] = 0.1;
83 }
84
89 public void buildModel() {
90 // adding the variables to the model
91 for (int i = 0; i < NN; i++)
93
94 // adding the constraints to the model
95 // first we create some arrays to help build the model.
96 int[] varindex = new int[NN];
97 int[] zeros = new int[NN];
98 int[] ones = new int[NN];
99 for (int i = 0; i < NN; i++)
100 {
101 varindex[i] = i;
102 zeros[i] = 0;
103 ones[i] = 1;
104 }
105
106 // the first constraint is the quadratic objective
107 addConstraint(ConstraintType.Free, 0.0, varindex,
108 Arrays.stream(zeros).asDoubleStream().toArray(), ones);
109
110 // the second constraint is the summation constraint: sum(x) == 1
111 addConstraint(ConstraintType.Eq, 1.0, varindex,
112 Arrays.stream(ones).asDoubleStream().toArray(), zeros);
113
114 // setting the objective constraint
116
117 // setting the optimisation direction
119
120 // setting the second derivative evaluation type
122 }
123
128 public double evaluateNonlinearTerm(double[] x, int rowno, boolean ignerr, int thread)
129 {
130 double g = 0;
131 if (rowno == 0)
132 {
133 for (int i = 0; i < NN; i++)
134 g += (x[i] - target[i])*Qdiag[i]*(x[i] - target[i]);
135 for (int i = 0; i < NN - 1; i++)
136 g += 2*(x[i + 1] - target[i + 1])*Qlowerdiag[i]*(x[i] - target[i]);
137 }
138
139 return g/2;
140 }
141
146 public void evaluateNonlinearJacobian(double[] x, double[] jac, int rowno, int[] jacnum, boolean ignerr, int thread) {
147 assert x.length == jac.length;
148
149 if (rowno == 0)
150 {
151 for (int i = 0; i < NN; i++)
152 jac[i] += Qdiag[i]*(x[i] - target[i]);
153
154 for (int i = 0; i < NN - 1; i++)
155 {
156 jac[i + 1] += Qlowerdiag[i]*(x[i] - target[i]);
157 jac[i] += Qlowerdiag[i]*(x[i + 1] - target[i + 1]);
158 }
159 }
160 }
161
162
167 public void evaluateDirectionalSD(double[] x, double[] dx, double[] d2g, int rowno, int[] jacnum, int thread) {
168 assert x.length == d2g.length;
169 assert dx.length == d2g.length;
170
171 for (int i = 0; i < NN; i++)
172 d2g[i] = Qdiag[i]*dx[i];
173
174 for (int i = 0; i < NN - 1; i++)
175 {
176 d2g[i + 1] += Qlowerdiag[i]*dx[i];
177 d2g[i] += Qlowerdiag[i]*dx[i + 1];
178 }
179 }
180}
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
Definition Sense.java:25
model
Definition qp2.py:108
license_int_1
Definition qp2.py:117
license_text
Definition qp2.py:120
retcode
Definition qp2.py:128
license_int_3
Definition qp2.py:119
msghdlr
Definition qp2.py:109
license_int_2
Definition qp2.py:118
static void main(String argv[])
Definition qp2.java:15
name
Definition qp2.py:105
conopt
Definition qp2.py:107
static int checkSolve(String name, int model_status, int solution_status, double objective, double expected_objective, double tol)
Definition std.java:16
void setObjectiveElement(ObjectiveElement elem, int elemindex)
void setOptimizationSense(Sense sense)
int addVariable(double lower, double upper, double curr, int varstatus)
int addConstraint(ConstraintType constype, double rhs, int slackstatus)
void setSDEvaluationType(SDEvaluationType sdevaltype)
double evaluateNonlinearTerm(double[] x, int rowno, boolean ignerr, int thread)
callback method for evaluating the nonlinear terms in a given row
Definition qp2.java:128
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
Definition qp2.java:146
void buildModel()
adds variables and constraints to the model
Definition qp2.java:89
void evaluateDirectionalSD(double[] x, double[] dx, double[] d2g, int rowno, int[] jacnum, int thread)
computes the directional second derivative for a single constraint
Definition qp2.java:167
static final double CONOPT_INF
Definition qp2.py:1
Definition std.py:1