debug.c
Go to the documentation of this file.
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 42 #define SCIP_HASHSIZE_DEBUG 131101 /**< minimum size of hash map for storing whether a solution is valid for the node */ 52 SCIP_HASHMAP* solinnode; /**< maps nodes to bools, storing whether the solution is valid for the node */ 55 SCIP_Bool solisachieved; /**< means if current best solution is better than the given debug solution */ 107 int* valssize /**< pointer to store the length of the variable names and solution values arrays */ 164 if( strncasecmp(buf, "solution status:", 16) == 0 || strncasecmp(buf, "objective value:", 16) == 0 || 167 strncasecmp(buf, "NAME", 4) == 0 || strncasecmp(buf, "ENDATA", 6) == 0 ) /* allow parsing of SOL-format on the MIPLIB 2003 pages */ 176 printf("invalid input line %d in solution file <%s>: <%s>\n", *nvals + nonvalues, SCIP_DEBUG_SOLUTION, name); 187 SCIPverbMessage(set->scip, SCIP_VERBLEVEL_NORMAL, NULL, "unknown variable <%s> in line %d of solution file <%s>\n", 189 SCIPverbMessage(set->scip, SCIP_VERBLEVEL_NORMAL, NULL, " (further unknown variables are ignored)\n"); 207 SCIPerrorMessage("Invalid solution value <%s> for variable <%s> in line %d of solution file <%s>.\n", 308 SCIP_CALL( readSolfile(set, SCIP_DEBUG_SOLUTION, &debugsoldata->debugsol, &debugsoldata->debugsolval, 309 &debugsoldata->debugsolstage, &(debugsoldata->solnames), &(debugsoldata->solvals), &(debugsoldata->nsolvals), 349 SCIPdebugMessage("Now handling variable <%s>, which has status %d, is of type %d, and was deleted: %d, negated: %d, transformed: %d\n", 350 SCIPvarGetName(var), SCIPvarGetStatus(var), SCIPvarGetType(var), SCIPvarIsDeleted(var), SCIPvarIsNegated(var),SCIPvarIsTransformedOrigvar(var)); 354 SCIPdebugMessage("**** unknown solution value for deleted variable <%s>\n", SCIPvarGetName(var)); 373 /* if no original counterpart, then maybe someone added a value for the transformed variable, so search for var (or its negation) */ 408 SCIPmessagePrintWarning(SCIPgetMessagehdlr(set->scip), "invalid solution value %.15g for variable <%s>[%.15g,%.15g]\n", 456 /** returns whether the debug solution is worse than the best known solution or if the debug solution was found */ 491 /* make sure a debug solution has been read, so we do not compare against the initial debugsolval == 0 */ 494 if( (SCIPgetObjsense(scip) == SCIP_OBJSENSE_MINIMIZE && SCIPsetIsLE(set, solvalue, debugsoldata->debugsolval)) 495 || (SCIPgetObjsense(scip) == SCIP_OBJSENSE_MAXIMIZE && SCIPsetIsGE(set, solvalue, debugsoldata->debugsolval)) ) 508 SCIP_Bool* solcontained /**< pointer to store whether the solution is contained in node's subproblem */ 532 SCIP_CALL( SCIPhashmapCreate(&debugsoldata->solinnode, blkmem, SCIPcalcHashtableSize(SCIP_HASHSIZE_DEBUG)) ); 549 /* if the solution is not contained in the parent of the node, it cannot be contained in the current node */ 558 /* check whether the bound changes at the current node remove the debugging solution from the subproblem */ 582 if( !(*solcontained) && SCIPboundchgGetBoundchgtype(&boundchgs[i]) != SCIP_BOUNDCHGTYPE_BRANCHING ) 584 SCIPerrorMessage("debugging solution was cut off in local node %p at depth %d by inference <%s>[%.15g] %s %.15g\n", 586 SCIPboundchgGetBoundtype(&boundchgs[i]) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", boundchgs[i].newbound); 592 /* we branched on a variable were we don't know the solution: no debugging can be applied in this subtree */ 600 SCIP_CALL( SCIPhashmapSetImage(debugsoldata->solinnode, (void*)node, *solcontained ? (void*)(&debugsoldata->trueptr) : (void*)(&debugsoldata->falseptr)) ); 615 if( debugsoldata->debugsol != NULL && ((SCIPgetStage(set->scip) > SCIP_STAGE_PROBLEM && debugsoldata->debugsolstage > SCIP_STAGE_PROBLEM) 616 || (SCIPgetStage(set->scip) <= SCIP_STAGE_PROBLEM && debugsoldata->debugsolstage <= SCIP_STAGE_PROBLEM)) ) 702 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug 720 /* if the cons is only locally valid, check whether the debugging solution is contained in the local subproblem */ 725 SCIP_CALL( isSolutionInNode(SCIPblkmem(scip), scip->set, SCIPgetCurrentNode(scip), &solcontained) ); 732 SCIPdebugMessage(" -> checking of constraint %s returned result <%d>\n", SCIPconsGetName(conss[c]), result); 768 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 772 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 776 /* if the row is only locally valid, check whether the debugging solution is contained in the local subproblem */ 781 SCIP_CALL( isSolutionInNode(SCIPblkmem(set->scip), set, SCIPgetCurrentNode(set->scip), &solcontained) ); 825 printf("***** debug: row <%s> violates debugging solution (lhs=%.15g, rhs=%.15g, activity=[%.15g,%.15g], local=%d)\n", 863 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 869 SCIPdebugMessage("debugging solution on lower bound of <%s>[%g] >= %g\n", SCIPvarGetName(var), varsol, lb); 874 SCIPerrorMessage("invalid global lower bound: <%s>[%.15g] >= %.15g\n", SCIPvarGetName(var), varsol, lb); 896 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 900 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 906 SCIPdebugMessage("debugging solution on upper bound of <%s>[%g] <= %g\n", SCIPvarGetName(var), varsol, ub); 911 SCIPerrorMessage("invalid global upper bound: <%s>[%.15g] <= %.15g\n", SCIPvarGetName(var), varsol, ub); 944 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 948 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 965 SCIPerrorMessage("invalid local lower bound implication: <%s>[%.15g] >= %.15g\n", SCIPvarGetName(var), varsol, newbound); 970 SCIPerrorMessage("invalid local upper bound implication: <%s>[%.15g] <= %.15g\n", SCIPvarGetName(var), varsol, newbound); 994 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 998 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1003 if( SCIPgetStage(set->scip) != SCIP_STAGE_EXITSOLVE && SCIPgetStage(set->scip) != SCIP_STAGE_EXITPRESOLVE && SCIPnodeGetType(node) != SCIP_NODETYPE_PROBINGNODE ) 1013 SCIPerrorMessage("debugging solution was cut off in local node #%" SCIP_LONGINT_FORMAT " (%p) at depth %d\n", 1049 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1053 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1082 SCIP_Bool varfixing, /**< FALSE if y should be added in implications for x == 0, TRUE for x == 1 */ 1084 SCIP_BOUNDTYPE impltype, /**< type of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER) */ 1098 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1102 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1125 SCIPerrorMessage("invalid implication <%s> == %d -> <%s> >= %.15g (variable has value %.15g in solution)\n", 1134 SCIPerrorMessage("invalid implication <%s> == %d -> <%s> <= %.15g (variable has value %.15g in solution)\n", 1146 SCIP_VAR** vars, /**< binary variables in the clique: at most one can be set to the given value */ 1147 SCIP_Bool* values, /**< values of the variables in the clique; NULL to use TRUE for all vars */ 1163 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1167 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1208 SCIPerrorMessage("clique violates debugging solution, (at least) variable <%s%s> and variable <%s%s> are both one in the debugging solution\n", 1209 (values == NULL || values[pos1]) ? "" : "~", SCIPvarGetName(vars[pos1]), (values == NULL || values[pos2]) ? "" : "~", SCIPvarGetName(vars[pos2])); 1221 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict, or NULL */ 1295 SCIP_Real relaxedbd /**< array with relaxed bounds which are efficient to create a valid conflict, or NULL */ 1316 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict, or NULL */ 1329 printBdchginfo(set, bdchginfo, relaxedbds != NULL ? relaxedbds[i] : SCIPbdchginfoGetNewbound(bdchginfo)); 1341 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */ 1356 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1360 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1391 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */ 1412 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1416 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1485 /* when debugging was disabled the solution is not defined to be not valid in the current subtree */ 1489 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1494 SCIP_CALL( isSolutionInNode(SCIPblkmem(scip), scip->set, SCIPgetCurrentNode(scip), &solcontained) ); 1502 /** checks whether SCIP data structure is the main SCIP (the one for which debugging is enabled) */ 1577 /* check if the incumbent solution is at least as good as the debug solution, so we can stop to check the debug solution */ 1608 SCIPerrorMessage("solution value %.15g of <%s> outside bounds loc=[%.15g,%.15g], glb=[%.15g,%.15g]\n", 1609 solval, SCIPvarGetName(vars[i]), lb, ub, SCIPvarGetLbGlobal(vars[i]), SCIPvarGetUbGlobal(vars[i])); 1632 SCIP_PROPTIMING_ALWAYS, 99999999, 0, SCIP_PRESOLTIMING_FAST, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1638 /** adds a solution value for a new variable in the transformed problem that has no original counterpart 1658 /* assert that we are in the SCIP instance that we are debugging and not some different (subSCIP, auxiliary CIP, ...) */ 1670 SCIPerrorMessage("adding solution values for variable that are direct counterparts of original variables is forbidden\n"); 1685 for( i = debugsoldata->nsolvals; i > 0 && strcmp(varname, debugsoldata->solnames[i-1]) < 0; --i ) 1694 SCIPerrorMessage("already have stored different debugging solution value (%g) for variable <%s>, cannot store %g\n", debugsoldata->solvals[i-1], varname, val); 1699 SCIPdebugMessage("already have stored debugging solution value %g for variable <%s>, do not store same value again\n", val, varname); 1710 SCIP_ALLOC( BMSduplicateMemoryArray(&(debugsoldata->solnames[i]), varname, strlen(varname)+1) ); 1814 SCIPmessagePrintWarning(SCIPgetMessagehdlr(scip), "checked SCIPgetLPBInvRow() found value <%g> expected 1.0\n", vecval); 1819 SCIPmessagePrintWarning(SCIPgetMessagehdlr(scip), "checked SCIPgetLPBInvRow() found value <%g> expected 0.0\n", vecval);
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed) Definition: scip.c:22777 SCIP_RETCODE SCIPincludeProp(SCIP *scip, const char *name, const char *desc, int priority, int freq, SCIP_Bool delay, SCIP_PROPTIMING timingmask, int presolpriority, int presolmaxrounds, SCIP_PRESOLTIMING presoltiming, SCIP_DECL_PROPCOPY((*propcopy)), SCIP_DECL_PROPFREE((*propfree)), SCIP_DECL_PROPINIT((*propinit)), SCIP_DECL_PROPEXIT((*propexit)), SCIP_DECL_PROPINITPRE((*propinitpre)), SCIP_DECL_PROPEXITPRE((*propexitpre)), SCIP_DECL_PROPINITSOL((*propinitsol)), SCIP_DECL_PROPEXITSOL((*propexitsol)), SCIP_DECL_PROPPRESOL((*proppresol)), SCIP_DECL_PROPEXEC((*propexec)), SCIP_DECL_PROPRESPROP((*propresprop)), SCIP_PROPDATA *propdata) Definition: scip.c:6855 Definition: type_tree.h:33 SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5238 internal methods for branch and bound tree Definition: type_var.h:40 Definition: struct_scip.h:53 SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant) Definition: var.c:12033 Definition: type_prob.h:38 SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5578 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41920 Definition: struct_misc.h:63 #define SCIPdebugCheckImplic(set, var, varfixing, implvar, impltype, implbound) Definition: debug.h:258 Definition: struct_var.h:196 Definition: struct_var.h:80 SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val) Definition: scip.c:34843 SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize) Definition: misc.c:2057 SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17648 Definition: type_var.h:53 void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2116 Definition: type_retcode.h:38 #define SCIPdebugCheckVbound(set, var, vbtype, vbvar, vbcoef, vbconstant) Definition: debug.h:257 internal methods for LP management Definition: struct_tree.h:122 Definition: struct_lp.h:123 SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5274 Definition: struct_sol.h:50 Definition: struct_set.h:56 #define SCIPdebugCheckConflict(blkmem, set, node, bdchginfos, relaxedbds, nliterals) Definition: debug.h:260 SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17678 Definition: struct_var.h:119 SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5220 Definition: struct_misc.h:101 Definition: type_retcode.h:36 Definition: type_result.h:35 internal methods for storing and manipulating the main problem Definition: struct_cons.h:36 #define SCIPdebugCheckInference(blkmem, set, node, var, newbound, boundtype) Definition: debug.h:255 SCIP_RETCODE SCIPcheckCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool printreason, SCIP_RESULT *result) Definition: scip.c:25870 Definition: type_lp.h:47 Definition: type_set.h:44 Definition: type_result.h:36 SCIP_BOUNDCHGTYPE SCIPboundchgGetBoundchgtype(SCIP_BOUNDCHG *boundchg) Definition: var.c:16360 SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41907 void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...) Definition: message.c:411 Definition: type_retcode.h:33 internal methods for global SCIP settings SCIP main data structure. SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5666 Definition: type_result.h:42 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41946 void SCIProwPrint(SCIP_ROW *row, SCIP_MESSAGEHDLR *messagehdlr, FILE *file) Definition: lp.c:5065 SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5622 Definition: type_retcode.h:34 internal methods for problem variables Definition: struct_var.h:104 Definition: type_message.h:44 public data structures and miscellaneous methods #define SCIPdebugSolIsValidInSubtree(scip, isvalidinsubtree) Definition: debug.h:265 Definition: struct_lp.h:189 #define SCIPdebugCheckConflictFrontier(blkmem, set, node, bdchginfo, bdchginfos, relaxedbds, nliterals, bdchgqueue, forcedbdchgqueue) Definition: debug.h:261 methods for debugging Definition: type_set.h:39 SCIP_Real SCIPvarGetNegationConstant(SCIP_VAR *var) Definition: var.c:16894 SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5600 void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...) Definition: scip.c:1298 Definition: type_set.h:34 Definition: type_set.h:33 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2177 SCIP_Bool SCIPvarIsTransformedOrigvar(SCIP_VAR *var) Definition: var.c:12120 Definition: type_lp.h:48 SCIP_RETCODE SCIPcreateOrigSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur) Definition: scip.c:34218 public methods for message output SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5256 SCIP_RETCODE SCIPhashmapSetImage(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2137 SCIP_DEBUGSOLDATA * SCIPsetGetDebugSolData(SCIP_SET *set) Definition: set.c:4936 void SCIPsortPtrReal(void **ptrarray, SCIP_Real *realarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) Definition: type_set.h:42 SCIP_RETCODE SCIPsetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals) Definition: scip.c:34885 SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5644 common defines and data types used in all packages of SCIP SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val) Definition: lpi_clp.cpp:1598 Definition: type_prob.h:39 SCIP_BOUNDTYPE SCIPboundchgGetBoundtype(SCIP_BOUNDCHG *boundchg) Definition: var.c:16370 Definition: objbranchrule.h:33 Definition: type_result.h:39 SCIP callable library. Definition: type_var.h:72 memory allocation routines Definition: type_var.h:56 |