Scippy

SCIP

Solving Constraint Integer Programs

stat.c
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 stat.c
26 * @ingroup OTHER_CFILES
27 * @brief methods for problem statistics
28 * @author Tobias Achterberg
29 * @author Stefan Heinz
30 * @author Gregor Hendel
31 * @author Gerald Gamrath
32 * @author Marc Pfetsch
33 * @author Stefan Vigerske
34 */
35
36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
37
38#include "scip/clock.h"
39#include "scip/history.h"
40#include "scip/mem.h"
41#include "scip/prob.h"
42#include "scip/pub_message.h"
43#include "scip/pub_misc.h"
44#include "scip/pub_var.h"
45#include "scip/set.h"
46#include "scip/stat.h"
47#include "scip/struct_set.h"
48#include "scip/struct_stat.h"
49#include "scip/var.h"
50#include "scip/visual.h"
51#include "scip/certificate.h"
52
53
54
55/** creates problem statistics data */
57 SCIP_STAT** stat, /**< pointer to problem statistics data */
58 BMS_BLKMEM* blkmem, /**< block memory */
59 SCIP_SET* set, /**< global SCIP settings */
60 SCIP_PROB* transprob, /**< transformed problem, or NULL */
61 SCIP_PROB* origprob, /**< original problem, or NULL */
62 SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
63 )
64{
65 assert(stat != NULL);
66 assert(set != NULL);
67
69 SCIP_CALL( SCIPclockCreate(&(*stat)->solvingtime, SCIP_CLOCKTYPE_DEFAULT) );
70 SCIP_CALL( SCIPclockCreate(&(*stat)->solvingtimeoverall, SCIP_CLOCKTYPE_DEFAULT) );
71 SCIP_CALL( SCIPclockCreate(&(*stat)->presolvingtime, SCIP_CLOCKTYPE_DEFAULT) );
72 SCIP_CALL( SCIPclockCreate(&(*stat)->presolvingtimeoverall, SCIP_CLOCKTYPE_DEFAULT) );
73 SCIP_CALL( SCIPclockCreate(&(*stat)->primallptime, SCIP_CLOCKTYPE_DEFAULT) );
74 SCIP_CALL( SCIPclockCreate(&(*stat)->duallptime, SCIP_CLOCKTYPE_DEFAULT) );
75 SCIP_CALL( SCIPclockCreate(&(*stat)->lexduallptime, SCIP_CLOCKTYPE_DEFAULT) );
76 SCIP_CALL( SCIPclockCreate(&(*stat)->barrierlptime, SCIP_CLOCKTYPE_DEFAULT) );
77 SCIP_CALL( SCIPclockCreate(&(*stat)->resolveinstablelptime, SCIP_CLOCKTYPE_DEFAULT) );
78 SCIP_CALL( SCIPclockCreate(&(*stat)->divinglptime, SCIP_CLOCKTYPE_DEFAULT) );
79 SCIP_CALL( SCIPclockCreate(&(*stat)->strongbranchtime, SCIP_CLOCKTYPE_DEFAULT) );
80 SCIP_CALL( SCIPclockCreate(&(*stat)->conflictlptime, SCIP_CLOCKTYPE_DEFAULT) );
81 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeaslptime, SCIP_CLOCKTYPE_DEFAULT) );
82 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeaslptime, SCIP_CLOCKTYPE_DEFAULT) );
83 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeasbstime, SCIP_CLOCKTYPE_DEFAULT) );
84 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeasbstime, SCIP_CLOCKTYPE_DEFAULT) );
85 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeaspstime, SCIP_CLOCKTYPE_DEFAULT) );
86 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeaspstime, SCIP_CLOCKTYPE_DEFAULT) );
87 SCIP_CALL( SCIPclockCreate(&(*stat)->lpsoltime, SCIP_CLOCKTYPE_DEFAULT) );
88 SCIP_CALL( SCIPclockCreate(&(*stat)->relaxsoltime, SCIP_CLOCKTYPE_DEFAULT) );
89 SCIP_CALL( SCIPclockCreate(&(*stat)->pseudosoltime, SCIP_CLOCKTYPE_DEFAULT) );
90 SCIP_CALL( SCIPclockCreate(&(*stat)->sbsoltime, SCIP_CLOCKTYPE_DEFAULT) );
91 SCIP_CALL( SCIPclockCreate(&(*stat)->nodeactivationtime, SCIP_CLOCKTYPE_DEFAULT) );
92 SCIP_CALL( SCIPclockCreate(&(*stat)->nlpsoltime, SCIP_CLOCKTYPE_DEFAULT) );
93 SCIP_CALL( SCIPclockCreate(&(*stat)->copyclock, SCIP_CLOCKTYPE_DEFAULT) );
94 SCIP_CALL( SCIPclockCreate(&(*stat)->strongpropclock, SCIP_CLOCKTYPE_DEFAULT) );
95 SCIP_CALL( SCIPclockCreate(&(*stat)->reoptupdatetime, SCIP_CLOCKTYPE_DEFAULT) );
96
97 /* turn statistic timing on or off, depending on the user parameter */
98 SCIPstatEnableOrDisableStatClocks(*stat, set->time_statistictiming);
99
100 SCIP_CALL( SCIPhistoryCreate(&(*stat)->glbhistory, blkmem) );
101 SCIP_CALL( SCIPhistoryCreate(&(*stat)->glbhistorycrun, blkmem) );
102 SCIP_CALL( SCIPvisualCreate(&(*stat)->visual, messagehdlr) );
103 SCIP_CALL( SCIPcertificateCreate(&(*stat)->certificate, messagehdlr ) );
104
105 SCIP_CALL( SCIPregressionCreate(&(*stat)->regressioncandsobjval) );
106
107 if( set->exact_enable )
108 {
109 SCIP_CALL( SCIPrationalCreate(&(*stat)->lastlowerboundexact) );
110 SCIPrationalSetNegInfinity((*stat)->lastlowerboundexact);
111 }
112 else
113 (*stat)->lastlowerboundexact = NULL;
114
115 (*stat)->status = SCIP_STATUS_UNKNOWN;
116 (*stat)->marked_nvaridx = 0;
117 (*stat)->marked_ncolidx = 0;
118 (*stat)->marked_nrowidx = 0;
119 (*stat)->subscipdepth = 0;
120 (*stat)->detertimecnt = 0.0;
121 (*stat)->nreoptruns = 0;
122
123 SCIPstatReset(*stat, set, transprob, origprob);
124
125 return SCIP_OKAY;
126}
127
128/** frees problem statistics data */
130 SCIP_STAT** stat, /**< pointer to problem statistics data */
131 BMS_BLKMEM* blkmem /**< block memory */
132 )
133{
134 assert(stat != NULL);
135 assert(*stat != NULL);
136
137 SCIPclockFree(&(*stat)->solvingtime);
138 SCIPclockFree(&(*stat)->solvingtimeoverall);
139 SCIPclockFree(&(*stat)->presolvingtime);
140 SCIPclockFree(&(*stat)->presolvingtimeoverall);
141 SCIPclockFree(&(*stat)->primallptime);
142 SCIPclockFree(&(*stat)->duallptime);
143 SCIPclockFree(&(*stat)->lexduallptime);
144 SCIPclockFree(&(*stat)->barrierlptime);
145 SCIPclockFree(&(*stat)->resolveinstablelptime);
146 SCIPclockFree(&(*stat)->divinglptime);
147 SCIPclockFree(&(*stat)->strongbranchtime);
148 SCIPclockFree(&(*stat)->conflictlptime);
149 SCIPclockFree(&(*stat)->provedfeaslptime);
150 SCIPclockFree(&(*stat)->provedinfeaslptime);
151 SCIPclockFree(&(*stat)->provedfeasbstime);
152 SCIPclockFree(&(*stat)->provedinfeasbstime);
153 SCIPclockFree(&(*stat)->provedfeaspstime);
154 SCIPclockFree(&(*stat)->provedinfeaspstime);
155 SCIPclockFree(&(*stat)->lpsoltime);
156 SCIPclockFree(&(*stat)->relaxsoltime);
157 SCIPclockFree(&(*stat)->pseudosoltime);
158 SCIPclockFree(&(*stat)->sbsoltime);
159 SCIPclockFree(&(*stat)->nodeactivationtime);
160 SCIPclockFree(&(*stat)->nlpsoltime);
161 SCIPclockFree(&(*stat)->copyclock);
162 SCIPclockFree(&(*stat)->strongpropclock);
163 SCIPclockFree(&(*stat)->reoptupdatetime);
164
165 SCIPhistoryFree(&(*stat)->glbhistory, blkmem);
166 SCIPhistoryFree(&(*stat)->glbhistorycrun, blkmem);
167 SCIPvisualFree(&(*stat)->visual);
168 SCIPcertificateFree(&(*stat)->certificate);
169
170 SCIPregressionFree(&(*stat)->regressioncandsobjval);
171
172 if( (*stat)->lastlowerboundexact != NULL )
173 SCIPrationalFree(&(*stat)->lastlowerboundexact);
174
175 BMSfreeMemory(stat);
176
177 return SCIP_OKAY;
178}
179
180/** disables the collection of any statistic for a variable */
182 SCIP_STAT* stat /**< problem statistics data */
183 )
184{
185 assert(stat != NULL);
186
187 stat->collectvarhistory = FALSE;
188}
189
190/** enables the collection of statistics for a variable */
192 SCIP_STAT* stat /**< problem statistics data */
193 )
194{
195 assert(stat != NULL);
196
197 stat->collectvarhistory = TRUE;
198}
199
200/** marks statistics to be able to reset them when solving process is freed */
202 SCIP_STAT* stat /**< problem statistics data */
203 )
204{
205 assert(stat != NULL);
206
207 stat->marked_nvaridx = stat->nvaridx;
208 stat->marked_ncolidx = stat->ncolidx;
209 stat->marked_nrowidx = stat->nrowidx;
210}
211
212/** reset statistics to the data before solving started */
214 SCIP_STAT* stat, /**< problem statistics data */
215 SCIP_SET* set, /**< global SCIP settings */
216 SCIP_PROB* transprob, /**< transformed problem, or NULL */
217 SCIP_PROB* origprob /**< original problem, or NULL */
218 )
219{
220 assert(stat != NULL);
221 assert(stat->marked_nvaridx >= 0);
222 assert(stat->marked_ncolidx >= 0);
223 assert(stat->marked_nrowidx >= 0);
224
249
251
253
254 stat->vsidsweight = 1.0;
255 stat->nlpiterations = 0;
256 stat->nrootlpiterations = 0;
257 stat->nrootfirstlpiterations = 0;
258 stat->nprimallpiterations = 0;
259 stat->nduallpiterations = 0;
260 stat->nlexduallpiterations = 0;
261 stat->nbarrierlpiterations = 0;
263 stat->ndualresolvelpiterations = 0;
265 stat->nnodelpiterations = 0;
266 stat->ninitlpiterations = 0;
267 stat->ndivinglpiterations = 0;
268 stat->nsbdivinglpiterations = 0;
269 stat->nsblpiterations = 0;
270 stat->nsbtimesiterlimhit = 0L;
271 stat->nrootsblpiterations = 0;
272 stat->nconflictlpiterations = 0;
273 stat->nresolveinstablelps = 0;
274 stat->nresolveinstablelpiters = 0;
275 stat->ntotalnodes = 0;
276 stat->ntotalinternalnodes = 0;
277 stat->ntotalnodesmerged = 0;
278 stat->ncreatednodes = 0;
279 stat->nlpsolsfound = 0;
280 stat->nrelaxsolsfound = 0;
281 stat->npssolsfound = 0;
282 stat->nsbsolsfound = 0;
283 stat->nlpbestsolsfound = 0;
284 stat->nrelaxbestsolsfound = 0;
285 stat->npsbestsolsfound = 0;
286 stat->nsbbestsolsfound = 0;
287 stat->nexternalsolsfound = 0;
288 stat->domchgcount = 0;
289 stat->nboundchgs = 0;
290 stat->nholechgs = 0;
291 stat->nprobboundchgs = 0;
292 stat->nprobholechgs = 0;
293 stat->nsbdowndomchgs = 0;
294 stat->nsbupdomchgs = 0;
295 stat->nruns = 0;
296 stat->nconfrestarts = 0;
297 stat->nrootboundchgs = 0;
298 stat->nrootintfixings = 0;
299 stat->prevrunnvars = 0;
300 stat->nvaridx = stat->marked_nvaridx;
301 stat->ncolidx = stat->marked_ncolidx;
302 stat->nrowidx = stat->marked_nrowidx;
303 stat->nnz = 0;
304 stat->avgnnz = 0;
305 stat->lpcount = 0;
306 stat->relaxcount = 0;
307 stat->nlps = 0;
308 stat->nrootlps = 0;
309 stat->nprimallps = 0;
310 stat->nprimalzeroitlps = 0;
311 stat->nduallps = 0;
312 stat->ndualzeroitlps = 0;
313 stat->nlexduallps = 0;
314 stat->nbarrierlps = 0;
315 stat->nbarrierzeroitlps = 0;
316 stat->nprimalresolvelps = 0;
317 stat->ndualresolvelps = 0;
318 stat->nlexdualresolvelps = 0;
319 stat->nnodelps = 0;
320 stat->nnodezeroitlps = 0;
321 stat->nisstoppedcalls = 0;
322 stat->ninitlps = 0;
323 stat->ndivinglps = 0;
324 stat->nsbdivinglps = 0;
325 stat->nnumtroublelpmsgs = 0;
326 stat->nstrongbranchs = 0;
327 stat->nrootstrongbranchs = 0;
328 stat->nconflictlps = 0;
329 stat->nexlp = 0;
330 stat->nexlpinter = 0;
331 stat->nexlpboundexc = 0;
332 stat->nexlpintfeas = 0;
333 stat->timefailexlpinf = 0;
334 stat->timefailexlp = 0;
335 stat->nfailexlp = 0;
336 stat->nboundshift = 0;
337 stat->nfailboundshift = 0;
338 stat->nboundshiftinf = 0;
339 stat->nfailboundshiftinf = 0;
340 stat->nboundshiftobjlim = 0;
341 stat->nboundshiftobjlimfail = 0;
342 stat->nprojshift = 0;
343 stat->nfailprojshift = 0;
344 stat->nprojshiftinf = 0;
345 stat->nfailprojshiftinf = 0;
346 stat->nprojshiftobjlim = 0;
347 stat->nprojshiftobjlimfail = 0;
348 stat->niterationsexlp = 0;
349 stat->niterationsexlpinf = 0;
350 stat->nexlpinf = 0;
351 stat->nfailexlpinf = 0;
352 stat->nnlps = 0;
353 stat->maxtotaldepth = -1;
354 stat->nactiveconss = 0;
355 stat->nenabledconss = 0;
356 stat->solindex = 0;
357 stat->memsavemode = FALSE;
358 stat->nnodesbeforefirst = -1;
359 stat->ninitconssadded = 0;
360 stat->nactiveconssadded = 0;
361 stat->externmemestim = 0;
362 stat->exprlastvisitedtag = 0;
363 stat->exprlastsoltag = 0;
364 stat->exprlastdifftag = 0;
365 stat->nrunsbeforefirst = -1;
366 stat->firstprimalheur = NULL;
371 stat->primalzeroittime = 0.0;
372 stat->dualzeroittime = 0.0;
373 stat->barrierzeroittime = 0.0;
376 stat->firstlptime = 0.0;
378 stat->ncopies = 0;
379 stat->nclockskipsleft = 0;
380 stat->nactiveexpriter = 0;
381 stat->marked_nvaridx = -1;
382 stat->marked_ncolidx = -1;
383 stat->marked_nrowidx = -1;
384 stat->branchedunbdvar = FALSE;
385 stat->bestefficacy = 0.0;
386 stat->minefficacyfac = 0.5;
387 stat->ncutpoolfails = 0;
388
389 stat->ndivesetlpiterations = 0;
390 stat->ndivesetcalls = 0;
391 stat->ndivesetlps = 0;
392 stat->totaldivesetdepth = 0;
393
394 stat->userinterrupt = FALSE;
395 stat->userrestart = FALSE;
396 stat->inrestart = FALSE;
397 stat->collectvarhistory = TRUE;
398 stat->performpresol = FALSE;
400
402 SCIPstatResetPresolving(stat, set, transprob, origprob);
404}
405
406/** reset implication counter */
408 SCIP_STAT* stat /**< problem statistics data */
409 )
410{
411 assert(stat != NULL);
412
413 stat->nimplications = 0;
414}
415
416/** reset presolving and current run specific statistics */
418 SCIP_STAT* stat, /**< problem statistics data */
419 SCIP_SET* set, /**< global SCIP settings */
420 SCIP_PROB* transprob, /**< transformed problem, or NULL if not yet existing */
421 SCIP_PROB* origprob /**< original problem, or NULL */
422 )
423{
424 assert(stat != NULL);
425
426 stat->npresolrounds = 0;
427 stat->npresolroundsfast = 0;
428 stat->npresolroundsmed = 0;
429 stat->npresolroundsext = 0;
430 stat->npresolfixedvars = 0;
431 stat->npresolaggrvars = 0;
432 stat->npresolchgvartypes = 0;
433 stat->npresolchgbds = 0;
434 stat->npresoladdholes = 0;
435 stat->npresoldelconss = 0;
436 stat->npresoladdconss = 0;
437 stat->npresolupgdconss = 0;
438 stat->npresolchgcoefs = 0;
439 stat->npresolchgsides = 0;
440
441 SCIPstatResetCurrentRun(stat, set, transprob, origprob, FALSE);
442}
443
444/** reset primal-dual, primal-reference, and reference-dual integral */
446 SCIP_STAT* stat, /**< problem statistics data */
447 SCIP_SET* set, /**< global SCIP settings */
448 SCIP_Bool partialreset /**< should time and integral value be kept? (in combination with no statistical
449 * reset, integrals are added for each problem to be solved) */
450 )
451{
452 assert(stat != NULL);
453
454 stat->previousgap = 100.0;
455 stat->previousdualrefgap = 100.0;
456 stat->previousprimalrefgap = 100.0;
461
462 /* partial resets keep the integral value and previous evaluation time */
463 if( !partialreset )
464 {
465 stat->previntegralevaltime = 0.0;
466 stat->dualrefintegral = 0.0;
467 stat->primalrefintegral = 0.0;
468 stat->primaldualintegral = 0.0;
469 }
470}
471
472/** returns the gap bounded by 100 */
473static
475 SCIP_SET* set, /**< global SCIP settings */
476 SCIP_Real primalbound, /**< current primal bound */
477 SCIP_Real dualbound, /**< current dual bound */
478 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
479 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
480 )
481{
482 SCIP_Real gap;
483
484 /* computation of the gap, special cases are handled first */
485 if( primalbound >= SCIP_UNKNOWN || dualbound >= SCIP_UNKNOWN ) /*lint !e777*/
486 gap = 100.0;
487 /* the gap is 0.0 if bounds coincide */
488 else if( SCIPsetIsGE(set, lowerbound, upperbound) || SCIPsetIsEQ(set, primalbound, dualbound) )
489 gap = 0.0;
490 /* the gap is 100.0 if bounds have different signs */
491 else if( primalbound * dualbound <= 0.0 ) /*lint !e777*/
492 gap = 100.0;
493 else if( !SCIPsetIsInfinity(set, REALABS(primalbound)) && !SCIPsetIsInfinity(set, REALABS(dualbound)) )
494 {
495 SCIP_Real absprim = REALABS(primalbound);
496 SCIP_Real absdual = REALABS(dualbound);
497
498 /* The gap in the definition of the primal-dual integral differs from the default SCIP gap function.
499 * Here, the MAX(primalbound, dualbound) is taken for gap quotient in order to ensure a gap <= 100.
500 */
501 gap = 100.0 * REALABS(primalbound - dualbound) / MAX(absprim, absdual);
502 assert(SCIPsetIsLE(set, gap, 100.0));
503 }
504 else
505 gap = 100.0;
506
507 return gap;
508}
509
510/** update the primal-dual, primal-reference, and reference-dual integral statistics.
511 * method accepts + and - SCIPsetInfinity() as values for upper and lower bound, respectively
512 */
514 SCIP_STAT* stat, /**< problem statistics data */
515 SCIP_SET* set, /**< global SCIP settings */
516 SCIP_PROB* transprob, /**< transformed problem */
517 SCIP_PROB* origprob, /**< original problem */
518 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
519 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
520 )
521{
522 SCIP_Real currentgap;
523 SCIP_Real currentdualrefgap;
524 SCIP_Real currentprimalrefgap;
525 SCIP_Real solvingtime;
526 SCIP_Real primalbound;
527 SCIP_Real dualbound;
528 SCIP_Real deltatime;
529
530 assert(stat != NULL);
531 assert(set != NULL);
532
533 solvingtime = MAX(SCIPclockGetTime(stat->solvingtime), stat->previntegralevaltime); /*lint !e666*/
534 assert(solvingtime >= stat->previntegralevaltime);
535
536 if( !SCIPsetIsInfinity(set, upperbound) ) /*lint !e777*/
537 {
538 /* get value in original space for gap calculation */
539 primalbound = SCIPprobExternObjval(transprob, origprob, set, upperbound);
540
541 if( SCIPsetIsZero(set, primalbound) )
542 primalbound = 0.0;
543 }
544 else
545 {
546 /* no new upper bound: use stored values from last update */
547 upperbound = stat->lastupperbound;
548 primalbound = stat->lastprimalbound;
549 assert(SCIPsetIsZero(set, primalbound) == (primalbound == 0.0)); /*lint !e777*/
550 }
551
552 if( !SCIPsetIsInfinity(set, -lowerbound) ) /*lint !e777*/
553 {
554 /* get value in original space for gap calculation */
555 dualbound = SCIPprobExternObjval(transprob, origprob, set, lowerbound);
556
557 if( SCIPsetIsZero(set, dualbound) )
558 dualbound = 0.0;
559 }
560 else
561 {
562 /* no new lower bound: use stored values from last update */
563 lowerbound = stat->lastlowerbound;
564 dualbound = stat->lastdualbound;
565 assert(SCIPsetIsZero(set, dualbound) == (dualbound == 0.0)); /*lint !e777*/
566 }
567
568 /* calculate primal-dual and dual reference gap */
569 currentgap = getGap(set, primalbound, dualbound, upperbound, lowerbound);
570
571 /* if primal and dual bound have opposite signs, the gap always evaluates to 100.0% */
572 assert(currentgap == 0.0 || currentgap == 100.0 || SCIPsetIsGE(set, primalbound * dualbound, 0.0));
573
574 /* update the integral based on previous information */
575 deltatime = solvingtime - stat->previntegralevaltime;
576 stat->primaldualintegral += deltatime * stat->previousgap;
577 stat->dualrefintegral += deltatime * stat->previousdualrefgap;
578 stat->primalrefintegral += deltatime * stat->previousprimalrefgap;
579
580 if( !SCIPsetIsInfinity(set, REALABS(set->misc_referencevalue)) )
581 {
582 currentdualrefgap = getGap(set, set->misc_referencevalue, dualbound, upperbound, lowerbound);
583 assert(currentdualrefgap == 0.0 || currentdualrefgap == 100.0 || SCIPsetIsGE(set, set->misc_referencevalue * dualbound, 0.0));
584
585 currentprimalrefgap = getGap(set, primalbound, set->misc_referencevalue, upperbound, lowerbound);
586 assert(currentprimalrefgap == 0.0 || currentprimalrefgap == 100.0 || SCIPsetIsGE(set, primalbound * set->misc_referencevalue, 0.0));
587 }
588 else
589 {
590 currentdualrefgap = 100.0;
591 currentprimalrefgap = 100.0;
592 }
593
594 /* update all relevant information for next evaluation */
595 stat->previousgap = currentgap;
596 stat->previousdualrefgap = currentdualrefgap;
597 stat->previousprimalrefgap = currentprimalrefgap;
598 stat->previntegralevaltime = solvingtime;
599 stat->lastprimalbound = primalbound;
600 stat->lastdualbound = dualbound;
601 stat->lastlowerbound = lowerbound;
602 stat->lastupperbound = upperbound;
603}
604
605/** optionally update and return the reference-dual integral statistic */
607 SCIP_STAT* stat, /**< problem statistics data */
608 SCIP_SET* set, /**< global SCIP settings */
609 SCIP_PROB* transprob, /**< transformed problem */
610 SCIP_PROB* origprob, /**< original problem */
611 SCIP_Bool update /**< should the value be updated first? */
612 )
613{
614 assert(stat != NULL);
615 assert(set != NULL);
616 assert(transprob != NULL);
617 assert(origprob != NULL);
618
619 /* update the reference-dual integral first */
620 if( update )
622
623 return stat->dualrefintegral;
624}
625
626/** optionally update and return the primal-reference integral statistic */
628 SCIP_STAT* stat, /**< problem statistics data */
629 SCIP_SET* set, /**< global SCIP settings */
630 SCIP_PROB* transprob, /**< transformed problem */
631 SCIP_PROB* origprob, /**< original problem */
632 SCIP_Bool update /**< should the value be updated first? */
633 )
634{
635 assert(stat != NULL);
636 assert(set != NULL);
637 assert(transprob != NULL);
638 assert(origprob != NULL);
639
640 /* update the primal-reference integral first */
641 if( update )
643
644 return stat->primalrefintegral;
645}
646
647/** optionally update and return the primal-dual integral statistic */
649 SCIP_STAT* stat, /**< problem statistics data */
650 SCIP_SET* set, /**< global SCIP settings */
651 SCIP_PROB* transprob, /**< transformed problem */
652 SCIP_PROB* origprob, /**< original problem */
653 SCIP_Bool update /**< should the value be updated first? */
654 )
655{
656 assert(stat != NULL);
657 assert(set != NULL);
658 assert(transprob != NULL);
659 assert(origprob != NULL);
660
661 /* update the primal dual reference integral first */
662 if( update )
664
665 return stat->primaldualintegral;
666}
667
668/** reset current branch and bound run specific statistics */
670 SCIP_STAT* stat, /**< problem statistics data */
671 SCIP_SET* set, /**< global SCIP settings */
672 SCIP_PROB* transprob, /**< transformed problem, or NULL */
673 SCIP_PROB* origprob, /**< original problem, or NULL */
674 SCIP_Bool solved /**< is problem already solved? */
675 )
676{
677 assert(stat != NULL);
678
679 stat->nnodes = 0;
680 stat->ninternalnodes = 0;
681 stat->ncreatednodesrun = 0;
682 stat->nactivatednodes = 0;
683 stat->ndeactivatednodes = 0;
684 stat->nbacktracks = 0;
685 stat->ndelayedcutoffs = 0;
686 stat->nreprops = 0;
687 stat->nrepropboundchgs = 0;
688 stat->nrepropcutoffs = 0;
689 stat->lastdivenode = 0;
690 stat->lastconflictnode = 0;
691 stat->bestsolnode = 0;
695 stat->boundingerrorbs = 0;
696 stat->boundingerrorps = 0;
697 stat->boundingerrorexlp = 0;
698 stat->lastbranchvar = NULL;
700 stat->nrootboundchgsrun = 0;
701 stat->nrootintfixingsrun = 0;
702 stat->npricerounds = 0;
703 stat->nseparounds = 0;
704 stat->maxdepth = -1;
705 stat->plungedepth = 0;
706 stat->nobjleaves = 0;
707 stat->ninfeasleaves = 0;
708 stat->nfeasleaves = 0;
709 stat->branchedunbdvar = FALSE;
710 stat->nnumtroublelpmsgs = 0;
711
712 stat->nearlybacktracks = 0;
713 stat->nnodesaboverefbound = 0;
714
715 assert(transprob == NULL || origprob != NULL);
716 /* calculate the reference bound in transformed space from the reference value */
717 if( transprob != NULL && !SCIPsetIsInfinity(set, SCIPsetGetReferencevalue(set)) )
719 else
721
722 if( !solved )
724
726
728
730}
731
732/** resets display statistics, such that a new header line is displayed before the next display line */
734 SCIP_STAT* stat /**< problem statistics data */
735 )
736{
737 assert(stat != NULL);
738
739 stat->lastdispnode = 0;
740 stat->ndisplines = 0;
741}
742
743/** increases LP count, such that all lazy updates depending on the LP are enforced again */
745 SCIP_STAT* stat /**< problem statistics data */
746 )
747{
748 assert(stat != NULL);
749
750 stat->lpcount++;
751}
752
753/** depending on the current memory usage, switches mode flag to standard or memory saving mode */
755 SCIP_STAT* stat, /**< problem statistics data */
756 SCIP_SET* set, /**< global SCIP settings */
757 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
758 SCIP_MEM* mem /**< block memory pools */
759 )
760{
761 assert(stat != NULL);
762 assert(set != NULL);
763
764 if( SCIPsetIsLT(set, set->mem_savefac, 1.0) )
765 {
766 SCIP_Longint memused;
767
768 memused = SCIPmemGetTotal(mem);
769 if( !stat->memsavemode && memused >= set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
770 {
771 /* switch to memory saving mode */
772 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
773 "(node %" SCIP_LONGINT_FORMAT ") switching to memory saving mode (mem: %.1fM/%.1fM)\n",
774 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
775 stat->memsavemode = TRUE;
776 set->nodesel = NULL;
777 }
778 else if( stat->memsavemode && memused < 0.5 * set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
779 {
780 /* switch to standard mode */
781 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
782 "(node %" SCIP_LONGINT_FORMAT ") switching to standard mode (mem: %.1fM/%.1fM)\n",
783 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
784 stat->memsavemode = FALSE;
785 set->nodesel = NULL;
786 }
787 }
788 else
789 stat->memsavemode = FALSE;
790}
791
792/** returns the estimated number of bytes used by extern software, e.g., the LP solver */
794 SCIP_STAT* stat /**< dynamic SCIP statistics */
795 )
796{
797 return stat->externmemestim;
798}
799
800/** enables or disables all statistic clocks of \p stat concerning LP execution time, strong branching time, etc.
801 *
802 * @note: The (pre-)solving time clocks which are relevant for the output during (pre-)solving
803 * are not affected by this method
804 *
805 * @see: For completely disabling all timing of SCIP, consider setting the parameter timing/enabled to FALSE
806 */
808 SCIP_STAT* stat, /**< SCIP statistics */
809 SCIP_Bool enable /**< should the LP clocks be enabled? */
810 )
811{
812 assert(stat != NULL);
813
828 SCIPclockEnableOrDisable(stat->lpsoltime, enable);
831 SCIPclockEnableOrDisable(stat->sbsoltime, enable);
834 SCIPclockEnableOrDisable(stat->copyclock, enable);
836}
837
838/** recompute root LP best-estimate from scratch */
840 SCIP_STAT* stat, /**< SCIP statistics */
841 SCIP_SET* set, /**< global SCIP settings */
842 SCIP_Real rootlpobjval, /**< root LP objective value */
843 SCIP_VAR** vars, /**< problem variables */
844 int nvars /**< number of variables */
845 )
846{
847 int v;
848 stat->rootlpbestestimate = rootlpobjval;
849
850 /* compute best-estimate contribution for every variable */
851 for( v = 0; v < nvars; ++v )
852 {
853 SCIP_Real rootlpsol;
854 SCIP_Real varminpseudoscore;
855
856 /* stop at the first continuous variable */
857 if( !SCIPvarIsIntegral(vars[v]) )
858 break;
859
860 rootlpsol = SCIPvarGetRootSol(vars[v]);
861 varminpseudoscore = SCIPvarGetMinPseudocostScore(vars[v], stat, set, rootlpsol);
862 assert(varminpseudoscore >= 0);
863 stat->rootlpbestestimate += varminpseudoscore;
864
865 SCIPstatDebugMsg(stat, "Root LP Estimate initialization: <%s> + %15.9f\n", SCIPvarGetName(vars[v]), varminpseudoscore);
866 }
867}
868
869/** update root LP best-estimate with changed variable pseudo-costs */
871 SCIP_STAT* stat, /**< SCIP statistics */
872 SCIP_SET* set, /**< global SCIP settings */
873 SCIP_VAR* var, /**< variable with changed pseudo costs */
874 SCIP_Real oldrootpscostscore /**< old minimum pseudo cost score of variable */
875 )
876{
877 SCIP_Real rootlpsol;
878 SCIP_Real varminpseudoscore;
879
881
882 /* entire root LP best-estimate must be computed from scratch first */
883 if( stat->rootlpbestestimate == SCIP_INVALID ) /*lint !e777*/
884 return SCIP_OKAY;
885
886 rootlpsol = SCIPvarGetRootSol(var);
887
888 /* LP root estimate only works for variables with fractional LP root solution */
889 if( SCIPsetIsFeasIntegral(set, rootlpsol) )
890 return SCIP_OKAY;
891
892 /* subtract old pseudo cost contribution and add new contribution afterwards */
893 stat->rootlpbestestimate -= oldrootpscostscore;
894
895 varminpseudoscore = SCIPvarGetMinPseudocostScore(var, stat, set, rootlpsol);
896 assert(varminpseudoscore >= 0.0);
897 stat->rootlpbestestimate += varminpseudoscore;
898
899 SCIPstatDebugMsg(stat, "Root LP estimate update: <%s> - %15.9f + %15.9f\n", SCIPvarGetName(var), oldrootpscostscore, varminpseudoscore);
900
901 return SCIP_OKAY;
902}
903
904/** prints a debug message */
906 SCIP_STAT* stat, /**< SCIP statistics */
907 const char* sourcefile, /**< name of the source file that called the function */
908 int sourceline, /**< line in the source file where the function was called */
909 const char* formatstr, /**< format string like in printf() function */
910 ... /**< format arguments line in printf() function */
911 )
912{
913 const char* filename;
914 va_list ap;
915
916 assert( sourcefile != NULL );
917 assert( stat != NULL );
918
919 /* strip directory from filename */
920#ifdef _WIN32
921 filename = strrchr(sourcefile, '\\');
922#else
923 filename = strrchr(sourcefile, '/');
924#endif
925 if ( filename == NULL )
926 filename = sourcefile;
927 else
928 ++filename;
929
930 if ( stat->subscipdepth > 0 )
931 printf("%d: [%s:%d] debug: ", stat->subscipdepth, filename, sourceline);
932 else
933 printf("[%s:%d] debug: ", filename, sourceline);
934
935 va_start(ap, formatstr); /*lint !e838*/
936 (void)vprintf(formatstr, ap);
937 va_end(ap);
938}
939
940/** prints a debug message without precode */
942 SCIP_STAT* stat, /**< SCIP statistics */
943 const char* formatstr, /**< format string like in printf() function */
944 ... /**< format arguments line in printf() function */
945 )
946{ /*lint --e{715}*/
947 va_list ap;
948
949 assert(stat != NULL);
950
951 va_start(ap, formatstr); /*lint !e838*/
952 printf(formatstr, ap);
953 va_end(ap);
954}
void SCIPcertificateFree(SCIP_CERTIFICATE **certificate)
SCIP_RETCODE SCIPcertificateCreate(SCIP_CERTIFICATE **certificate, SCIP_MESSAGEHDLR *messagehdlr)
methods for certificate output
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
Definition: clock.c:260
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
Definition: clock.c:438
void SCIPclockReset(SCIP_CLOCK *clck)
Definition: clock.c:209
void SCIPclockFree(SCIP_CLOCK **clck)
Definition: clock.c:185
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
Definition: clock.c:170
internal methods for clocks and timing issues
#define SCIP_DEFAULT_INFINITY
Definition: def.h:163
#define NULL
Definition: def.h:248
#define SCIP_Longint
Definition: def.h:141
#define SCIP_REAL_MAX
Definition: def.h:158
#define SCIP_INVALID
Definition: def.h:178
#define SCIP_Bool
Definition: def.h:91
#define SCIP_ALLOC(x)
Definition: def.h:366
#define SCIP_Real
Definition: def.h:156
#define SCIP_UNKNOWN
Definition: def.h:179
#define TRUE
Definition: def.h:93
#define FALSE
Definition: def.h:94
#define MAX(x, y)
Definition: def.h:220
#define SCIP_LONGINT_FORMAT
Definition: def.h:148
#define SCIP_REAL_MIN
Definition: def.h:159
#define REALABS(x)
Definition: def.h:182
#define SCIP_CALL(x)
Definition: def.h:355
SCIP_RETCODE SCIPrationalCreate(SCIP_RATIONAL **rational)
Definition: rational.cpp:94
void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
Definition: rational.cpp:630
void SCIPrationalFree(SCIP_RATIONAL **rational)
Definition: rational.cpp:450
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
Definition: var.c:23386
const char * SCIPvarGetName(SCIP_VAR *var)
Definition: var.c:23267
SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
Definition: var.c:19115
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
Definition: var.c:23490
void SCIPregressionFree(SCIP_REGRESSION **regression)
Definition: misc.c:436
SCIP_RETCODE SCIPregressionCreate(SCIP_REGRESSION **regression)
Definition: misc.c:420
void SCIPregressionReset(SCIP_REGRESSION *regression)
Definition: misc.c:404
void SCIPhistoryReset(SCIP_HISTORY *history)
Definition: history.c:78
SCIP_RETCODE SCIPhistoryCreate(SCIP_HISTORY **history, BMS_BLKMEM *blkmem)
Definition: history.c:51
void SCIPhistoryFree(SCIP_HISTORY **history, BMS_BLKMEM *blkmem)
Definition: history.c:66
internal methods for branching and inference history
SCIP_Longint SCIPmemGetTotal(SCIP_MEM *mem)
Definition: mem.c:108
methods for block memory pools and memory buffers
#define BMSfreeMemory(ptr)
Definition: memory.h:145
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
#define BMSallocMemory(ptr)
Definition: memory.h:118
void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...)
Definition: message.c:678
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
Definition: prob.c:2520
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
Definition: prob.c:2573
internal methods for storing and manipulating the main problem
public methods for message output
public data structures and miscellaneous methods
public methods for problem variables
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
Definition: set.c:6617
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
Definition: set.c:6577
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
Definition: set.c:6537
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
Definition: set.c:6380
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
Definition: set.c:6557
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
Definition: set.c:6515
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
Definition: set.c:6637
SCIP_Real SCIPsetGetReferencevalue(SCIP_SET *set)
Definition: set.c:6261
SCIP_Bool SCIPsetIsFeasIntegral(SCIP_SET *set, SCIP_Real val)
Definition: set.c:7098
internal methods for global SCIP settings
void SCIPstatUpdatePrimalDualIntegrals(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real upperbound, SCIP_Real lowerbound)
Definition: stat.c:513
void SCIPstatComputeRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_Real rootlpobjval, SCIP_VAR **vars, int nvars)
Definition: stat.c:839
void SCIPstatMark(SCIP_STAT *stat)
Definition: stat.c:201
SCIP_Real SCIPstatGetPrimalReferenceIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
Definition: stat.c:627
SCIP_RETCODE SCIPstatUpdateVarRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldrootpscostscore)
Definition: stat.c:870
void SCIPstatResetImplications(SCIP_STAT *stat)
Definition: stat.c:407
void SCIPstatResetDisplay(SCIP_STAT *stat)
Definition: stat.c:733
void SCIPstatPrintDebugMessage(SCIP_STAT *stat, const char *sourcefile, int sourceline, const char *formatstr,...)
Definition: stat.c:905
static SCIP_Real getGap(SCIP_SET *set, SCIP_Real primalbound, SCIP_Real dualbound, SCIP_Real upperbound, SCIP_Real lowerbound)
Definition: stat.c:474
SCIP_Real SCIPstatGetDualReferenceIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
Definition: stat.c:606
SCIP_RETCODE SCIPstatFree(SCIP_STAT **stat, BMS_BLKMEM *blkmem)
Definition: stat.c:129
void SCIPstatResetPrimalDualIntegrals(SCIP_STAT *stat, SCIP_SET *set, SCIP_Bool partialreset)
Definition: stat.c:445
void SCIPstatResetPresolving(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
Definition: stat.c:417
void SCIPstatReset(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
Definition: stat.c:213
void SCIPstatEnableOrDisableStatClocks(SCIP_STAT *stat, SCIP_Bool enable)
Definition: stat.c:807
void SCIPstatEnableVarHistory(SCIP_STAT *stat)
Definition: stat.c:191
void SCIPstatEnforceLPUpdates(SCIP_STAT *stat)
Definition: stat.c:744
void SCIPstatUpdateMemsaveMode(SCIP_STAT *stat, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_MEM *mem)
Definition: stat.c:754
void SCIPstatDisableVarHistory(SCIP_STAT *stat)
Definition: stat.c:181
void SCIPstatResetCurrentRun(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool solved)
Definition: stat.c:669
SCIP_RETCODE SCIPstatCreate(SCIP_STAT **stat, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_MESSAGEHDLR *messagehdlr)
Definition: stat.c:56
SCIP_Longint SCIPstatGetMemExternEstim(SCIP_STAT *stat)
Definition: stat.c:793
SCIP_Real SCIPstatGetPrimalDualIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
Definition: stat.c:648
void SCIPstatDebugMessagePrint(SCIP_STAT *stat, const char *formatstr,...)
Definition: stat.c:941
internal methods for problem statistics
#define SCIPstatDebugMsg
Definition: stat.h:322
SCIP_Real timefailexlpinf
Definition: struct_stat.h:166
SCIP_Longint nnlps
Definition: struct_stat.h:250
SCIP_Longint nlexdualresolvelpiterations
Definition: struct_stat.h:73
SCIP_Longint nexlpinter
Definition: struct_stat.h:232
SCIP_Longint ntotalnodesmerged
Definition: struct_stat.h:91
SCIP_STATUS status
Definition: struct_stat.h:201
SCIP_Longint nearlybacktracks
Definition: struct_stat.h:96
SCIP_Longint ndualresolvelpiterations
Definition: struct_stat.h:72
SCIP_Longint nfailboundshiftinf
Definition: struct_stat.h:239
SCIP_Real rootlowerbound
Definition: struct_stat.h:133
SCIP_Longint nboundshiftinf
Definition: struct_stat.h:238
SCIP_Longint nrootstrongbranchs
Definition: struct_stat.h:227
SCIP_Longint nprimalresolvelpiterations
Definition: struct_stat.h:71
SCIP_Bool inrestart
Definition: struct_stat.h:316
SCIP_Longint nactiveconssadded
Definition: struct_stat.h:126
int npresoladdholes
Definition: struct_stat.h:286
SCIP_Bool performpresol
Definition: struct_stat.h:318
SCIP_Longint nprojshiftinf
Definition: struct_stat.h:244
SCIP_Longint nprimallps
Definition: struct_stat.h:209
SCIP_Real dualrefintegral
Definition: struct_stat.h:146
SCIP_Real minefficacyfac
Definition: struct_stat.h:161
SCIP_Longint nrelaxsolsfound
Definition: struct_stat.h:104
SCIP_CLOCK * strongpropclock
Definition: struct_stat.h:193
SCIP_Longint nsbdowndomchgs
Definition: struct_stat.h:121
SCIP_Real previousgap
Definition: struct_stat.h:149
SCIP_Longint nprimalzeroitlps
Definition: struct_stat.h:210
SCIP_Real boundingerrorps
Definition: struct_stat.h:164
SCIP_Longint nreprops
Definition: struct_stat.h:100
SCIP_CLOCK * sbsoltime
Definition: struct_stat.h:189
SCIP_Real lastsolgap
Definition: struct_stat.h:138
SCIP_Longint nnodes
Definition: struct_stat.h:84
SCIP_Longint exprlastsoltag
Definition: struct_stat.h:129
SCIP_Longint nboundshift
Definition: struct_stat.h:236
SCIP_REGRESSION * regressioncandsobjval
Definition: struct_stat.h:63
int npresolupgdconss
Definition: struct_stat.h:289
SCIP_Longint nsblpiterations
Definition: struct_stat.h:79
SCIP_Longint ntotalnodes
Definition: struct_stat.h:89
SCIP_CLOCK * strongbranchtime
Definition: struct_stat.h:178
SCIP_Real previousdualrefgap
Definition: struct_stat.h:150
int ndivesetcalls
Definition: struct_stat.h:254
SCIP_Longint exprlastvisitedtag
Definition: struct_stat.h:128
SCIP_Bool disableenforelaxmsg
Definition: struct_stat.h:320
SCIP_CLOCK * barrierlptime
Definition: struct_stat.h:175
SCIP_Real dualzeroittime
Definition: struct_stat.h:140
SCIP_Longint nduallps
Definition: struct_stat.h:211
SCIP_Longint ninfeasleaves
Definition: struct_stat.h:88
SCIP_VAR * lastbranchvar
Definition: struct_stat.h:197
SCIP_Real avgnnz
Definition: struct_stat.h:131
SCIP_Longint nrepropcutoffs
Definition: struct_stat.h:102
SCIP_CLOCK * copyclock
Definition: struct_stat.h:192
SCIP_Longint nduallpiterations
Definition: struct_stat.h:68
SCIP_CLOCK * provedfeaslptime
Definition: struct_stat.h:180
int nclockskipsleft
Definition: struct_stat.h:311
SCIP_Longint ncreatednodesrun
Definition: struct_stat.h:93
SCIP_Longint ndelayedcutoffs
Definition: struct_stat.h:99
SCIP_CLOCK * nodeactivationtime
Definition: struct_stat.h:190
SCIP_Longint nlps
Definition: struct_stat.h:207
SCIP_Longint externmemestim
Definition: struct_stat.h:127
SCIP_Real lastlowerbound
Definition: struct_stat.h:155
SCIP_Longint ndualresolvelps
Definition: struct_stat.h:217
SCIP_Real rootlpbestestimate
Definition: struct_stat.h:158
SCIP_Longint nbarrierlpiterations
Definition: struct_stat.h:70
SCIP_Longint nfailprojshiftinf
Definition: struct_stat.h:245
SCIP_Longint nboundshiftobjlimfail
Definition: struct_stat.h:241
SCIP_Longint domchgcount
Definition: struct_stat.h:116
SCIP_Longint nnodelps
Definition: struct_stat.h:219
SCIP_Longint nconflictlps
Definition: struct_stat.h:228
SCIP_LPSOLSTAT lastsblpsolstats[2]
Definition: struct_stat.h:203
SCIP_Longint nnz
Definition: struct_stat.h:204
SCIP_CLOCK * divinglptime
Definition: struct_stat.h:177
SCIP_Longint nrootsblpiterations
Definition: struct_stat.h:80
SCIP_Longint ndivesetlpiterations
Definition: struct_stat.h:77
SCIP_Longint lpcount
Definition: struct_stat.h:205
SCIP_Longint nprobholechgs
Definition: struct_stat.h:120
SCIP_CLOCK * presolvingtime
Definition: struct_stat.h:170
int prevrunnvars
Definition: struct_stat.h:262
SCIP_Longint nrootfirstlpiterations
Definition: struct_stat.h:66
SCIP_Longint nbacktracks
Definition: struct_stat.h:98
SCIP_Real maxcopytime
Definition: struct_stat.h:142
SCIP_Longint ninitconssadded
Definition: struct_stat.h:125
int nseparounds
Definition: struct_stat.h:270
SCIP_Longint ndivesetlps
Definition: struct_stat.h:223
SCIP_CLOCK * provedinfeaspstime
Definition: struct_stat.h:185
SCIP_Real previousprimalrefgap
Definition: struct_stat.h:151
SCIP_Longint nlpiterations
Definition: struct_stat.h:64
SCIP_Longint nprimalresolvelps
Definition: struct_stat.h:216
SCIP_Longint exprlastdifftag
Definition: struct_stat.h:130
SCIP_Longint ndivinglpiterations
Definition: struct_stat.h:76
SCIP_CLOCK * nlpsoltime
Definition: struct_stat.h:191
int nconfrestarts
Definition: struct_stat.h:257
SCIP_Longint nfeasleaves
Definition: struct_stat.h:87
SCIP_Longint nsbsolsfound
Definition: struct_stat.h:106
int npricerounds
Definition: struct_stat.h:269
int npresolroundsext
Definition: struct_stat.h:281
SCIP_Longint lastdivenode
Definition: struct_stat.h:113
SCIP_Longint nlexdualresolvelps
Definition: struct_stat.h:218
int npresolaggrvars
Definition: struct_stat.h:283
SCIP_HISTORY * glbhistory
Definition: struct_stat.h:195
SCIP_Longint ndeactivatednodes
Definition: struct_stat.h:95
int nrootboundchgs
Definition: struct_stat.h:258
int solindex
Definition: struct_stat.h:306
SCIP_Longint nprojshiftobjlimfail
Definition: struct_stat.h:247
SCIP_Longint nrepropboundchgs
Definition: struct_stat.h:101
SCIP_Longint nnodesaboverefbound
Definition: struct_stat.h:97
SCIP_Real firstlpdualbound
Definition: struct_stat.h:132
SCIP_Longint nlexduallpiterations
Definition: struct_stat.h:69
SCIP_Longint nrootlpiterations
Definition: struct_stat.h:65
SCIP_Longint nnumtroublelpmsgs
Definition: struct_stat.h:225
SCIP_CLOCK * resolveinstablelptime
Definition: struct_stat.h:176
SCIP_Longint relaxcount
Definition: struct_stat.h:206
SCIP_Real firstprimaltime
Definition: struct_stat.h:136
int nrootintfixingsrun
Definition: struct_stat.h:261
SCIP_Longint nprojshiftobjlim
Definition: struct_stat.h:246
SCIP_Longint nlexduallps
Definition: struct_stat.h:213
SCIP_Longint ninternalnodes
Definition: struct_stat.h:85
SCIP_CLOCK * provedinfeasbstime
Definition: struct_stat.h:183
int ncutpoolfails
Definition: struct_stat.h:256
int nrootintfixings
Definition: struct_stat.h:260
SCIP_Longint nexlpintfeas
Definition: struct_stat.h:233
SCIP_Real firstsolgap
Definition: struct_stat.h:137
SCIP_Longint nexlp
Definition: struct_stat.h:231
SCIP_Real lastdualbound
Definition: struct_stat.h:154
SCIP_Longint lastdispnode
Definition: struct_stat.h:112
SCIP_Real vsidsweight
Definition: struct_stat.h:134
int marked_ncolidx
Definition: struct_stat.h:267
int npresolchgvartypes
Definition: struct_stat.h:284
SCIP_CLOCK * relaxsoltime
Definition: struct_stat.h:187
SCIP_Longint lastconflictnode
Definition: struct_stat.h:114
int nrunsbeforefirst
Definition: struct_stat.h:307
SCIP_Real primalrefintegral
Definition: struct_stat.h:147
int nactiveexpriter
Definition: struct_stat.h:312
SCIP_Real boundingerrorbs
Definition: struct_stat.h:163
SCIP_Longint ntotalinternalnodes
Definition: struct_stat.h:90
SCIP_Longint nobjleaves
Definition: struct_stat.h:86
SCIP_HEUR * firstprimalheur
Definition: struct_stat.h:200
SCIP_Real referencebound
Definition: struct_stat.h:159
SCIP_CLOCK * duallptime
Definition: struct_stat.h:173
SCIP_BRANCHDIR lastbranchdir
Definition: struct_stat.h:202
SCIP_CLOCK * pseudosoltime
Definition: struct_stat.h:188
SCIP_Longint nexlpinf
Definition: struct_stat.h:229
SCIP_Longint nprojshift
Definition: struct_stat.h:242
SCIP_Longint nboundshiftobjlim
Definition: struct_stat.h:240
int npresoldelconss
Definition: struct_stat.h:287
SCIP_Longint nnodesbeforefirst
Definition: struct_stat.h:124
int marked_nrowidx
Definition: struct_stat.h:268
SCIP_Bool userrestart
Definition: struct_stat.h:315
int marked_nvaridx
Definition: struct_stat.h:266
SCIP_Longint nlpbestsolsfound
Definition: struct_stat.h:107
SCIP_Longint nboundchgs
Definition: struct_stat.h:117
SCIP_CLOCK * provedfeaspstime
Definition: struct_stat.h:184
int npresolchgbds
Definition: struct_stat.h:285
int npresolroundsfast
Definition: struct_stat.h:279
SCIP_Real firstlptime
Definition: struct_stat.h:144
int nrootboundchgsrun
Definition: struct_stat.h:259
SCIP_Longint nfailexlp
Definition: struct_stat.h:235
SCIP_Longint ndivinglps
Definition: struct_stat.h:222
SCIP_Longint nholechgs
Definition: struct_stat.h:118
SCIP_Longint nrelaxbestsolsfound
Definition: struct_stat.h:108
int nenabledconss
Definition: struct_stat.h:276
SCIP_Real bestefficacy
Definition: struct_stat.h:160
SCIP_Longint npsbestsolsfound
Definition: struct_stat.h:109
SCIP_Real lastupperbound
Definition: struct_stat.h:157
SCIP_Real barrierzeroittime
Definition: struct_stat.h:141
SCIP_Longint niterationsexlpinf
Definition: struct_stat.h:249
int npresolchgcoefs
Definition: struct_stat.h:290
SCIP_Longint totaldivesetdepth
Definition: struct_stat.h:252
SCIP_Longint ninitlps
Definition: struct_stat.h:221
SCIP_Bool memsavemode
Definition: struct_stat.h:313
int maxdepth
Definition: struct_stat.h:272
SCIP_Longint nresolveinstablelps
Definition: struct_stat.h:82
SCIP_Real previntegralevaltime
Definition: struct_stat.h:152
SCIP_Bool collectvarhistory
Definition: struct_stat.h:317
SCIP_Longint nexternalsolsfound
Definition: struct_stat.h:111
SCIP_Longint nisstoppedcalls
Definition: struct_stat.h:251
int maxtotaldepth
Definition: struct_stat.h:273
SCIP_Longint niterationsexlp
Definition: struct_stat.h:248
SCIP_Longint ndualzeroitlps
Definition: struct_stat.h:212
SCIP_Longint nfailboundshift
Definition: struct_stat.h:237
SCIP_Longint nrootlps
Definition: struct_stat.h:208
SCIP_Real boundingerrorexlp
Definition: struct_stat.h:165
int ndisplines
Definition: struct_stat.h:271
SCIP_Longint nsbdivinglps
Definition: struct_stat.h:224
SCIP_Longint nexlpboundexc
Definition: struct_stat.h:234
SCIP_Longint nnodelpiterations
Definition: struct_stat.h:74
SCIP_Real lastprimalbound
Definition: struct_stat.h:153
SCIP_Longint nactivatednodes
Definition: struct_stat.h:94
SCIP_HISTORY * glbhistorycrun
Definition: struct_stat.h:196
int plungedepth
Definition: struct_stat.h:274
SCIP_Longint bestsolnode
Definition: struct_stat.h:115
SCIP_Longint nsbbestsolsfound
Definition: struct_stat.h:110
SCIP_Longint nsbtimesiterlimhit
Definition: struct_stat.h:123
SCIP_Real primalzeroittime
Definition: struct_stat.h:139
SCIP_CLOCK * primallptime
Definition: struct_stat.h:172
int npresoladdconss
Definition: struct_stat.h:288
SCIP_CLOCK * provedinfeaslptime
Definition: struct_stat.h:181
SCIP_Longint nfailexlpinf
Definition: struct_stat.h:230
SCIP_Longint nnodezeroitlps
Definition: struct_stat.h:220
int nimplications
Definition: struct_stat.h:277
SCIP_Longint nconflictlpiterations
Definition: struct_stat.h:81
int npresolroundsmed
Definition: struct_stat.h:280
SCIP_Real timefailexlp
Definition: struct_stat.h:167
SCIP_Longint nstrongbranchs
Definition: struct_stat.h:226
SCIP_Longint nfailprojshift
Definition: struct_stat.h:243
SCIP_Real mincopytime
Definition: struct_stat.h:143
SCIP_Longint npssolsfound
Definition: struct_stat.h:105
SCIP_Longint nbarrierzeroitlps
Definition: struct_stat.h:215
SCIP_CLOCK * provedfeasbstime
Definition: struct_stat.h:182
SCIP_CLOCK * lpsoltime
Definition: struct_stat.h:186
SCIP_Longint nprimallpiterations
Definition: struct_stat.h:67
SCIP_Bool branchedunbdvar
Definition: struct_stat.h:319
SCIP_CLOCK * solvingtime
Definition: struct_stat.h:168
SCIP_Real primaldualintegral
Definition: struct_stat.h:148
SCIP_Longint nbarrierlps
Definition: struct_stat.h:214
int nactiveconss
Definition: struct_stat.h:275
SCIP_Longint nlpsolsfound
Definition: struct_stat.h:103
SCIP_Longint nsbupdomchgs
Definition: struct_stat.h:122
SCIP_Longint nresolveinstablelpiters
Definition: struct_stat.h:83
SCIP_Real lastbranchvalue
Definition: struct_stat.h:145
int npresolrounds
Definition: struct_stat.h:278
SCIP_Longint ninitlpiterations
Definition: struct_stat.h:75
SCIP_Bool userinterrupt
Definition: struct_stat.h:314
SCIP_Longint nprobboundchgs
Definition: struct_stat.h:119
int npresolchgsides
Definition: struct_stat.h:291
SCIP_Longint ncreatednodes
Definition: struct_stat.h:92
SCIP_CLOCK * conflictlptime
Definition: struct_stat.h:179
int subscipdepth
Definition: struct_stat.h:253
SCIP_Longint nsbdivinglpiterations
Definition: struct_stat.h:78
SCIP_Real firstprimalbound
Definition: struct_stat.h:135
SCIP_CLOCK * lexduallptime
Definition: struct_stat.h:174
int npresolfixedvars
Definition: struct_stat.h:282
datastructures for global SCIP settings
datastructures for problem statistics
Definition: heur_padm.c:135
@ SCIP_CLOCKTYPE_DEFAULT
Definition: type_clock.h:43
@ SCIP_BRANCHDIR_DOWNWARDS
Definition: type_history.h:43
@ SCIP_LPSOLSTAT_NOTSOLVED
Definition: type_lp.h:43
@ SCIP_VERBLEVEL_HIGH
Definition: type_message.h:61
@ SCIP_OKAY
Definition: type_retcode.h:42
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
@ SCIP_STATUS_UNKNOWN
Definition: type_stat.h:42
@ SCIP_VARSTATUS_COLUMN
Definition: type_var.h:53
@ SCIP_VARSTATUS_LOOSE
Definition: type_var.h:52
SCIP_Real SCIPvarGetMinPseudocostScore(SCIP_VAR *var, SCIP_STAT *stat, SCIP_SET *set, SCIP_Real solval)
Definition: var.c:20713
internal methods for problem variables
void SCIPvisualFree(SCIP_VISUAL **visual)
Definition: visual.c:106
SCIP_RETCODE SCIPvisualCreate(SCIP_VISUAL **visual, SCIP_MESSAGEHDLR *messagehdlr)
Definition: visual.c:85
methods for creating output for visualization tools (VBC, BAK)