MAiNGO
lbpDagObj.h
Go to the documentation of this file.
1 /**********************************************************************************
2  * Copyright (c) 2019 Process Systems Engineering (AVT.SVT), RWTH Aachen University
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License 2.0 which is available at
6  * http://www.eclipse.org/legal/epl-2.0.
7  *
8  * SPDX-License-Identifier: EPL-2.0
9  *
10  **********************************************************************************/
11 
12 #pragma once
13 
14 #include "constraint.h"
15 #include "intervalLibrary.h"
16 #include "settings.h"
17 
18 #include "babOptVar.h"
19 
20 #include <memory>
21 #include <utility>
22 #include <vector>
23 
24 
25 namespace maingo {
26 
27 
28 namespace lbp {
29 
30 
39 struct DagObj {
40  // Internal variables for the DAG
41  mc::FFGraph DAG;
42  std::vector<mc::FFVar> vars;
43  mc::FFSubgraph subgraph;
44  std::vector<mc::FFVar> functions;
45  std::vector<mc::FFVar> resultVars;
46  std::vector<MC> resultRelaxation;
47  std::vector<MC> McPoint;
48  std::vector<MC> MCarray;
51  // Variables for interval constraint propagation
52  std::vector<I> intervalArray;
53  std::vector<I> constraintIntervals;
54  std::vector<I> currentIntervals;
56  // Vectors holding operations of every function in the DAG (not all at once)
57  std::vector<std::vector<mc::FFVar>> functionsObj;
58  std::vector<std::vector<mc::FFVar>> functionsIneq;
59  std::vector<std::vector<mc::FFVar>> functionsEq;
60  std::vector<std::vector<mc::FFVar>> functionsIneqRelaxationOnly;
61  std::vector<std::vector<mc::FFVar>> functionsEqRelaxationOnly;
62  std::vector<std::vector<mc::FFVar>> functionsIneqSquash;
63  std::vector<mc::FFSubgraph> subgraphObj;
64  std::vector<mc::FFSubgraph> subgraphIneq;
65  std::vector<mc::FFSubgraph> subgraphEq;
66  std::vector<mc::FFSubgraph> subgraphIneqRelaxationOnly;
67  std::vector<mc::FFSubgraph> subgraphEqRelaxationOnly;
68  std::vector<mc::FFSubgraph> subgraphIneqSquash;
73  std::vector<std::vector<double>> simplexPoints;
74  std::vector<std::vector<double>> scaledPoints;
75  std::vector<vMC> vMcPoint;
76  std::vector<vMC> vMCarray;
77  mc::FFSubgraph subgraphNonlinear;
78  mc::FFSubgraph subgraphLinear;
79  std::vector<mc::FFVar> functionsNonlinear;
80  std::vector<mc::FFVar> functionsLinear;
81  std::vector<vMC> resultRelaxationVMCNonlinear;
82  std::vector<MC> resultRelaxationNonlinear;
83  std::vector<MC> resultRelaxationLinear;
84  std::vector<unsigned> chosenLinPoints;
85  std::vector<bool> objRowFilled;
87  std::shared_ptr<std::vector<Constraint>> _constraintProperties;
92  DagObj(mc::FFGraph &DAG, const std::vector<mc::FFVar> &DAGvars, const std::vector<mc::FFVar> &DAGfunctions,
93  const std::vector<babBase::OptimizationVariable> &variables, const unsigned nineq, const unsigned neq,
94  const unsigned nineqRelaxationOnly, const unsigned neqRelaxationOnly, const unsigned nineqSquash,
95  std::shared_ptr<Settings> settings, std::shared_ptr<std::vector<Constraint>> constraintPropertiesIn);
96 
100  void initialize_vMcCormick();
101 };
102 
103 
104 } // end namespace lbp
105 
106 
107 } // end namespace maingo
std::vector< std::vector< mc::FFVar > > functionsEqRelaxationOnly
Definition: lbpDagObj.h:61
std::vector< MC > MCarray
Definition: lbpDagObj.h:48
std::vector< std::vector< mc::FFVar > > functionsObj
Definition: lbpDagObj.h:57
std::vector< std::vector< double > > scaledPoints
Definition: lbpDagObj.h:74
std::vector< I > constraintIntervals
Definition: lbpDagObj.h:53
std::vector< MC > resultRelaxationLinear
Definition: lbpDagObj.h:83
std::vector< mc::FFVar > resultVars
Definition: lbpDagObj.h:45
std::vector< vMC > resultRelaxationVMCNonlinear
Definition: lbpDagObj.h:81
std::vector< mc::FFVar > functions
Definition: lbpDagObj.h:44
std::vector< mc::FFSubgraph > subgraphIneq
Definition: lbpDagObj.h:64
bool intervals_already_computed
Definition: lbpDagObj.h:49
std::vector< std::vector< mc::FFVar > > functionsIneqRelaxationOnly
Definition: lbpDagObj.h:60
std::vector< std::vector< double > > simplexPoints
Definition: lbpDagObj.h:73
std::vector< mc::FFVar > functionsNonlinear
Definition: lbpDagObj.h:79
std::vector< unsigned > chosenLinPoints
Definition: lbpDagObj.h:84
mc::FFSubgraph subgraphLinear
Definition: lbpDagObj.h:78
std::vector< I > currentIntervals
Definition: lbpDagObj.h:54
std::vector< mc::FFSubgraph > subgraphIneqSquash
Definition: lbpDagObj.h:68
std::shared_ptr< std::vector< Constraint > > _constraintProperties
Definition: lbpDagObj.h:87
std::vector< mc::FFSubgraph > subgraphEqRelaxationOnly
Definition: lbpDagObj.h:67
mc::FFGraph DAG
Definition: lbpDagObj.h:41
std::vector< mc::FFSubgraph > subgraphEq
Definition: lbpDagObj.h:65
Struct for storing all needed Directed acyclic Graph objects for the upper bounding solver...
Definition: lbpDagObj.h:39
std::vector< MC > McPoint
Definition: lbpDagObj.h:47
std::vector< mc::FFSubgraph > subgraphObj
Definition: lbpDagObj.h:63
namespace holding all essentials of MAiNGO
Definition: aleModel.h:25
mc::McCormick< I > MC
A type definition for a McCormick variable.
Definition: intervalLibrary.h:34
std::vector< bool > objRowFilled
Definition: lbpDagObj.h:85
mc::FFSubgraph subgraph
Definition: lbpDagObj.h:43
std::vector< std::vector< mc::FFVar > > functionsIneq
Definition: lbpDagObj.h:58
double validIntervalLowerBound
Definition: lbpDagObj.h:71
std::vector< mc::FFVar > vars
Definition: lbpDagObj.h:42
std::vector< I > intervalArray
Definition: lbpDagObj.h:52
std::vector< mc::FFVar > functionsLinear
Definition: lbpDagObj.h:80
std::vector< vMC > vMCarray
Definition: lbpDagObj.h:76
std::vector< std::vector< mc::FFVar > > functionsIneqSquash
Definition: lbpDagObj.h:62
std::vector< MC > resultRelaxationNonlinear
Definition: lbpDagObj.h:82
std::vector< mc::FFSubgraph > subgraphIneqRelaxationOnly
Definition: lbpDagObj.h:66
void initialize_vMcCormick()
Function for additional stuff neeeded when using vector McCormick.
Definition: lbpDagObj.cpp:148
MC infinityMC
Definition: lbpDagObj.h:70
mc::FFSubgraph subgraphNonlinear
Definition: lbpDagObj.h:77
DagObj(mc::FFGraph &DAG, const std::vector< mc::FFVar > &DAGvars, const std::vector< mc::FFVar > &DAGfunctions, const std::vector< babBase::OptimizationVariable > &variables, const unsigned nineq, const unsigned neq, const unsigned nineqRelaxationOnly, const unsigned neqRelaxationOnly, const unsigned nineqSquash, std::shared_ptr< Settings > settings, std::shared_ptr< std::vector< Constraint >> constraintPropertiesIn)
Constructor.
Definition: lbpDagObj.cpp:23
std::vector< vMC > vMcPoint
Definition: lbpDagObj.h:75
std::vector< std::vector< mc::FFVar > > functionsEq
Definition: lbpDagObj.h:59
std::vector< MC > resultRelaxation
Definition: lbpDagObj.h:46