15 public static void main(String argv[]){
16 System.loadLibrary(
"conopt4_java");
21 qp3_TutModelData
model =
new qp3_TutModelData();
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"));
38 }
catch (Exception e) {
39 System.out.println(
"Unable to set license: " + e.getMessage());
48 conopt.objectiveValue(), 59978.0, 0.001);
59 private double[] target;
60 private double[] Qdiag;
61 private double[] Qlowerdiag;
63 public qp3_TutModelData() {
69 private void setConstants() {
72 target =
new double[NN];
73 Qdiag =
new double[NN];
74 Qlowerdiag =
new double[NN];
75 for (
int i = 0; i < NN; i++)
81 for (
int i = 0; i < NN - 1; i++)
91 for (
int i = 0; i < NN; i++)
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++)
108 Arrays.stream(zeros).asDoubleStream().toArray(), ones);
112 Arrays.stream(ones).asDoubleStream().toArray(), zeros);
121 setLagrangianStructure();
124 private void setLagrangianStructure() {
125 int[] hessianrow =
new int[
NQ];
126 int[] hessiancol =
new int[
NQ];
129 for (
int i = 0; i <
NN - 1; i++)
132 hessianrow[2*i + 1] = i + 1;
135 hessiancol[2*i + 1] = i;
137 hessianrow[NQ - 1] = NN - 1;
138 hessiancol[NQ - 1] = NN - 1;
153 for (
int i = 0; i < NN; i++)
154 g += (x[i] - target[i])*Qdiag[i]*(x[i] - target[i]);
155 for (
int i = 0; i < NN - 1; i++)
156 g += 2*(x[i + 1] - target[i + 1])*Qlowerdiag[i]*(x[i] - target[i]);
167 assert x.length == jac.length;
171 for (
int i = 0; i < NN; i++)
172 jac[i] += Qdiag[i]*(x[i] - target[i]);
174 for (
int i = 0; i < NN - 1; i++)
176 jac[i + 1] += Qlowerdiag[i]*(x[i] - target[i]);
177 jac[i] += Qlowerdiag[i]*(x[i + 1] - target[i + 1]);
187 public void evaluateSDLagrangian(
double[] x,
double[] u,
int[] hessianrow,
int[] hessiancol,
double[] hessianval) {
188 assert hessianrow.length == hessianval.length;
189 assert hessiancol.length == hessianval.length;
191 for (
int i = 0; i < NN - 1; i++)
193 hessianval[2*i] = Qdiag[i]*u[0];
194 hessianval[2*i + 1] = Qlowerdiag[i]*u[0];
196 hessianval[NQ - 1] = Qdiag[NN - 1]*u[0];
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 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)
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 setSDLagrangianStructure(int[] rownum, int[] colnum)
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
double evaluateNonlinearTerm(double[] x, int rowno, boolean ignerr, int thread)
callback method for evaluating the nonlinear terms in a given row
void buildModel()
adds variables and constraints to the model
void evaluateSDLagrangian(double[] x, double[] u, int[] hessianrow, int[] hessiancol, double[] hessianval)
Computes and returns the numerical values of the Lagrangian of the Hessian.
static final double CONOPT_INF