UG

Ubiquity Generator framework

bbParaSolverTerminationState.h
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and software framework */
4/* UG --- Ubquity Generator Framework */
5/* */
6/* Copyright Written by Yuji Shinano <shinano@zib.de>, */
7/* Copyright (C) 2021-2026 by Zuse Institute Berlin, */
8/* licensed under LGPL version 3 or later. */
9/* Commercial licenses are available through <licenses@zib.de> */
10/* */
11/* This code is free software; you can redistribute it and/or */
12/* modify it under the terms of the GNU Lesser General Public License */
13/* as published by the Free Software Foundation; either version 3 */
14/* of the License, or (at your option) any later version. */
15/* */
16/* This program is distributed in the hope that it will be useful, */
17/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
18/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
19/* GNU Lesser General Public License for more details. */
20/* */
21/* You should have received a copy of the GNU Lesser General Public License */
22/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
23/* */
24/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
25
26/**@file bbParaSolverTerminationState.h
27 * @brief This class contains solver termination state which is transferred form Solver to LC.
28 * @author Yuji Shinano
29 *
30 *
31 *
32 */
33
34/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
35
36
37#ifndef __BB_PARA_SOLVER_TERMINATION_STATE_H__
38#define __BB_PARA_SOLVER_TERMINATION_STATE_H__
39
40#include "ug/paraComm.h"
41#include "ug/paraInitiator.h"
43#ifdef UG_WITH_ZLIB
44#include "ug/gzstream.h"
45#endif
46
47namespace UG
48{
49
50///
51/// class BbParaSolverTerminationState
52/// (Solver termination state in a ParaSolver)
53///
55{
56protected:
57
58 int interrupted; ///< indicate that this solver is interrupted or not.
59 ///< 0: not interrupted,
60 ///< 1: interrupted,
61 ///< 2: checkpoint,
62 ///< 3: racing-ramp up
63 int rank; ///< rank of this solver
64 int nParaTasksReceived; ///< number of ParaTasks received in this ParaSolver
65 int nParaTasksSolved; ///< number of ParaTasks solved ( received ) in this ParaSolver
66 double runningTime; ///< this solver running time
67 double idleTimeToFirstParaTask; ///< idle time to start solving the first ParaTask
68 double idleTimeBetweenParaTasks; ///< idle time between ParaTasks processing
69 double idleTimeAfterLastParaTask; ///< idle time after the last ParaTask was solved
70 double idleTimeToWaitNotificationId; ///< idle time to wait notification Id messages
71 double idleTimeToWaitAckCompletion; ///< idle time to wait ack completion message
72 double idleTimeToWaitToken; ///< idle time to wait token
73 double detTime; ///< deterministic time, -1: should be non-deterministic
74 ///-------------------------------------
75 /// Counters related to this ParaSolver
76 ///-------------------------------------
77 int totalNSolved; ///< accumulated number of nodes solved in this ParaSolver
78 int minNSolved; ///< minimum number of subtree nodes rooted from ParaNode
79 int maxNSolved; ///< maximum number of subtree nodes rooted from ParaNode
80 int totalNSent; ///< accumulated number of nodes sent from this ParaSolver
81 int totalNImprovedIncumbent; ///< accumulated number of improvements of incumbent value in this ParaSolver
82 int nParaNodesSolvedAtRoot; ///< number of ParaNodes solved at root node before sending
83 int nParaNodesSolvedAtPreCheck; ///< number of ParaNodes solved at pre-checking of root node solvability
84 int nTransferredLocalCutsFromSolver; ///< number of local cuts transferred from this Solver
85 int minTransferredLocalCutsFromSolver; ///< minimum number of local cuts transferred from this Solver
86 int maxTransferredLocalCutsFromSolver; ///< maximum number of local cuts transferred from this Solver
87 int nTransferredBendersCutsFromSolver; ///< number of benders cuts transferred from this Solver
88 int minTransferredBendersCutsFromSolver; ///< minimum number of benders cuts transferred from this Solver
89 int maxTransferredBendersCutsFromSolver; ///< maximum number of benders cuts transferred from this Solver
90 int nTotalRestarts; ///< number of total restarts
91 int minRestarts; ///< minimum number of restarts
92 int maxRestarts; ///< maximum number of restarts
93 int nTightened; ///< number of tightened variable bounds during racing stage
94 int nTightenedInt; ///< number of tightened integral variable bounds during racing stage
95 int calcTerminationState; ///< termination sate of a calculation in a Solver
96 ///-----------------------------
97 /// times for root node process
98 ///-----------------------------
99 double totalRootNodeTime; ///< total time consumed by root node processes
100 double minRootNodeTime; ///< minimum time consumed by root node processes
101 double maxRootNodeTime; ///< maximum time consumed by root node processes
102
103public:
104
105 ///
106 /// default constructor
107 ///
109 )
111 interrupted(-1),
112 rank(-1),
115 runningTime(0.0),
122 detTime(-1.0),
123 totalNSolved(-1),
124 minNSolved(-1),
125 maxNSolved(-1),
126 totalNSent(-1),
137 minRestarts(0),
138 maxRestarts(0),
139 nTightened(0),
140 nTightenedInt(0),
143 minRootNodeTime(0.0),
144 maxRootNodeTime(0.0)
145 {
146 }
147
148 ///
149 /// constructor
150 ///
152 int inInterrupted, ///< indicate that this solver is interrupted or not.
153 ///< 0: not interrupted,
154 ///< 1: interrupted
155 ///< 2: checkpoint,
156 ///< 3: racing-ramp up
157 int inRank, ///< rank of this solver
158 int inTotalNSolved, ///< accumulated number of nodes solved in this ParaSolver
159 int inMinNSolved, ///< minimum number of subtree nodes rooted from ParaNode
160 int inMaxNSolved, ///< maximum number of subtree nodes rooted from ParaNode
161 int inTotalNSent, ///< accumulated number of nodes sent from this ParaSolver
162 int inTotalNImprovedIncumbent, ///< accumulated number of improvements of incumbent value in this ParaSolver
163 int inNParaNodesReceived, ///< number of ParaNodes received in this ParaSolver
164 int inNParaNodesSolved, ///< number of ParaNodes solved ( received ) in this ParaSolver
165 int inNParaNodesSolvedAtRoot, ///< number of ParaNodes solved at root node before sending
166 int inNParaNodesSolvedAtPreCheck, ///< number of ParaNodes solved at pre-checking of root node solvability
167 int inNTransferredLocalCutsFromSolver, ///< number of local cuts transferred from this Solver
168 int inMinTransferredLocalCutsFromSolver, ///< minimum number of local cuts transferred from this Solver
169 int inMaxTransferredLocalCutsFromSolver, ///< maximum number of local cuts transferred from this Solver
170 int inNTransferredBendersCutsFromSolver, ///< number of benders cuts transferred from this Solver
171 int inMinTransferredBendersCutsFromSolver, ///< minimum number of benders cuts transferred from this Solver
172 int inMaxTransferredBendersCutsFromSolver, ///< maximum number of benders cuts transferred from this Solver
173 int inNTotalRestarts, ///< number of total restarts
174 int inMinRestarts, ///< minimum number of restarts
175 int inMaxRestarts, ///< maximum number of restarts
176 int inNTightened, ///< number of tightened variable bounds during racing stage
177 int inNTightenedInt, ///< number of tightened integral variable bounds during racing stage
178 int inCalcTerminationState, ///< termination sate of a calculation in a Solver
179 double inRunningTime, ///< this solver running time
180 double inIdleTimeToFirstParaNode, ///< idle time to start solving the first ParaNode
181 double inIdleTimeBetweenParaNodes, ///< idle time between ParaNodes processing
182 double inIddleTimeAfterLastParaNode, ///< idle time after the last ParaNode was solved
183 double inIdleTimeToWaitNotificationId, ///< idle time to wait notification Id messages
184 double inIdleTimeToWaitAckCompletion, ///< idle time to wait ack completion message
185 double inIdleTimeToWaitToken, ///< idle time to wait token
186 double inTotalRootNodeTime, ///< total time consumed by root node processes
187 double inMinRootNodeTime, ///< minimum time consumed by root node processes
188 double inMaxRootNodeTime, ///< maximum time consumed by root node processes
189 double inDetTime ///< deterministic time, -1: should be non-deterministic
190 )
192 interrupted(inInterrupted),
193 rank(inRank),
194 nParaTasksReceived(inNParaNodesReceived),
195 nParaTasksSolved(inNParaNodesSolved),
196 runningTime(inRunningTime),
197 idleTimeToFirstParaTask(inIdleTimeToFirstParaNode),
198 idleTimeBetweenParaTasks(inIdleTimeBetweenParaNodes),
199 idleTimeAfterLastParaTask(inIddleTimeAfterLastParaNode),
200 idleTimeToWaitNotificationId(inIdleTimeToWaitNotificationId),
201 idleTimeToWaitAckCompletion(inIdleTimeToWaitAckCompletion),
202 idleTimeToWaitToken(inIdleTimeToWaitToken),
203 detTime(inDetTime),
204 totalNSolved(inTotalNSolved),
205 minNSolved(inMinNSolved),
206 maxNSolved(inMaxNSolved),
207 totalNSent(inTotalNSent),
208 totalNImprovedIncumbent(inTotalNImprovedIncumbent),
209 nParaNodesSolvedAtRoot(inNParaNodesSolvedAtRoot),
210 nParaNodesSolvedAtPreCheck(inNParaNodesSolvedAtPreCheck),
211 nTransferredLocalCutsFromSolver(inNTransferredLocalCutsFromSolver),
212 minTransferredLocalCutsFromSolver(inMinTransferredLocalCutsFromSolver),
213 maxTransferredLocalCutsFromSolver(inMaxTransferredLocalCutsFromSolver),
214 nTransferredBendersCutsFromSolver(inNTransferredBendersCutsFromSolver),
215 minTransferredBendersCutsFromSolver(inMinTransferredBendersCutsFromSolver),
216 maxTransferredBendersCutsFromSolver(inMaxTransferredBendersCutsFromSolver),
217 nTotalRestarts(inNTotalRestarts),
218 minRestarts(inMinRestarts),
219 maxRestarts(inMaxRestarts),
220 nTightened(inNTightened),
221 nTightenedInt(inNTightenedInt),
222 calcTerminationState(inCalcTerminationState),
223 totalRootNodeTime(inTotalRootNodeTime),
224 minRootNodeTime(inMinRootNodeTime),
225 maxRootNodeTime(inMaxRootNodeTime)
226 {
227 }
228
229 ///
230 /// destructor
231 ///
233 )
234 {
235 }
236
237 ///
238 /// getter of interrupted flag
239 /// @return interrupted mode
240 ///
242 )
243 {
244 return interrupted;
245 }
246
247 ///
248 /// getter of deterministic time
249 /// @return deterministic time
250 ///
252 )
253 {
254 return detTime;
255 }
256
257 ///
258 /// getter of calcTermination state
259 /// @return termination sate of a calculation in a Solver
260 ///
262 )
263 {
265 }
266
267 ///
268 /// stringfy BbParaSolverTerminationState object
269 /// @return string to show inside of BbParaSolverTerminationState object
270 ///
271 std::string toString(
272 ParaInitiator *initiator ///< pointer to ParaInitiator object
273 );
274
275#ifdef UG_WITH_ZLIB
276
277 ///
278 /// write BbParaSolverTerminationState to checkpoint file
279 ///
280 void write(
281 gzstream::ogzstream &out ///< gzstream to output
282 );
283
284 ///
285 /// read BbParaSolverTerminationState from checkpoint file
286 ///
287 bool read(
288 ParaComm *comm, ///< communicator used
289 gzstream::igzstream &in ///< gzstream to input
290 );
291
292#endif
293
294};
295
296}
297
298#endif // __BB_PARA_SOLVER_TERMINATION_STATE_H__
299
class BbParaSolverTerminationState (Solver termination state in a ParaSolver)
bool read(ParaComm *comm, gzstream::igzstream &in)
read BbParaSolverTerminationState from checkpoint file
double idleTimeToWaitNotificationId
idle time to wait notification Id messages
int minNSolved
minimum number of subtree nodes rooted from ParaNode
int maxNSolved
maximum number of subtree nodes rooted from ParaNode
int nTransferredLocalCutsFromSolver
number of local cuts transferred from this Solver
int nTightened
number of tightened variable bounds during racing stage
int maxRestarts
maximum number of restarts
int totalNSolved
accumulated number of nodes solved in this ParaSolver
double runningTime
this solver running time
int nParaTasksReceived
number of ParaTasks received in this ParaSolver
int getInterruptedMode()
getter of interrupted flag
double idleTimeBetweenParaTasks
idle time between ParaTasks processing
int nParaNodesSolvedAtRoot
number of ParaNodes solved at root node before sending
double maxRootNodeTime
maximum time consumed by root node processes
int getCalcTerminationState()
getter of calcTermination state
double getDeterministicTime()
getter of deterministic time
std::string toString(ParaInitiator *initiator)
stringfy BbParaSolverTerminationState object
int interrupted
indicate that this solver is interrupted or not. 0: not interrupted, 1: interrupted,...
BbParaSolverTerminationState(int inInterrupted, int inRank, int inTotalNSolved, int inMinNSolved, int inMaxNSolved, int inTotalNSent, int inTotalNImprovedIncumbent, int inNParaNodesReceived, int inNParaNodesSolved, int inNParaNodesSolvedAtRoot, int inNParaNodesSolvedAtPreCheck, int inNTransferredLocalCutsFromSolver, int inMinTransferredLocalCutsFromSolver, int inMaxTransferredLocalCutsFromSolver, int inNTransferredBendersCutsFromSolver, int inMinTransferredBendersCutsFromSolver, int inMaxTransferredBendersCutsFromSolver, int inNTotalRestarts, int inMinRestarts, int inMaxRestarts, int inNTightened, int inNTightenedInt, int inCalcTerminationState, double inRunningTime, double inIdleTimeToFirstParaNode, double inIdleTimeBetweenParaNodes, double inIddleTimeAfterLastParaNode, double inIdleTimeToWaitNotificationId, double inIdleTimeToWaitAckCompletion, double inIdleTimeToWaitToken, double inTotalRootNodeTime, double inMinRootNodeTime, double inMaxRootNodeTime, double inDetTime)
constructor
double idleTimeToWaitToken
idle time to wait token
int totalNSent
accumulated number of nodes sent from this ParaSolver
int minRestarts
minimum number of restarts
void write(gzstream::ogzstream &out)
write BbParaSolverTerminationState to checkpoint file
int nTightenedInt
number of tightened integral variable bounds during racing stage
int nTransferredBendersCutsFromSolver
number of benders cuts transferred from this Solver
double idleTimeToWaitAckCompletion
idle time to wait ack completion message
double minRootNodeTime
minimum time consumed by root node processes
int minTransferredLocalCutsFromSolver
minimum number of local cuts transferred from this Solver
int minTransferredBendersCutsFromSolver
minimum number of benders cuts transferred from this Solver
int nParaNodesSolvedAtPreCheck
number of ParaNodes solved at pre-checking of root node solvability
double idleTimeAfterLastParaTask
idle time after the last ParaTask was solved
int maxTransferredBendersCutsFromSolver
maximum number of benders cuts transferred from this Solver
int maxTransferredLocalCutsFromSolver
maximum number of local cuts transferred from this Solver
double totalRootNodeTime
total time consumed by root node processes
int totalNImprovedIncumbent
accumulated number of improvements of incumbent value in this ParaSolver
double idleTimeToFirstParaTask
idle time to start solving the first ParaTask
int nTotalRestarts
number of total restarts
int nParaTasksSolved
number of ParaTasks solved ( received ) in this ParaSolver
Base class of communicator object.
Definition: paraComm.h:102
Class for initiator.
Definition: paraInitiator.h:63
class ParaSolverTerminationState (Solver termination state in a ParaSolver)
static ScipParaCommTh * comm
Definition: fscip.cpp:73
Utilities for handling gzipped input and output streams.
static const int CompTerminatedNormally
Definition: paraDef.h:182
Base class of communicator for UG Framework.
Base class of initiator that maintains original problem and incumbent solution.
This class contains solver termination state which is transferred form Solver to LC.