Minotaur 0.4.1
Docs for developers
SimpleTransformer.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 MINOTAURSIMPLETRANSFORMER_H
14#define MINOTAURSIMPLETRANSFORMER_H
15
16#include "Transformer.h"
17#include "Types.h"
18
19namespace Minotaur
20{
21class CxUnivarHandler;
22class CGraph;
23class CNode;
24class Environment;
25class Engine;
26class LinearHandler;
27class LPEngine;
28class Problem;
29class QuadHandler;
30class Solution;
31class YEqCGs;
32class YEqLFs;
33class YEqVars;
34class YEqQfBil;
35typedef CxUnivarHandler* CxUnivarHandlerPtr;
36typedef CGraph* CGraphPtr;
37typedef LinearHandler* LinearHandlerPtr;
38typedef QuadHandler* QuadHandlerPtr;
39typedef Solution* SolutionPtr;
40typedef const Solution* ConstSolutionPtr;
41typedef LPEngine* LPEnginePtr;
42typedef Engine* EnginePtr;
43
55{
56public:
59
62 EnginePtr nlpe);
63
66
67 // base class method.
68 std::string getName() const;
69
70 // base class method.
72
73 // base class method.
75
76 // base class method.
77 void reformulate(ProblemPtr& newp, HandlerVector& handlers, int& status);
78
79 void writeStats(std::ostream& out) const;
80
81private:
82 // Store statistics of reformulation
83 struct RefStats {
84 double time;
85 UInt nvars;
86 UInt ncons;
87 UInt nconv;
88 UInt objConv;
91 };
92
93 static const std::string me_;
94
95 LPEnginePtr bte_;
96
97 LPEnginePtr cute_;
98
99 EnginePtr nlpe_;
100
101 RefStats stats_;
102
103 YEqCGs* yBiVars_;
104 YEqQfBil* yQfBil_;
105
106 void absRef_(LinearFunctionPtr lfl, VariablePtr vl, double dl, VariablePtr& v,
107 double& d);
108
109 void bilRef_(LinearFunctionPtr lfl, VariablePtr vl, double dl,
110 LinearFunctionPtr lfr, VariablePtr vr, double dr,
111 LinearFunctionPtr& lf, VariablePtr& v, double& d);
112
113 VariablePtr newBilVar_(VariablePtr vl, VariablePtr vr);
114
118 bool checkQuadConvexity_();
119
120 void powKRef_(LinearFunctionPtr lfl, VariablePtr vl, double dl, double k,
121 LinearFunctionPtr& lf, VariablePtr& v, double& d);
122
129 void refBinxBin_(VariablePtr bin1, VariablePtr bin2, VariablePtr aux);
130
137 void refBinxCont_(VariablePtr bin, VariablePtr cont, VariablePtr aux);
138
144 void refNonlinCons_(ConstProblemPtr oldp);
145
151 void refNonlinObj_(ConstProblemPtr oldp);
152
153 void refQuadCons_(QuadraticFunctionPtr qf, LinearFunctionPtr& lf);
154
158 void recursRef_(const CNode* node, LinearFunctionPtr& lf, VariablePtr& v,
159 double& d);
160
161 // Reset the statistics for transformer
162 void resetStats_();
163
164 void trigRef_(OpCode op, LinearFunctionPtr lfl, VariablePtr vl, double dl,
165 VariablePtr& v, double& d);
166
167 void uniVarRef_(const CNode* n0, LinearFunctionPtr lfl, VariablePtr vl,
168 double dl, LinearFunctionPtr& lf, VariablePtr& v, double& d);
169};
172
173} // namespace Minotaur
174
175#endif
176
Declare base class for transforming problems.
Declare important 'types' used in Minotaur.
CNode denotes a node in the computational graph. It stores the op-code, children, parents and other a...
Definition: CNode.h:48
Definition: Engine.h:34
Definition: Environment.h:28
Definition: LPEngine.h:29
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Definition: Problem.h:74
Definition: QuadraticFunction.h:38
Class for reformulating a problem using simple rules so that handlers can be applied to it.
Definition: SimpleTransformer.h:55
void reformulate(ProblemPtr &newp, HandlerVector &handlers, int &status)
Perform the reformulation, and assign handlers.
Definition: SimpleTransformer.cpp:1008
SimpleTransformer()
Default Constructor.
Definition: SimpleTransformer.cpp:54
SolutionPtr getSolOrig(ConstSolutionPtr sol, int &err)
Translate the solution of reformulated problem into that of original problem.
Definition: SimpleTransformer.cpp:166
~SimpleTransformer()
Destroy.
Definition: SimpleTransformer.cpp:72
SolutionPtr getSolTrans(ConstSolutionPtr sol, int &err)
Translate the solution of originial problem into that of reformulated problem.
Definition: SimpleTransformer.cpp:172
std::string getName() const
Get the name of this Transformer.
Definition: SimpleTransformer.cpp:161
Definition: Solution.h:30
Abstract base class for reformulating a problem so that handlers can be applied to it.
Definition: Transformer.h:53
Definition: Variable.h:31
Definition: YEqCGs.h:24
Definition: YEqQfBil.h:21
Definition: ActiveNodeStore.h:20
QuadHandler * QuadHandlerPtr
Shared pointer to QuadHandler.
Definition: QuadHandler.h:770
CxUnivarHandler * CxUnivarHandlerPtr
Shared pointer to CxUnivarHandler.
Definition: CxUnivarHandler.h:269
unsigned int UInt
Unsigned integer.
Definition: Types.h:30

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