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  * @file lbpDagObj.h
11  *
12  * @brief File containing declaration of lbp::DagObj struct which stores everything
13  * needed for DAG evaluation for lower bounding
14  *
15  **********************************************************************************/
16 
17 #pragma once
18 
19 #include "constraint.h"
20 #include "intervalLibrary.h"
21 #include "settings.h"
22 
23 #include "babOptVar.h"
24 
25 #include <utility>
26 #include <vector>
27 
28 
29 namespace maingo {
30 
31 
32 namespace lbp {
33 
34 
43 struct DagObj {
44  // Internal variables for the DAG
45  mc::FFGraph DAG;
46  std::vector<mc::FFVar> vars;
47  mc::FFSubgraph subgraph;
48  std::vector<mc::FFVar> functions;
49  std::vector<mc::FFVar> resultVars;
50  std::vector<MC> resultRelaxation;
51  std::vector<MC> McPoint;
52  std::vector<MC> MCarray;
55  // Variables for interval constraint propagation
56  std::vector<I> intervalArray;
57  std::vector<I> constraintIntervals;
58  std::vector<I> currentIntervals;
60  // Vectors holding operations of every function in the DAG (not all at once)
61  std::vector<std::vector<mc::FFVar>> functionsObj;
62  std::vector<std::vector<mc::FFVar>> functionsIneq;
63  std::vector<std::vector<mc::FFVar>> functionsEq;
64  std::vector<std::vector<mc::FFVar>> functionsIneqRelaxationOnly;
65  std::vector<std::vector<mc::FFVar>> functionsEqRelaxationOnly;
66  std::vector<std::vector<mc::FFVar>> functionsIneqSquash;
67  std::vector<mc::FFSubgraph> subgraphObj;
68  std::vector<mc::FFSubgraph> subgraphIneq;
69  std::vector<mc::FFSubgraph> subgraphEq;
70  std::vector<mc::FFSubgraph> subgraphIneqRelaxationOnly;
71  std::vector<mc::FFSubgraph> subgraphEqRelaxationOnly;
72  std::vector<mc::FFSubgraph> subgraphIneqSquash;
77  std::vector<std::vector<double>> simplexPoints;
78  std::vector<std::vector<double>> scaledPoints;
79  std::vector<vMC> vMcPoint;
80  std::vector<vMC> vMCarray;
81  mc::FFSubgraph subgraphNonlinear;
82  mc::FFSubgraph subgraphLinear;
83  std::vector<mc::FFVar> functionsNonlinear;
84  std::vector<mc::FFVar> functionsLinear;
85  std::vector<vMC> resultRelaxationVMCNonlinear;
86  std::vector<MC> resultRelaxationNonlinear;
87  std::vector<MC> resultRelaxationLinear;
88  std::vector<unsigned> chosenLinPoints;
89  std::vector<bool> objRowFilled;
91  std::vector<Constraint> *_constraintProperties;
96  DagObj(mc::FFGraph &DAG, const std::vector<mc::FFVar> &DAGvars, const std::vector<mc::FFVar> &DAGfunctions,
97  const std::vector<babBase::OptimizationVariable> &variables, const unsigned nineq, const unsigned neq,
98  const unsigned nineqRelaxationOnly, const unsigned neqRelaxationOnly, const unsigned nineqSquash,
99  Settings *settings, std::vector<Constraint> *constraintPropertiesIn);
100 
104  void initialize_vMcCormick();
105 };
106 
107 
108 } // end namespace lbp
109 
110 
111 } // end namespace maingo
std::vector< std::vector< mc::FFVar > > functionsEqRelaxationOnly
Definition: lbpDagObj.h:65
std::vector< MC > MCarray
Definition: lbpDagObj.h:52
std::vector< std::vector< mc::FFVar > > functionsObj
Definition: lbpDagObj.h:61
std::vector< std::vector< double > > scaledPoints
Definition: lbpDagObj.h:78
std::vector< I > constraintIntervals
Definition: lbpDagObj.h:57
std::vector< MC > resultRelaxationLinear
Definition: lbpDagObj.h:87
std::vector< mc::FFVar > resultVars
Definition: lbpDagObj.h:49
std::vector< vMC > resultRelaxationVMCNonlinear
Definition: lbpDagObj.h:85
std::vector< Constraint > * _constraintProperties
Definition: lbpDagObj.h:91
Struct for storing settings for MAiNGO.
Definition: settings.h:143
std::vector< mc::FFVar > functions
Definition: lbpDagObj.h:48
std::vector< mc::FFSubgraph > subgraphIneq
Definition: lbpDagObj.h:68
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, Settings *settings, std::vector< Constraint > *constraintPropertiesIn)
Constructor.
Definition: lbpDagObj.cpp:28
bool intervals_already_computed
Definition: lbpDagObj.h:53
std::vector< std::vector< mc::FFVar > > functionsIneqRelaxationOnly
Definition: lbpDagObj.h:64
std::vector< std::vector< double > > simplexPoints
Definition: lbpDagObj.h:77
std::vector< mc::FFVar > functionsNonlinear
Definition: lbpDagObj.h:83
std::vector< unsigned > chosenLinPoints
Definition: lbpDagObj.h:88
mc::FFSubgraph subgraphLinear
Definition: lbpDagObj.h:82
std::vector< I > currentIntervals
Definition: lbpDagObj.h:58
std::vector< mc::FFSubgraph > subgraphIneqSquash
Definition: lbpDagObj.h:72
std::vector< mc::FFSubgraph > subgraphEqRelaxationOnly
Definition: lbpDagObj.h:71
mc::FFGraph DAG
Definition: lbpDagObj.h:45
std::vector< mc::FFSubgraph > subgraphEq
Definition: lbpDagObj.h:69
Struct for storing all needed Directed acyclic Graph objects for the upper bounding solver.
Definition: lbpDagObj.h:43
std::vector< MC > McPoint
Definition: lbpDagObj.h:51
std::vector< mc::FFSubgraph > subgraphObj
Definition: lbpDagObj.h:67
namespace holding all essentials of MAiNGO
Definition: aleModel.h:31
mc::McCormick< I > MC
A type definition for a McCormick variable.
Definition: intervalLibrary.h:57
std::vector< bool > objRowFilled
Definition: lbpDagObj.h:89
mc::FFSubgraph subgraph
Definition: lbpDagObj.h:47
std::vector< std::vector< mc::FFVar > > functionsIneq
Definition: lbpDagObj.h:62
double validIntervalLowerBound
Definition: lbpDagObj.h:75
std::vector< mc::FFVar > vars
Definition: lbpDagObj.h:46
std::vector< I > intervalArray
Definition: lbpDagObj.h:56
std::vector< mc::FFVar > functionsLinear
Definition: lbpDagObj.h:84
std::vector< vMC > vMCarray
Definition: lbpDagObj.h:80
std::vector< std::vector< mc::FFVar > > functionsIneqSquash
Definition: lbpDagObj.h:66
std::vector< MC > resultRelaxationNonlinear
Definition: lbpDagObj.h:86
std::vector< mc::FFSubgraph > subgraphIneqRelaxationOnly
Definition: lbpDagObj.h:70
void initialize_vMcCormick()
Function for additional stuff neeeded when using vector McCormick.
Definition: lbpDagObj.cpp:153
MC infinityMC
Definition: lbpDagObj.h:74
mc::FFSubgraph subgraphNonlinear
Definition: lbpDagObj.h:81
std::vector< vMC > vMcPoint
Definition: lbpDagObj.h:79
std::vector< std::vector< mc::FFVar > > functionsEq
Definition: lbpDagObj.h:63
std::vector< MC > resultRelaxation
Definition: lbpDagObj.h:50