Minotaur 0.4.1
Docs for developers
QuadraticFunction.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2008 - 2025 The Minotaur Team.
5//
6
13#ifndef MINOTAURQUADRATICFUNCTION_H
14#define MINOTAURQUADRATICFUNCTION_H
15
16#include "Types.h"
17
18
19#include "VarBoundMod.h"
20
21
22
23namespace Minotaur {
24 class LinearFunction;
25 struct LTHessStor;
26 class QuadraticFunction;
27 class PolynomialFunction;
28 class Variable;
29 typedef QuadraticFunction* QuadraticFunctionPtr;
30 typedef const QuadraticFunction* ConstQuadraticFunctionPtr;
31 typedef PolynomialFunction* PolyFunPtr;
32 typedef const LinearFunction* ConstLinearFunctionPtr;
33 typedef LinearFunction* LinearFunctionPtr;
34 typedef std::vector<QuadraticFunctionPtr> QfVector;
35 //class EigenVector;
36 //typedef std::pair<double, EigenVectorPtr> EigenPair;
37
39 public:
42
61 QuadraticFunction(UInt nz, double *vals, UInt *irow, UInt *jcol,
62 VariableConstIterator vbeg );
63
68 QuadraticFunction(double* vals, VariableConstIterator vbeg,
69 VariableConstIterator vend);
70
73
79
84 QuadraticFunctionPtr cloneWithVars(VariableConstIterator vbeg) const;
85
90 void addTerm(VariablePair vp, const double weight);
91
96 void addTerm(ConstVariablePtr v1, ConstVariablePtr v2, double weight);
97
102 double getFixVarOffset(VariablePtr v, double val);
103
109 void incTerm(ConstVariablePair vp, const double weight);
110
116 void incTerm(ConstVariablePtr v1, ConstVariablePtr v2, const double weight);
117
118
120 void multiply(double c);
121
126 void removeVar(VariablePtr v, double val, LinearFunctionPtr lf);
127
132 void subst(VariablePtr out, VariablePtr in, double rat);
133
138 //friend QuadraticFunctionPtr operator + (const QuadraticFunction q1,
139 // const QuadraticFunction q2);
141
147
149 QuadraticFunctionPtr copyMult(double c) const;
150
153
156
157
176
184
186 VarCountConstMap * getVarMap() const;
187
189 VariablePairGroupConstIterator begin() const { return(terms_.begin()); }
190
192 VariablePairGroupConstIterator end() const { return(terms_.end()); }
193
198 double getWeight(ConstVariablePair & vp) ;
199
205
208
215 bool hasVar(ConstVariablePtr v) const;
216
222 double eval(const std::vector<double> &x) const;
223
229 double eval(const double *x) const;
230
232 void computeBounds(double *l, double *u);
233
234 // /**
235 // * Changing bounds of variables based on bounds of constraints
236 // */
237 // void varBoundMods(double lb, double ub, VarBoundModVector &mods,
238 // SolveStatus *status);
239
240
241 // /**
242 // * getting b for variable v (in ax^2 +bx)
243 // */
244
246 void bndsquadterms(double *l, double *u, VariablePtr v);
247
248
249 // /**
250 // * getting b for variable v (in ax^2 +bx), excluding terms containing v2
251 // */
252
254 void bndsquadterms_2(double *l, double *u, VariablePtr v, VariablePtr v2);
255
256
262 void evalGradient(const double *x, double *grad_f);
263
269 void evalGradient(const std::vector<double> &x,
270 std::vector<double> &grad_f);
271
273 void evalHessian(const double mult, const double *x,
274 const LTHessStor *stor, double *values , int *error);
275
283
290 QfVector findSubgraphs();
291
293 void prepJac(VarSetConstIter vbeg, VarSetConstIter vend);
294
296 void prepHess();
297
298 void fillHessStor(LTHessStor *hess);
299
301 void fillJac(const double *x, double *values, int *error);
302 void finalHessStor(const LTHessStor *hess);
303
305 UInt getNumTerms() const;
306
308 UInt getNumBilTerms() const;
309
311 UInt getNumSqTerms() const;
312
314 UInt getNumVars() const;
315
317 void getVars(VariableSet *vars);
318
323 bool isZero() const { return (getNumTerms() == 0); }
324
325 NonlinearFunctionPtr getPersp(VariablePtr z, double eps,
326 VariableGroup nNonzeroVar, double intTol);
327
329 VarIntMapConstIterator varsBegin() const;
330
332 VarIntMapConstIterator varsEnd() const;
333
335 void write(std::ostream &s) const;
336
337 private:
339 const double etol_;
340
342 double *hCoeffs_;
343
348 UInt *hFirst_;
349 UInt *hOff_;
350
355 UInt *hSecond_;
356
361 UIntVector hStarts_;
362
363 UIntVector jacOff_;
364 UIntVector jacInd_;
365
370 VariablePairGroup terms_;
371
377 VarIntMap varFreq_;
378
379 Convexity convex_;
380
381 void sortLT_(UInt n, UInt *f, UInt *s, double *c);
382 };
383
384}
385#endif
386
Declare important 'types' used in Minotaur.
Declare the class VarBoundMod. It is used to save modifications in a bound of a variable....
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Base class for nonlinear functions.
Definition: NonlinearFunction.h:31
PolynomialFunction represents functions of the form , where is a MonomialFunction.
Definition: PolynomialFunction.h:160
Definition: QuadraticFunction.h:38
void add(ConstQuadraticFunctionPtr q2)
Definition: QuadraticFunction.cpp:1007
bool hasVar(ConstVariablePtr v) const
Check if function contains a variable.
Definition: QuadraticFunction.cpp:651
QuadraticFunctionPtr copyMult(double c) const
Multiply a quadratic function with a constant.
Definition: QuadraticFunction.cpp:1084
void write(std::ostream &s) const
Display the quadratic function.
Definition: QuadraticFunction.cpp:1035
void prepJac(VarSetConstIter vbeg, VarSetConstIter vend)
Stores Jacobian values, offset and indices in different arrays.
Definition: QuadraticFunction.cpp:781
double getWeight(ConstVariablePair &vp)
Definition: QuadraticFunction.cpp:627
UInt getNumBilTerms() const
Get the number of bilinear terms in the expression.
Definition: QuadraticFunction.cpp:603
void removeVar(VariablePtr v, double val, LinearFunctionPtr lf)
Definition: QuadraticFunction.cpp:657
QuadraticFunctionPtr cloneWithVars(VariableConstIterator vbeg) const
Definition: QuadraticFunction.cpp:118
UInt getNumTerms() const
Get the number of terms in this expression.
Definition: QuadraticFunction.cpp:586
void evalHessian(const double mult, const double *x, const LTHessStor *stor, double *values, int *error)
Evaluate the summation of multiplier and hessian of constraints.
Definition: QuadraticFunction.cpp:429
QuadraticFunctionPtr clone() const
Definition: QuadraticFunction.cpp:109
VarCountConstMap * getVarMap() const
void operator*=(const double c);
Definition: QuadraticFunction.cpp:621
void evalGradient(const double *x, double *grad_f)
Definition: QuadraticFunction.cpp:300
void prepHess()
Stores hessian matrix values, row and column indices in arrays.
Definition: QuadraticFunction.cpp:810
void fillJac(const double *x, double *values, int *error)
Fills the value of jacobian of a function in an array.
Definition: QuadraticFunction.cpp:504
VariablePairGroupConstIterator begin() const
Constant Iterators to visit all the quadratic terms: begin.
Definition: QuadraticFunction.h:189
double getFixVarOffset(VariablePtr v, double val)
Definition: QuadraticFunction.cpp:984
void bndsquadterms_2(double *l, double *u, VariablePtr v, VariablePtr v2)
Finds bound of quadratic term having v and excluding contribution of v2.
Definition: QuadraticFunction.cpp:206
void bndsquadterms(double *l, double *u, VariablePtr v)
Finds bound of quadratic term having v variable.
Definition: QuadraticFunction.cpp:178
void subst(VariablePtr out, VariablePtr in, double rat)
Definition: QuadraticFunction.cpp:935
void getVars(VariableSet *vars)
Get the variables in the variable set from the variable frequency map.
Definition: QuadraticFunction.cpp:517
void incTerm(ConstVariablePair vp, const double weight)
Definition: QuadraticFunction.cpp:546
VariablePairGroupConstIterator end() const
Constant Iterators to visit all the quadratic terms: end.
Definition: QuadraticFunction.h:192
void addTerm(VariablePair vp, const double weight)
Definition: QuadraticFunction.cpp:526
UInt getNumVars() const
Get the number of variables in this expression.
Definition: QuadraticFunction.cpp:615
~QuadraticFunction()
Destroy.
Definition: QuadraticFunction.cpp:96
Convexity isConvex()
Definition: QuadraticFunction.cpp:405
void multiply(double c)
Multiply by a constant. If constant is zero, all terms are removed.
Definition: QuadraticFunction.cpp:1018
VarIntMapConstIterator varsEnd() const
Iterate over the variables in the quadratic function: end.
Definition: QuadraticFunction.cpp:1001
QfVector findSubgraphs()
Definition: QuadraticFunction.cpp:326
void computeBounds(double *l, double *u)
Compute bounds for using in Presolver.
Definition: QuadraticFunction.cpp:151
bool isZero() const
Definition: QuadraticFunction.h:323
double eval(const std::vector< double > &x) const
Definition: QuadraticFunction.cpp:130
UInt getNumSqTerms() const
Get the number of square terms in the expression.
Definition: QuadraticFunction.cpp:591
VarIntMapConstIterator varsBegin() const
Iterate over the variables in the quadratic function: begin.
Definition: QuadraticFunction.cpp:995
QuadraticFunctionPtr copyMinus(ConstQuadraticFunctionPtr q2) const
Definition: QuadraticFunction.cpp:1050
int getFreq(ConstVariablePtr v1)
Get the number of times variable v1 occurs in quadratic terms.
Definition: QuadraticFunction.cpp:645
QuadraticFunction()
Default constructor.
Definition: QuadraticFunction.cpp:35
QuadraticFunctionPtr copyAdd(ConstQuadraticFunctionPtr q2) const
Definition: QuadraticFunction.cpp:1067
Definition: Variable.h:31
Definition: ActiveNodeStore.h:20
std::pair< ConstVariablePtr, ConstVariablePtr > VariablePair
Pairs of variables are used in quadratic functions.
Definition: Types.h:517
std::map< ConstVariablePtr, double, CompareVariablePtr > VariableGroup
Variables should always be constant within a group.
Definition: Types.h:511
std::map< ConstVariablePair, double, CompareVariablePair > VariablePairGroup
Again, Variables should always be constant within a group.
Definition: Types.h:526
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
Convexity
Convexity of a function or a constraint.
Definition: Types.h:244
Definition: HessianOfLag.h:21

Minotaur source code documented by Doxygen 1.9.4 on Thu Apr 24 2025