25 std::vector<double>
Q;
47 for (
int i = 0; i <
nvar; ++i)
76 for (
int i = 0; i <
nvar; ++i)
80 std::vector<int> varIdx(
nvar);
81 std::vector<double> ones(
nvar, 1.0);
82 std::vector<int> nlflags_free(
nvar, 1);
83 std::vector<int> nlflags_sum(
nvar, 0);
85 for (
int i = 0; i <
nvar; ++i)
111 int FDEval(
const double x[],
double *g,
double jac[],
int rowno,
const int jacnum[],
int mode,
112 int ignerr,
int *errcnt,
int numvar,
int numjac,
int thread)
override
117 if (mode == 1 || mode == 3)
120 for (
int k = 0; k <
nqnz; ++k)
127 sum += 2.0 * (x[i] -
Target[i]) * qi * (x[j] -
Target[j]);
133 if (mode == 2 || mode == 3)
135 for (
int i = 0; i < numvar; ++i)
138 for (
int k = 0; k <
nqnz; ++k)
143 jac[i] += qi * (x[i] -
Target[i]);
146 jac[i] += qi * (x[j] -
Target[j]);
147 jac[j] += qi * (x[i] -
Target[i]);
178 conopt.setMessageHandler(msghandler);
184 conopt.loadModel(modeldata);
186#if defined(CONOPT_LICENSE_INT_1) && defined(CONOPT_LICENSE_INT_2) && \
187 defined(CONOPT_LICENSE_INT_3) && defined(CONOPT_LICENSE_TEXT)
188 std::string license = CONOPT_LICENSE_TEXT;
190 CONOPT_LICENSE_INT_1, CONOPT_LICENSE_INT_2, CONOPT_LICENSE_INT_3, license);
196 "Skipping COI_Solve due to setup errors. COI_Error = " + std::to_string(
COI_Error));
202 conopt.sendMessage(
"After first solve. COI_Error = " + std::to_string(
COI_Error));
203 if (
conopt.modelStatus() != 2 ||
conopt.solutionStatus() != 1)
204 cpp_log(
conopt,
"Incorrect Model or Solver Status from first solve.");
205 else if (fabs(
conopt.objectiveValue() - 59978.0) > 0.001)
206 cpp_log(
conopt,
"Incorrect objective returned from first solve.");
216 "Skipping COI_Solve due to setup errors. COI_Error = " + std::to_string(
COI_Error));
223 conopt.sendMessage(
"After second solve. COI_Error = " + std::to_string(
COI_Error));
224 if (
conopt.modelStatus() != 2 ||
conopt.solutionStatus() != 1)
226 cpp_log(
conopt,
"Incorrect Model or Solver Status from second solve.");
229 else if (fabs(
conopt.objectiveValue() - 59978.0) > 0.001)
231 cpp_log(
conopt,
"Incorrect objective returned from second solve.");
243 "Skipping COI_Solve due to setup errors. COI_Error = " + std::to_string(
COI_Error));
250 conopt.sendMessage(
"After third solve. COI_Error = " + std::to_string(
COI_Error));
251 if (
conopt.modelStatus() != 2 ||
conopt.solutionStatus() != 1)
253 cpp_log(
conopt,
"Incorrect Model or Solver Status from third solve.");
256 else if (fabs(
conopt.objectiveValue() - 59978.0) > 0.001)
258 cpp_log(
conopt,
"Incorrect objective returned from third solve.");
static constexpr double Infinity
std::vector< double > Target
CONOPT C++ interface header file. This is the main object for the CONOPT C++ interface.
QP1_ModelData(int numvar)
the constructor for the QP instance model data.
int main(int argc, char **argv)
Main program. A simple setup and call of CONOPT.
int FDEval(const double x[], double *g, double jac[], int rowno, const int jacnum[], int mode, int ignerr, int *errcnt, int numvar, int numjac, int thread) override
defines the nonlinearities of the model by returning numerical values.
void buildModel()
adds the variables and constraints for the problem
int addVariable(double lower, double upper, double curr=0, int varstatus=-1)
adds a variable to the model. The non-zero coefficients are added later.
void setObjectiveElement(ConoptObjectiveElement elem, int elemindex)
sets the index for the objective variable or constraint
int addConstraint(ConoptConstraintType constype, double rhs, int slackstatus=-1)
adds a constraint to the problem. The non-zero coefficients are added later
void setOptimizationSense(ConoptSense sense)
sets the optimisation direction.
void cpp_log(Conopt &conopt, std::string msg)
std::string getProgramName(char *execname)