/** closes the visualization output file */ void SCIPvisualExit( SCIP_VISUAL* visual, /**< visualization information */ SCIP_SET* set, /**< global SCIP settings */ SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ ) { assert( visual != NULL ); assert( set != NULL ); if ( visual->vbcfile != NULL ) { SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_FULL, "closing VBC information file\n"); fclose(visual->vbcfile); visual->vbcfile = NULL; } if ( visual->bakfile != NULL ) { SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_FULL, "closing BAK information file\n"); fclose(visual->bakfile); visual->bakfile = NULL; } if ( visual->nodenum ) SCIPhashmapFree(&visual->nodenum); }
/** depending on the current memory usage, switches mode flag to standard or memory saving mode */ void SCIPstatUpdateMemsaveMode( SCIP_STAT* stat, /**< problem statistics data */ SCIP_SET* set, /**< global SCIP settings */ SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ SCIP_MEM* mem /**< block memory pools */ ) { assert(stat != NULL); assert(set != NULL); if( SCIPsetIsLT(set, set->mem_savefac, 1.0) ) { SCIP_Longint memused; memused = SCIPmemGetUsed(mem); if( !stat->memsavemode && memused >= set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 ) { /* switch to memory saving mode */ SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH, "(node %"SCIP_LONGINT_FORMAT") switching to memory saving mode (mem: %.1fM/%.1fM)\n", stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory); stat->memsavemode = TRUE; set->nodesel = NULL; } else if( stat->memsavemode && memused < 0.5 * set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 ) { /* switch to standard mode */ SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH, "(node %"SCIP_LONGINT_FORMAT") switching to standard mode (mem: %.1fM/%.1fM)\n", stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory); stat->memsavemode = FALSE; set->nodesel = NULL; } } else stat->memsavemode = FALSE; }
/** closes the VBC output file */ void SCIPvbcExit( SCIP_VBC* vbc, /**< VBC information */ SCIP_SET* set, /**< global SCIP settings */ SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ ) { assert(vbc != NULL); assert(set != NULL); if( vbc->file != NULL ) { SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_FULL, "closing VBC information file\n"); fclose(vbc->file); vbc->file = NULL; SCIPhashmapFree(&vbc->nodenum); } }
/** initializes VBC information and creates a file for VBC output */ SCIP_RETCODE SCIPvbcInit( SCIP_VBC* vbc, /**< VBC information */ BMS_BLKMEM* blkmem, /**< block memory */ SCIP_SET* set, /**< global SCIP settings */ SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ ) { assert(vbc != NULL); assert(set != NULL); assert(set->vbc_filename != NULL); if( set->vbc_filename[0] == '-' && set->vbc_filename[1] == '\0' ) return SCIP_OKAY; SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_NORMAL, "storing VBC information in file <%s>\n", set->vbc_filename); vbc->file = fopen(set->vbc_filename, "w"); vbc->timestep = 0; vbc->lastnode = NULL; vbc->lastcolor = SCIP_VBCCOLOR_NONE; vbc->userealtime = set->vbc_realtime; if( vbc->file == NULL ) { SCIPerrorMessage("error creating file <%s>\n", set->vbc_filename); SCIPprintSysError(set->vbc_filename); return SCIP_FILECREATEERROR; } SCIPmessageFPrintInfo(vbc->messagehdlr, vbc->file, "#TYPE: COMPLETE TREE\n"); SCIPmessageFPrintInfo(vbc->messagehdlr, vbc->file, "#TIME: SET\n"); SCIPmessageFPrintInfo(vbc->messagehdlr, vbc->file, "#BOUNDS: SET\n"); SCIPmessageFPrintInfo(vbc->messagehdlr, vbc->file, "#INFORMATION: STANDARD\n"); SCIPmessageFPrintInfo(vbc->messagehdlr, vbc->file, "#NODE_NUMBER: NONE\n"); SCIP_CALL( SCIPhashmapCreate(&vbc->nodenum, blkmem, SCIP_HASHSIZE_VBC) ); return SCIP_OKAY; }
/** initializes visualization information and creates a file for visualization output */ SCIP_RETCODE SCIPvisualInit( SCIP_VISUAL* visual, /**< visualization information */ BMS_BLKMEM* blkmem, /**< block memory */ SCIP_SET* set, /**< global SCIP settings */ SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ ) { assert( visual != NULL ); assert( set != NULL ); assert( set->visual_vbcfilename != NULL ); assert( set->visual_bakfilename != NULL ); assert( visual->nodenum == NULL ); /* check whether we should initialize VBC output */ if ( set->visual_vbcfilename[0] != '-' || set->visual_vbcfilename[1] != '\0' ) { SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_NORMAL, "storing VBC information in file <%s>\n", set->visual_vbcfilename); visual->vbcfile = fopen(set->visual_vbcfilename, "w"); visual->timestep = 0; visual->lastnode = NULL; visual->lastcolor = SCIP_VBCCOLOR_NONE; visual->userealtime = set->visual_realtime; if( visual->vbcfile == NULL ) { SCIPerrorMessage("error creating file <%s>\n", set->visual_vbcfilename); SCIPprintSysError(set->visual_vbcfilename); return SCIP_FILECREATEERROR; } SCIPmessageFPrintInfo(visual->messagehdlr, visual->vbcfile, "#TYPE: COMPLETE TREE\n"); SCIPmessageFPrintInfo(visual->messagehdlr, visual->vbcfile, "#TIME: SET\n"); SCIPmessageFPrintInfo(visual->messagehdlr, visual->vbcfile, "#BOUNDS: SET\n"); SCIPmessageFPrintInfo(visual->messagehdlr, visual->vbcfile, "#INFORMATION: STANDARD\n"); SCIPmessageFPrintInfo(visual->messagehdlr, visual->vbcfile, "#NODE_NUMBER: NONE\n"); } /* check whether we should initialize BAK output */ if ( set->visual_bakfilename[0] != '-' || set->visual_bakfilename[1] != '\0' ) { SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_NORMAL, "storing BAK information in file <%s>\n", set->visual_bakfilename); visual->bakfile = fopen(set->visual_bakfilename, "w"); visual->timestep = 0; visual->lastnode = NULL; visual->lastcolor = SCIP_VBCCOLOR_NONE; visual->userealtime = set->visual_realtime; if ( visual->bakfile == NULL ) { SCIPerrorMessage("error creating file <%s>\n", set->visual_bakfilename); SCIPprintSysError(set->visual_bakfilename); return SCIP_FILECREATEERROR; } } /* possibly init hashmap for nodes */ if ( visual->vbcfile != NULL || visual->bakfile != NULL ) { SCIP_CALL( SCIPhashmapCreate(&visual->nodenum, blkmem, SCIP_HASHSIZE_VBC) ); } return SCIP_OKAY; }