Scippy

    SCIP

    Solving Constraint Integer Programs

    scip_timing.h
    Go to the documentation of this file.
    1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    2/* */
    3/* This file is part of the program and library */
    4/* SCIP --- Solving Constraint Integer Programs */
    5/* */
    6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
    7/* */
    8/* Licensed under the Apache License, Version 2.0 (the "License"); */
    9/* you may not use this file except in compliance with the License. */
    10/* You may obtain a copy of the License at */
    11/* */
    12/* http://www.apache.org/licenses/LICENSE-2.0 */
    13/* */
    14/* Unless required by applicable law or agreed to in writing, software */
    15/* distributed under the License is distributed on an "AS IS" BASIS, */
    16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
    17/* See the License for the specific language governing permissions and */
    18/* limitations under the License. */
    19/* */
    20/* You should have received a copy of the Apache-2.0 license */
    21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
    22/* */
    23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    24
    25/**@file scip_timing.h
    26 * @ingroup PUBLICCOREAPI
    27 * @brief public methods for timing
    28 * @author Tobias Achterberg
    29 * @author Timo Berthold
    30 * @author Thorsten Koch
    31 * @author Alexander Martin
    32 * @author Marc Pfetsch
    33 * @author Kati Wolter
    34 * @author Gregor Hendel
    35 * @author Leona Gottwald
    36 */
    37
    38/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    39
    40#ifndef __SCIP_SCIP_TIMING_H__
    41#define __SCIP_SCIP_TIMING_H__
    42
    43
    44#include "scip/def.h"
    45#include "scip/type_clock.h"
    46#include "scip/type_retcode.h"
    47#include "scip/type_scip.h"
    48
    49#ifdef __cplusplus
    50extern "C" {
    51#endif
    52
    53/**@addtogroup PublicTimingMethods
    54 *
    55 * @{
    56 */
    57
    58/** gets current time of day in seconds (standard time zone)
    59 *
    60 * @return the current time of day in seconds (standard time zone).
    61 */
    62SCIP_EXPORT
    64 SCIP* scip /**< SCIP data structure */
    65 );
    66
    67/** creates a clock using the default clock type
    68 *
    69 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    70 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    71 */
    72SCIP_EXPORT
    74 SCIP* scip, /**< SCIP data structure */
    75 SCIP_CLOCK** clck /**< pointer to clock timer */
    76 );
    77
    78/** creates a clock counting the CPU user seconds
    79 *
    80 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    81 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    82 */
    83SCIP_EXPORT
    85 SCIP* scip, /**< SCIP data structure */
    86 SCIP_CLOCK** clck /**< pointer to clock timer */
    87 );
    88
    89/** creates a clock counting the wall clock seconds
    90 *
    91 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    92 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    93 */
    94SCIP_EXPORT
    96 SCIP* scip, /**< SCIP data structure */
    97 SCIP_CLOCK** clck /**< pointer to clock timer */
    98 );
    99
    100/** frees a clock
    101 *
    102 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    103 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    104 */
    105SCIP_EXPORT
    107 SCIP* scip, /**< SCIP data structure */
    108 SCIP_CLOCK** clck /**< pointer to clock timer */
    109 );
    110
    111/** resets the time measurement of a clock to zero and completely stops the clock
    112 *
    113 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    114 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    115 */
    116SCIP_EXPORT
    118 SCIP* scip, /**< SCIP data structure */
    119 SCIP_CLOCK* clck /**< clock timer */
    120 );
    121
    122/** starts the time measurement of a clock
    123 *
    124 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    125 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    126 */
    127SCIP_EXPORT
    129 SCIP* scip, /**< SCIP data structure */
    130 SCIP_CLOCK* clck /**< clock timer */
    131 );
    132
    133/** stops the time measurement of a clock
    134 *
    135 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    136 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    137 */
    138SCIP_EXPORT
    140 SCIP* scip, /**< SCIP data structure */
    141 SCIP_CLOCK* clck /**< clock timer */
    142 );
    143
    144/** enables or disables \p clck */
    145SCIP_EXPORT
    147 SCIP_CLOCK* clck, /**< the clock to be disabled/enabled */
    148 SCIP_Bool enable /**< should the clock be enabled or disabled? */
    149 );
    150
    151/** enables or disables all statistic clocks of SCIP concerning plugin statistics,
    152 * LP execution time, strong branching time, etc.
    153 *
    154 * Method reads the value of the parameter timing/statistictiming. In order to disable statistic timing,
    155 * set the parameter to FALSE.
    156 *
    157 * @note: The (pre-)solving time clocks which are relevant for the output during (pre-)solving
    158 * are not affected by this method
    159 *
    160 * @see: For completely disabling all timing of SCIP, consider setting the parameter timing/enabled to FALSE
    161 *
    162 * @pre This method can be called if SCIP is in one of the following stages:
    163 * - \ref SCIP_STAGE_PROBLEM
    164 * - \ref SCIP_STAGE_TRANSFORMING
    165 * - \ref SCIP_STAGE_TRANSFORMED
    166 * - \ref SCIP_STAGE_INITPRESOLVE
    167 * - \ref SCIP_STAGE_PRESOLVING
    168 * - \ref SCIP_STAGE_EXITPRESOLVE
    169 * - \ref SCIP_STAGE_PRESOLVED
    170 * - \ref SCIP_STAGE_INITSOLVE
    171 * - \ref SCIP_STAGE_SOLVING
    172 * - \ref SCIP_STAGE_SOLVED
    173 * - \ref SCIP_STAGE_EXITSOLVE
    174 * - \ref SCIP_STAGE_FREETRANS
    175 *
    176 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    177 */
    178SCIP_EXPORT
    180 SCIP* scip /**< SCIP data structure */
    181 );
    182
    183/** starts the current solving time
    184 *
    185 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    186 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    187 *
    188 * @pre This method can be called if SCIP is in one of the following stages:
    189 * - \ref SCIP_STAGE_PROBLEM
    190 * - \ref SCIP_STAGE_TRANSFORMING
    191 * - \ref SCIP_STAGE_TRANSFORMED
    192 * - \ref SCIP_STAGE_INITPRESOLVE
    193 * - \ref SCIP_STAGE_PRESOLVING
    194 * - \ref SCIP_STAGE_EXITPRESOLVE
    195 * - \ref SCIP_STAGE_PRESOLVED
    196 * - \ref SCIP_STAGE_INITSOLVE
    197 * - \ref SCIP_STAGE_SOLVING
    198 * - \ref SCIP_STAGE_SOLVED
    199 * - \ref SCIP_STAGE_EXITSOLVE
    200 * - \ref SCIP_STAGE_FREETRANS
    201 *
    202 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    203 */
    204SCIP_EXPORT
    206 SCIP* scip /**< SCIP data structure */
    207 );
    208
    209/** stops the current solving time in seconds
    210 *
    211 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    212 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    213 *
    214 * @pre This method can be called if SCIP is in one of the following stages:
    215 * - \ref SCIP_STAGE_PROBLEM
    216 * - \ref SCIP_STAGE_TRANSFORMING
    217 * - \ref SCIP_STAGE_TRANSFORMED
    218 * - \ref SCIP_STAGE_INITPRESOLVE
    219 * - \ref SCIP_STAGE_PRESOLVING
    220 * - \ref SCIP_STAGE_EXITPRESOLVE
    221 * - \ref SCIP_STAGE_PRESOLVED
    222 * - \ref SCIP_STAGE_INITSOLVE
    223 * - \ref SCIP_STAGE_SOLVING
    224 * - \ref SCIP_STAGE_SOLVED
    225 * - \ref SCIP_STAGE_EXITSOLVE
    226 * - \ref SCIP_STAGE_FREETRANS
    227 *
    228 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    229 */
    230SCIP_EXPORT
    232 SCIP* scip /**< SCIP data structure */
    233 );
    234
    235/** gets the measured time of a clock in seconds
    236 *
    237 * @return the measured time of a clock in seconds.
    238 */
    239SCIP_EXPORT
    241 SCIP* scip, /**< SCIP data structure */
    242 SCIP_CLOCK* clck /**< clock timer */
    243 );
    244
    245/** sets the measured time of a clock to the given value in seconds
    246 *
    247 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    248 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    249 */
    250SCIP_EXPORT
    252 SCIP* scip, /**< SCIP data structure */
    253 SCIP_CLOCK* clck, /**< clock timer */
    254 SCIP_Real sec /**< time in seconds to set the clock's timer to */
    255 );
    256
    257/** gets the current total SCIP time in seconds, possibly accumulated over several problems.
    258 *
    259 * @return the current total SCIP time in seconds, ie. the total time since the SCIP instance has been created
    260 */
    261SCIP_EXPORT
    263 SCIP* scip /**< SCIP data structure */
    264 );
    265
    266/** gets the current solving time in seconds
    267 *
    268 * @return the current solving time in seconds.
    269 *
    270 * @pre This method can be called if SCIP is in one of the following stages:
    271 * - \ref SCIP_STAGE_PROBLEM
    272 * - \ref SCIP_STAGE_TRANSFORMING
    273 * - \ref SCIP_STAGE_TRANSFORMED
    274 * - \ref SCIP_STAGE_INITPRESOLVE
    275 * - \ref SCIP_STAGE_PRESOLVING
    276 * - \ref SCIP_STAGE_EXITPRESOLVE
    277 * - \ref SCIP_STAGE_PRESOLVED
    278 * - \ref SCIP_STAGE_INITSOLVE
    279 * - \ref SCIP_STAGE_SOLVING
    280 * - \ref SCIP_STAGE_SOLVED
    281 *
    282 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    283 */
    284SCIP_EXPORT
    286 SCIP* scip /**< SCIP data structure */
    287 );
    288
    289/** gets the current reading time in seconds
    290 *
    291 * @return the current reading time in seconds.
    292 *
    293 * @pre This method can be called if SCIP is in one of the following stages:
    294 * - \ref SCIP_STAGE_PROBLEM
    295 * - \ref SCIP_STAGE_TRANSFORMING
    296 * - \ref SCIP_STAGE_TRANSFORMED
    297 * - \ref SCIP_STAGE_INITPRESOLVE
    298 * - \ref SCIP_STAGE_PRESOLVING
    299 * - \ref SCIP_STAGE_EXITPRESOLVE
    300 * - \ref SCIP_STAGE_PRESOLVED
    301 * - \ref SCIP_STAGE_INITSOLVE
    302 * - \ref SCIP_STAGE_SOLVING
    303 * - \ref SCIP_STAGE_SOLVED
    304 *
    305 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    306 */
    307SCIP_EXPORT
    309 SCIP* scip /**< SCIP data structure */
    310 );
    311
    312/** gets the current presolving time in seconds
    313 *
    314 * @return the current presolving time in seconds.
    315 *
    316 * @pre This method can be called if SCIP is in one of the following stages:
    317 * - \ref SCIP_STAGE_INITPRESOLVE
    318 * - \ref SCIP_STAGE_PRESOLVING
    319 * - \ref SCIP_STAGE_EXITPRESOLVE
    320 * - \ref SCIP_STAGE_PRESOLVED
    321 * - \ref SCIP_STAGE_INITSOLVE
    322 * - \ref SCIP_STAGE_SOLVING
    323 * - \ref SCIP_STAGE_SOLVED
    324 *
    325 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    326 */
    327SCIP_EXPORT
    329 SCIP* scip /**< SCIP data structure */
    330 );
    331
    332/** gets the time need to solve the first LP in the root node
    333 *
    334 * @return the solving time for the first LP in the root node in seconds.
    335 *
    336 * @pre This method can be called if SCIP is in one of the following stages:
    337 * - \ref SCIP_STAGE_TRANSFORMING
    338 * - \ref SCIP_STAGE_TRANSFORMED
    339 * - \ref SCIP_STAGE_INITPRESOLVE
    340 * - \ref SCIP_STAGE_PRESOLVING
    341 * - \ref SCIP_STAGE_EXITPRESOLVE
    342 * - \ref SCIP_STAGE_PRESOLVED
    343 * - \ref SCIP_STAGE_INITSOLVE
    344 * - \ref SCIP_STAGE_SOLVING
    345 * - \ref SCIP_STAGE_SOLVED
    346 *
    347 * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
    348 */
    349SCIP_EXPORT
    351 SCIP* scip /**< SCIP data structure */
    352 );
    353
    354/**@} */
    355
    356#ifdef __cplusplus
    357}
    358#endif
    359
    360#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    SCIP_RETCODE SCIPcreateClock(SCIP *scip, SCIP_CLOCK **clck)
    Definition: scip_timing.c:76
    SCIP_RETCODE SCIPresetClock(SCIP *scip, SCIP_CLOCK *clck)
    Definition: scip_timing.c:144
    SCIP_Real SCIPgetFirstLPTime(SCIP *scip)
    Definition: scip_timing.c:468
    void SCIPsetClockEnabled(SCIP_CLOCK *clck, SCIP_Bool enable)
    Definition: scip_timing.c:191
    SCIP_RETCODE SCIPcreateCPUClock(SCIP *scip, SCIP_CLOCK **clck)
    Definition: scip_timing.c:93
    SCIP_Real SCIPgetTimeOfDay(SCIP *scip)
    Definition: scip_timing.c:62
    SCIP_RETCODE SCIPstopClock(SCIP *scip, SCIP_CLOCK *clck)
    Definition: scip_timing.c:178
    SCIP_RETCODE SCIPenableOrDisableStatisticTiming(SCIP *scip)
    Definition: scip_timing.c:227
    SCIP_RETCODE SCIPstartSolvingTime(SCIP *scip)
    Definition: scip_timing.c:270
    SCIP_Real SCIPgetSolvingTime(SCIP *scip)
    Definition: scip_timing.c:378
    SCIP_Real SCIPgetTotalTime(SCIP *scip)
    Definition: scip_timing.c:351
    SCIP_RETCODE SCIPfreeClock(SCIP *scip, SCIP_CLOCK **clck)
    Definition: scip_timing.c:127
    SCIP_Real SCIPgetReadingTime(SCIP *scip)
    Definition: scip_timing.c:405
    SCIP_RETCODE SCIPcreateWallClock(SCIP *scip, SCIP_CLOCK **clck)
    Definition: scip_timing.c:110
    SCIP_RETCODE SCIPstopSolvingTime(SCIP *scip)
    Definition: scip_timing.c:303
    SCIP_Real SCIPgetClockTime(SCIP *scip, SCIP_CLOCK *clck)
    Definition: scip_timing.c:319
    SCIP_Real SCIPgetPresolvingTime(SCIP *scip)
    Definition: scip_timing.c:442
    SCIP_RETCODE SCIPstartClock(SCIP *scip, SCIP_CLOCK *clck)
    Definition: scip_timing.c:161
    SCIP_RETCODE SCIPsetClockTime(SCIP *scip, SCIP_CLOCK *clck, SCIP_Real sec)
    Definition: scip_timing.c:334
    type definitions for clocks and timing issues
    type definitions for return codes for SCIP methods
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for SCIP's main datastructure