lp.c
Go to the documentation of this file.
31 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 469 /* we do not save the farkas coefficient, since it can be recomputed; thus, we invalidate it here */ 472 /* if the column was created after performing the storage (possibly during probing), we treat it as implicitly zero; 557 /* if the row was created after performing the storage (possibly during probing), we treat it as basic; 728 /* recompute the loose objective value from scratch, if it was marked to be unreliable before */ 757 /* we are only interested in variables with a finite impact, because the infinity counters should be correct */ 770 /* recompute the pseudo solution value from scratch, if it was marked to be unreliable before */ 794 /* we are only interested in variables with a finite impact, because the infinity counters should be correct */ 812 /* recompute the global pseudo solution value from scratch, if it was marked to be unreliable before */ 836 /* we are only interested in variables with a finite impact, because the infinity counters should be correct */ 918 /** sorts column entries of linked rows currently in the LP such that lower row indices precede higher ones */ 949 /** sorts column entries of unlinked rows or rows currently not in the LP such that lower row indices precede higher 966 SCIPsortPtrRealInt((void**)(&(col->rows[col->nlprows])), &(col->vals[col->nlprows]), &(col->linkpos[col->nlprows]), SCIProwComp, col->len - col->nlprows); 982 /** sorts row entries of linked columns currently in the LP such that lower column indices precede higher ones */ 997 SCIPsortIntPtrIntReal(row->cols_index, (void**)row->cols, row->linkpos, row->vals, row->nlpcols); 1013 /** sorts row entries of unlinked columns or columns currently not in the LP such that lower column indices precede 1032 SCIPsortIntPtrIntReal(&(row->cols_index[row->nlpcols]), (void**)(&(row->cols[row->nlpcols])), &(row->linkpos[row->nlpcols]), &(row->vals[row->nlpcols]), row->len - row->nlpcols); 1050 /** searches coefficient in part of the column, returns position in col vector or -1 if not found */ 1125 /** searches coefficient in part of the row, returns position in col vector or -1 if not found */ 1217 /** moves a coefficient in a column to a different place, and updates all corresponding data structures */ 1313 /** moves a coefficient in a row to a different place, and updates all corresponding data structures */ 1434 if( (row->eventfilter->len > 0 && (row->eventfilter->eventmask & SCIP_EVENTTYPE_ROWCOEFCHANGED) != 0) ) 1439 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, row->eventfilter, &event) ); 1462 if( (row->eventfilter->len > 0 && (row->eventfilter->eventmask & SCIP_EVENTTYPE_ROWCONSTCHANGED) != 0) ) 1467 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, row->eventfilter, &event) ); 1491 if( (row->eventfilter->len > 0 && (row->eventfilter->eventmask & SCIP_EVENTTYPE_ROWSIDECHANGED) != 0) ) 1496 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, row->eventfilter, &event) ); 1502 #if 0 /* enable this to check links between columns and rows in LP data structure (for debugging, very slow!) */ 1668 /*assert(colSearchCoef(col, row) == -1);*/ /* this assert would lead to slight differences in the solution process */ 1678 /* if the row is in current LP and is linked to the column, we have to insert it at the end of the linked LP rows 1692 /* in case the coefficient is integral w.r.t. numerics we explicitly round the coefficient to an integral value */ 1703 /* if the column is in current LP, we have to link it to the row, because otherwise, the primal information 1708 /* this call might swap the current row with the first non-LP/not linked row, s.t. insertion position 1730 /* if the column is in current LP, now both conditions, row->cols[linkpos]->lppos >= 0 and row->linkpos[linkpos] >= 0 1762 SCIPdebugMessage("added coefficient %g * <%s> at position %d (%d/%d) to column <%s> (nunlinked=%d)\n", 1796 /* if row is a linked LP row, move last linked LP coefficient to position of empty slot (deleted coefficient) */ 1832 /* in case the coefficient is integral w.r.t. numerics we explicitly round the coefficient to an integral value */ 1878 /* Euclidean norm, sum norm, and objective function scalar product only take into accout LP columns */ 1955 /* Euclidean norm, sum norm, and objective function scalar product only take into accout LP columns */ 2006 /*assert(rowSearchCoef(row, col) == -1);*/ /* this assert would lead to slight differences in the solution process */ 2021 /* if the column is in current LP and is linked to the row, we have to insert it at the end of the linked LP columns 2035 /* in case the coefficient is integral w.r.t. numerics we explicitly round the coefficient to an integral value */ 2048 /* if the row is in current LP, we have to link it to the column, because otherwise, the dual information 2053 /* this call might swap the current column with the first non-LP/not linked column, s.t. insertion position 2075 /* if the row is in current LP, now both conditions, col->rows[linkpos]->lppos >= 0 and col->linkpos[linkpos] >= 0 2116 SCIPdebugMessage("added coefficient %g * <%s> at position %d (%d/%d) to row <%s> (nunlinked=%d)\n", 2154 SCIPerrorMessage("cannot delete a coefficient from the locked unmodifiable row <%s>\n", row->name); 2161 /* if column is a linked LP column, move last linked LP coefficient to position of empty slot (deleted coefficient) */ 2207 SCIPerrorMessage("cannot change a coefficient of the locked unmodifiable row <%s>\n", row->name); 2211 /* in case the coefficient is integral w.r.t. numerics we explicitly round the coefficient to an integral value */ 2322 /* this call might swap the current row with the first non-LP/not linked row, but this is of no harm */ 2327 assert(col->nlprows == 0 || col->rows[col->nlprows-1]->cols[col->linkpos[col->nlprows-1]] == col); 2328 assert(col->nlprows == 0 || col->rows[col->nlprows-1]->linkpos[col->linkpos[col->nlprows-1]] == col->nlprows-1); 2404 /* this call might swap the current column with the first non-LP/not linked column, but this is of no harm */ 2409 assert(row->nlpcols == 0 || row->cols[row->nlpcols-1]->rows[row->linkpos[row->nlpcols-1]] == row); 2410 assert(row->nlpcols == 0 || row->cols[row->nlpcols-1]->linkpos[row->linkpos[row->nlpcols-1]] == row->nlpcols-1); 2526 /** checks, that parameter of type int in LP solver has the given value, ignoring unknown parameters */ 2551 /** checks, that parameter of type SCIP_Bool in LP solver has the given value, ignoring unknown parameters */ 2562 /** checks, that parameter of type SCIP_Real in LP solver has the given value, ignoring unknown parameters */ 2593 #define lpCutoffDisabled(set) (set->lp_disablecutoff == 1 || (set->nactivepricers > 0 && set->lp_disablecutoff == 2)) 2606 /* we disabled the objective limit in the LP solver or we want so solve exactly and thus cannot rely on the LP 2956 /** sets the pricing strategy of the LP solver (given the character representation of the strategy) */ 3225 SCIPmessageFPrintInfo(messagehdlr, file, "(obj: %.15g) [%.15g,%.15g], ", col->obj, col->lb, col->ub); 3239 /** sorts column entries such that LP rows precede non-LP rows and inside both parts lower row indices precede higher ones 3295 SCIPerrorMessage("coefficient for row <%s> doesn't exist in column <%s>\n", row->name, SCIPvarGetName(col->var)); 3411 SCIP_CALL( rowChgCoefPos(row, blkmem, set, eventqueue, lp, col->linkpos[pos], col->vals[pos] + incval) ); 3446 * @note: Here we only consider cancellations which can occur during decreasing the oldvalue to newvalue; not the 3485 if( SCIPsetIsLT(set, lp->objsqrnorm, 0.0) || isNewValueUnreliable(set, lp->objsqrnorm, oldvalue) ) 3491 /* due to numerical troubles it still can appear that lp->objsqrnorm is a little bit smaller than 0 */ 3517 SCIPdebugMessage("changing objective value of column <%s> from %f to %f\n", SCIPvarGetName(col->var), col->obj, newobj); 3533 /* in any case, when the sign of the objective (and thereby the best bound) changes, the variable has to enter the 3547 /* update original objective value, as long as we are not in diving or probing and changed objective values */ 3576 SCIPdebugMessage("changing lower bound of column <%s> from %f to %f\n", SCIPvarGetName(col->var), col->lb, newlb); 3592 /* in any case, when the best bound is zero and gets changed, the variable has to enter the LP and the LP has to be 3621 SCIPdebugMessage("changing upper bound of column <%s> from %f to %f\n", SCIPvarGetName(col->var), col->ub, newub); 3637 /* in any case, when the best bound is zero and gets changed, the variable has to enter the LP and the LP has to be 3835 /** calculates the Farkas coefficient y^T A_i of a column i using the given dual Farkas vector y */ 3964 /** gets the Farkas value of a column in last LP (which must be infeasible), i.e. the Farkas coefficient y^T A_i times 4115 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL; 4157 /* if a loose variables has an infinite best bound, the LP bound is -infinity and no gain can be achieved */ 4188 retcode = SCIPlpiStrongbranchInt(lp->lpi, col->lpipos, col->primsol, itlim, down == NULL ? NULL : &sbdown, up == NULL ? NULL : &sbup, &sbdownvalid, &sbupvalid, &iter); 4192 retcode = SCIPlpiStrongbranchFrac(lp->lpi, col->lpipos, col->primsol, itlim, down == NULL ? NULL : &sbdown, up == NULL ? NULL : &sbup, &sbdownvalid, &sbupvalid, &iter); 4227 iter = stat->ndualresolvelps > 0 ? (int)(2*stat->ndualresolvelpiterations / stat->ndualresolvelps) 4229 : stat->nprimalresolvelps > 0 ? (int)(2*stat->nprimalresolvelpiterations / stat->nprimalresolvelps) 4275 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds, or NULL; 4350 /* if a loose variables has an infinite best bound, the LP bound is -infinity and no gain can be achieved */ 4389 SCIPdebugMessage("performing strong branching on %d variables with %d iterations\n", ncols, itlim); 4393 retcode = SCIPlpiStrongbranchesInt(lp->lpi, lpipos, nsubcols, primsols, itlim, sbdown, sbup, sbdownvalid, sbupvalid, &iter); 4395 retcode = SCIPlpiStrongbranchesFrac(lp->lpi, lpipos, nsubcols, primsols, itlim, sbdown, sbup, sbdownvalid, sbupvalid, &iter); 4464 iter = stat->ndualresolvelps > 0 ? (int)(2*stat->ndualresolvelpiterations / stat->ndualresolvelps) 4466 : stat->nprimalresolvelps > 0 ? (int)(2*stat->nprimalresolvelpiterations / stat->nprimalresolvelps) 4498 * keep in mind, that the returned old values may have nothing to do with the current LP solution 4504 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL; 4508 SCIP_Real* solval, /**< stores LP solution value of column at last strong branching call, or NULL */ 4528 /** if strong branching was already applied on the column at the current node, returns the number of LPs solved after 4540 return (col->sbnode != stat->nnodes ? SCIP_LONGINT_MAX : stat->lpcount - stat->nsbdivinglps - col->validsblp); 4543 /** marks a column to be not removable from the LP in the current node because it became obsolete */ 4553 /* lpRemoveObsoleteCols() does not remove a column if the node number stored in obsoletenode equals the current node number */ 4681 /** checks, whether the given scalar scales the given value to an integral number with error in the given bounds */ 4686 SCIP_Real mindelta, /**< minimal relative allowed difference of scaled coefficient s*c and integral i */ 4687 SCIP_Real maxdelta, /**< maximal relative allowed difference of scaled coefficient s*c and integral i */ 4720 * if the row's activity is proven to be integral, the sides are automatically rounded to the next integer 4731 SCIP_Bool integralcontvars, /**< should the coefficients of the continuous variables also be made integral, 4733 SCIP_Real minrounddelta, /**< minimal relative difference of scaled coefficient s*c and integral i, 4735 SCIP_Real maxrounddelta /**< maximal relative difference of scaled coefficient s*c and integral i 4759 SCIPdebugMessage("scale row <%s> with %g (tolerance=[%g,%g])\n", row->name, scaleval, minrounddelta, maxrounddelta); 4767 /* scale the row coefficients, thereby recalculating whether the row's activity is always integral; 4768 * if the row coefficients are rounded to the nearest integer value, calculate the maximal activity difference, 4780 /* get local or global bounds for column, depending on the local or global feasibility of the row */ 4845 /* scale the row sides, and move the constant to the sides; relax the sides with accumulated delta in order 4882 for( c = 0; c < row->len && SCIPcolIsIntegral(row->cols[c]) && SCIPsetIsIntegral(set, row->vals[c]); ++c ) 4907 void* origin, /**< pointer to constraint handler or separator who created the row (NULL if unkown) */ 4909 SCIP_Bool modifiable, /**< is row modifiable during node processing (subject to column generation)? */ 4919 * in case, for example, lhs > rhs but they are equal with tolerances, one could pass lhs=rhs=lhs+rhs/2 to 5093 SCIPmessageFPrintInfo(messagehdlr, file, "%+.15g<%s> ", row->vals[i], SCIPvarGetName(row->cols[i]->var)); 5113 SCIPdebugMessage("capture row <%s> with nuses=%d and nlocks=%u\n", row->name, row->nuses, row->nlocks); 5131 SCIPdebugMessage("release row <%s> with nuses=%d and nlocks=%u\n", (*row)->name, (*row)->nuses, (*row)->nlocks); 5143 /** locks an unmodifiable row, which forbids further changes; has no effect on modifiable rows */ 5153 SCIPdebugMessage("lock row <%s> with nuses=%d and nlocks=%u\n", row->name, row->nuses, row->nlocks); 5158 /** unlocks a lock of an unmodifiable row; a row with no sealed lock may be modified; has no effect on modifiable rows */ 5168 SCIPdebugMessage("unlock row <%s> with nuses=%d and nlocks=%u\n", row->name, row->nuses, row->nlocks); 5218 SCIPerrorMessage("coefficient for column <%s> doesn't exist in row <%s>\n", SCIPvarGetName(col->var), row->name); 5320 /* coefficient doesn't exist, or sorting is delayed: add coefficient to the end of the row's arrays */ 5422 SCIP_CALL( SCIProwChgConstant(row, blkmem, set, stat, eventqueue, lp, row->constant + addval) ); 5453 SCIP_CALL( rowEventSideChanged(row, blkmem, set, eventqueue, SCIP_SIDETYPE_LEFT, oldlhs, lhs) ); 5485 SCIP_CALL( rowEventSideChanged(row, blkmem, set, eventqueue, SCIP_SIDETYPE_RIGHT, oldrhs, rhs) ); 5509 /** tries to find a value, such that all row coefficients, if scaled with this value become integral */ 5513 SCIP_Real mindelta, /**< minimal relative allowed difference of scaled coefficient s*c and integral i */ 5514 SCIP_Real maxdelta, /**< maximal relative allowed difference of scaled coefficient s*c and integral i */ 5517 SCIP_Bool usecontvars, /**< should the coefficients of the continuous variables also be made integral? */ 5518 SCIP_Real* intscalar, /**< pointer to store scalar that would make the coefficients integral, or NULL */ 5540 /**@todo call misc.c:SCIPcalcIntegralScalar() instead - if usecontvars == FALSE, filter the integer variables first */ 5550 SCIPdebugMessage("trying to find rational representation for row <%s> (contvars: %u)\n", SCIProwGetName(row), usecontvars); 5551 SCIPdebug( val = 0; ); /* avoid warning "val might be used uninitialized; see SCIPdebugMessage lastval=%g below */ 5591 /* try, if row coefficients can be made integral by multiplying them with the reciprocal of the smallest coefficient 5632 SCIPdebugMessage(" -> integrality can be achieved by scaling with %g (minval=%g)\n", scaleval, minval); 5650 && (absval * twomultval < 0.5 || !isIntegralScalar(val, twomultval, mindelta, maxdelta, NULL)) ) 5674 SCIPdebugMessage(" -> integrality can be achieved by scaling with %g (power of 2)\n", twomultval); 5679 /* convert each coefficient into a rational number, calculate the greatest common divisor of the numerators 5699 SCIPdebugMessage(" -> first rational: val: %g == %" SCIP_LONGINT_FORMAT "/%" SCIP_LONGINT_FORMAT ", gcd=%" SCIP_LONGINT_FORMAT ", scm=%" SCIP_LONGINT_FORMAT ", rational=%u\n", 5719 SCIPdebugMessage(" -> next rational : val: %g == %" SCIP_LONGINT_FORMAT "/%" SCIP_LONGINT_FORMAT ", gcd=%" SCIP_LONGINT_FORMAT ", scm=%" SCIP_LONGINT_FORMAT ", rational=%u\n", 5727 /* make row coefficients integral by multiplying them with the smallest common multiple of the denominators */ 5732 SCIPdebugMessage(" -> integrality can be achieved by scaling with %g (rational:%" SCIP_LONGINT_FORMAT "/%" SCIP_LONGINT_FORMAT ")\n", 5738 SCIPdebugMessage(" -> rationalizing failed: gcd=%" SCIP_LONGINT_FORMAT ", scm=%" SCIP_LONGINT_FORMAT ", lastval=%g\n", gcd, scm, val); /*lint !e771*/ 5752 SCIP_Real mindelta, /**< minimal relative allowed difference of scaled coefficient s*c and integral i */ 5753 SCIP_Real maxdelta, /**< maximal relative allowed difference of scaled coefficient s*c and integral i */ 5756 SCIP_Bool usecontvars, /**< should the coefficients of the continuous variables also be made integral? */ 5765 SCIP_CALL( SCIProwCalcIntegralScalar(row, set, mindelta, maxdelta, maxdnom, maxscale, usecontvars, 5771 SCIP_CALL( rowScale(row, blkmem, set, eventqueue, stat, lp, intscalar, usecontvars, mindelta, maxdelta) ); 5777 /** sorts row entries such that LP columns precede non-LP columns and inside both parts lower column indices precede 5807 /** sorts row, and merges equal column entries (resulting from lazy sorting and adding) into a single entry; removes 5867 /* in case the coefficient is integral w.r.t. numerics we explicitly round the coefficient to an integral value */ 5870 row->integral = row->integral && SCIPcolIsIntegral(cols[t]) && SCIPsetIsIntegral(set, vals[t]); 5880 row->integral = row->integral && SCIPcolIsIntegral(cols[t]) && SCIPsetIsIntegral(set, vals[t]); 5889 /* if equal entries were merged, we have to recalculate the norms, since the squared Euclidean norm is wrong */ 6017 /** returns the feasibility of a row in the current LP solution: negative value means infeasibility */ 6034 /** returns the feasibility of a row in the relaxed solution solution: negative value means infeasibility 6096 /** returns the feasibility of a row in the current NLP solution: negative value means infeasibility 6182 assert(!row->integral || EPSISINT(row->pseudoactivity - row->constant, SCIP_DEFAULT_SUMEPSILON)); 6213 /** returns the pseudo feasibility of a row in the current pseudo solution: negative value means infeasibility */ 6343 assert(!row->integral || mininfinite || REALABS(row->minactivity - row->constant) > 1.0/SCIP_DEFAULT_SUMEPSILON 6345 assert(!row->integral || maxinfinite || REALABS(row->maxactivity - row->constant) > 1.0/SCIP_DEFAULT_SUMEPSILON 6527 /** returns whether the row's efficacy with respect to the current LP solution is greater than the minimal cut efficacy */ 6584 /** returns whether the row's efficacy with respect to the given primal solution is greater than the minimal cut 6703 * The columns in a row are divided into two parts: LP columns, which are currently in the LP and non-LP columns; 6704 * we sort the rows, but that only ensures that within these two parts, columns are sorted w.r.t. their index. 6705 * Normally, this should be suficient, because a column contained in both rows should either be one of the LP columns 6707 * However, directly after a row was created, before a row is added to the LP, the row is not linked to all its 6708 * columns and all columns are treated as non-LP columns. Moreover, for example when doing column generation, 6709 * columns can be added later and remain unlinked while all previously added columns might already be linked. 6710 * Therefore, we have to be very careful about whether we can rely on the partitioning of the variables. 6725 * -> we need to compare three partitions: the LP part of the completely linked row and both partitions of the 6729 * -> we need to compare three partitions: the complete unlinked row and both partitions of the other row 6748 /* check that we can rely on the partition into LP columns and non-LP columns if the rows are completely linked */ 6792 /* set the iterators to the last column we want to regard in the row: nunlinked is either 0 or row->len, 6817 /* the "harder" cases 3) - 5): start with four partitions and reduce their number iteratively */ 6839 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len ) 6848 assert((row1->cols[inlp1] == row2->cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2])); 6915 /* One partition was completely handled, we just have to handle the three remaining partitions: 6917 * If necessary, we swap the partitions to ensure that row1 is the row with only one remaining partition. 6936 /* determine section of row 1 that we want to look at (current iterator = begin, end, LP-columns?) 6954 /* handle the case of three partitions (case 4) until one partition is finished, this reduces our problem to case 1), 2), or 5); 6996 /* if the second section of row 1 was finished, we can stop; otherwise, we have to consider the remaining parts of 7001 /* determine section of row 2 that we want to look at (current iterator = begin, end, LP-columns?) */ 7016 /* handle the case of two partitions (standard case 5, or case 1 or 2 due to partition reduction) */ 7060 * The columns in a row are divided into two parts: LP columns, which are currently in the LP and non-LP columns; 7061 * we sort the rows, but that only ensures that within these two parts, columns are sorted w.r.t. their index. 7062 * Normally, this should be suficient, because a column contained in both rows should either be one of the LP columns 7064 * However, directly after a row was created, before a row is added to the LP, the row is not linked to all its 7065 * columns and all columns are treated as non-LP columns. Moreover, for example when doing column generation, 7066 * columns can be added later and remain unlinked while all previously added columns might already be linked. 7067 * Therefore, we have to be very careful about whether we can rely on the partitioning of the variables. 7082 * -> we need to compare three partitions: the LP part of the completely linked row and both partitions of the 7086 * -> we need to compare three partitions: the complete unlinked row and both partitions of the other row 7105 /* check that we can rely on the partition into LP columns and non-LP columns if the rows are completely linked */ 7149 /* set the iterators to the last column we want to regard in the row: nunlinked is either 0 or row->len, 7174 /* the "harder" cases 3) - 5): start with four partitions and reduce their number iteratively */ 7196 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len ) 7205 assert((row1->cols[inlp1] == row2->cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2])); 7272 /* One partition was completely handled, we just have to handle the three remaining partitions: 7274 * If necessary, we swap the partitions to ensure that row1 is the row with only one remaining partition. 7293 /* determine section of row 1 that we want to look at (current iterator = begin, end, LP-columns?) 7311 /* handle the case of three partitions (case 4) until one partition is finished, this reduces our problem to case 1), 2), or 5); 7353 /* if the second section of row 1 was finished, we can stop; otherwise, we have to consider the remaining parts of 7358 /* determine section of row 2 that we want to look at (current iterator = begin, end, LP-columns?) */ 7373 /* handle the case of two partitions (standard case 5, or case 1 or 2 due to partition reduction) */ 7399 /** returns the degree of parallelism between the hyperplanes defined by the two row vectors v, w: 7420 parallelism = scalarprod / (sqrt((SCIP_Real) SCIProwGetNNonz(row1)) * sqrt((SCIP_Real) SCIProwGetNNonz(row2))); 7431 /** returns the degree of orthogonality between the hyperplanes defined by the two row vectors v, w: 7444 /** gets parallelism of row with objective function: if the returned value is 1, the row is parallel to the objective 7486 SCIP_EVENTDATA* eventdata, /**< event data to pass to the event handler for the event processing */ 7498 SCIP_CALL( SCIPeventfilterAdd(row->eventfilter, blkmem, set, eventtype, eventhdlr, eventdata, filterpos) ); 7510 SCIP_EVENTDATA* eventdata, /**< event data to pass to the event handler for the event processing */ 7517 SCIPdebugMessage("drop event of row <%s> with handler %p and data %p\n", row->name, (void*)eventhdlr, (void*)eventdata); 7519 SCIP_CALL( SCIPeventfilterDel(row->eventfilter, blkmem, set, eventtype, eventhdlr, eventdata, filterpos) ); 7524 /** marks a row to be not removable from the LP in the current node because it became obsolete */ 7534 /* lpRemoveObsoleteRows() does not remove a row if the node number stored in obsoletenode equals the current node number */ 7590 SCIPdebugMessage("flushing col deletions: shrink LP from %d to %d columns\n", lp->nlpicols, lp->lpifirstchgcol); 7634 if( SCIPsetIsInfinity(set, -col->lb) || (SCIPsetIsLE(set, col->lb, col->lazylb) && !SCIPlpDiving(lp)) ) 7642 if( SCIPsetIsInfinity(set, col->ub) || (SCIPsetIsGE(set, col->ub, col->lazyub) && !SCIPlpDiving(lp)) ) 7779 SCIPdebugMessage("flushing col additions: enlarge LP from %d to %d columns\n", lp->nlpicols, lp->ncols); 7847 SCIPdebugMessage("flushing row deletions: shrink LP from %d to %d rows\n", lp->nlpirows, lp->lpifirstchgrow); 7991 SCIPdebugMessage("flushing row additions: enlarge LP from %d to %d rows\n", lp->nlpirows, lp->nrows); 8124 SCIPdebugMessage("flushing objective changes: change %d objective values of %d changed columns\n", nobjchg, lp->nchgcols); 8137 SCIPdebugMessage("flushing bound changes: change %d bounds of %d changed columns\n", nbdchg, lp->nchgcols); 8268 SCIPdebugMessage("flushing LP changes: old (%d cols, %d rows), nchgcols=%d, nchgrows=%d, firstchgcol=%d, firstchgrow=%d, new (%d cols, %d rows), flushed=%u\n", 8269 lp->nlpicols, lp->nlpirows, lp->nchgcols, lp->nchgrows, lp->lpifirstchgcol, lp->lpifirstchgrow, 8382 assert(col->flushedlb == (SCIPsetIsInfinity(set, -col->lb) ? -SCIPlpiInfinity(lp->lpi) : col->lb)); /*lint !e777*/ 8383 assert(col->flushedub == (SCIPsetIsInfinity(set, col->ub) ? SCIPlpiInfinity(lp->lpi) : col->ub)); /*lint !e777*/ 8414 assert(row->flushedlhs == (SCIPsetIsInfinity(set, -row->lhs) ? -SCIPlpiInfinity(lp->lpi) : row->lhs - row->constant)); /*lint !e777*/ 8415 assert(row->flushedrhs == (SCIPsetIsInfinity(set, row->rhs) ? SCIPlpiInfinity(lp->lpi) : row->rhs - row->constant)); /*lint !e777*/ 8724 (*lp)->validsollp = stat->lpcount; /* the initial (empty) SCIP_LP is solved with primal and dual solution of zero */ 8783 "LP Solver <%s>: upper objective limit cannot be set -- can lead to unnecessary simplex iterations\n", 8791 "LP Solver <%s>: primal feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n", 8799 "LP Solver <%s>: dual feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n", 8807 "LP Solver <%s>: barrier convergence tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n", 8846 "LP Solver <%s>: iteration limit cannot be set -- can lead to unnecessary simplex iterations\n", 8868 "LP Solver <%s>: row representation of the basis not available -- SCIP parameter lp/rowrepswitch has no effect\n", 8875 "LP Solver <%s>: condition number limit for the basis not available -- SCIP parameter lp/conditionlimit has no effect\n", 8931 /** resets the LP to the empty LP by removing all columns and rows from LP, releasing all rows, and flushing the 8951 lp->validsollp = stat->lpcount; /* the initial (empty) SCIP_LP is solved with primal and dual solution of zero */ 8980 SCIPdebugMessage("adding column <%s> to LP (%d rows, %d cols)\n", SCIPvarGetName(col->var), lp->nrows, lp->ncols); 9040 SCIPdebugMessage("adding row <%s> to LP (%d rows, %d cols)\n", row->name, lp->nrows, lp->ncols); 9080 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, eventfilter, &event) ); 9088 /** method checks if all columns in the lazycols array have at least one lazy bound and also have a counter part in the 9089 * cols array; furthermore, it is checked if columns in the cols array which have a lazy bound have a counter part in 9109 assert(!SCIPsetIsInfinity(set, lp->lazycols[i]->lazyub) || !SCIPsetIsInfinity(set, -lp->lazycols[i]->lazylb)); 9116 assert(!SCIPsetIsInfinity(set, lp->cols[c]->lazyub) || !SCIPsetIsInfinity(set, -lp->cols[c]->lazylb)); 9123 /* check if each column in the column array which has at least one lazy bound has a counter part in the lazy column * 9138 assert(contained == (!SCIPsetIsInfinity(set, lp->cols[c]->lazyub) || !SCIPsetIsInfinity(set, -lp->cols[c]->lazylb))); 9264 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, eventfilter, &event) ); 9327 /** gets all indices of basic columns and rows: index i >= 0 corresponds to column i, index i < 0 to row -i-1 */ 9344 /** gets current basis status for columns and rows; arrays must be large enough to store the basis status */ 9409 /** gets a row from the product of inverse basis matrix B^-1 and coefficient matrix A (i.e. from B^-1 * A) */ 9432 /** gets a column from the product of inverse basis matrix B^-1 and coefficient matrix A (i.e. from B^-1 * A), 9456 /** calculates a weighted sum of all LP rows; for negative weights, the left and right hand side of the corresponding 9464 SCIP_REALARRAY* sumcoef, /**< array to store sum coefficients indexed by variables' probindex */ 9486 SCIP_CALL( SCIPrealarrayExtend(sumcoef, set->mem_arraygrowinit, set->mem_arraygrowfac, 0, prob->nvars-1) ); 9511 SCIP_CALL( SCIPrealarrayIncVal(sumcoef, set->mem_arraygrowinit, set->mem_arraygrowfac, idx, weights[r] * row->vals[i]) ); 9544 /** returns the maximum absolute row weight in the given weight vector, and calculates the sparsity pattern of the weights */ 9589 /** returns the maximum absolute row weight in the given weight vector using given sparsity pattern */ 9643 SCIP_Bool* varused, /**< array to flag variables that appear in the MIR constraint; size prob->nvars */ 9644 int* varinds, /**< array to store sparsity pattern of non-zero MIR coefficients; size prob->nvars */ 9707 /** builds a weighted sum of rows, and decides whether to use the left or right hand side of the rows in summation */ 9715 int* sidetypes, /**< specify row side type (-1 = lhs, 0 = unkown, 1 = rhs) or NULL for automatic choices */ 9717 SCIP_Bool allowlocal, /**< should local rows be included, resulting in a locally valid summation? */ 9719 SCIP_Real maxweightrange, /**< maximal valid range max(|weights|)/min(|weights|) of row weights */ 9724 SCIP_Bool* varused, /**< array to flag variables that appear in the MIR constraint; size prob->nvars */ 9725 int* varinds, /**< array to store sparsity pattern of non-zero MIR coefficients; size prob->nvars */ 9731 SCIP_Bool* rowtoolong, /**< pointer to store whether the aggregated row is too long and thus invalid */ 9841 /* Automatically decide, whether we want to use the left or the right hand side of the row in the summation. 9852 /* Automatically decide, whether we want to use the left or the right hand side of the row in the summation. 9862 addRowToAggregation(set, mircoef, mirrhs, slacksign, varused, varinds, nvarinds, row, weight, uselhs); 9866 SCIPdebugMessage("MIR: %d: row <%s>, lhs = %g, rhs = %g, scale = %g, weight = %g, slacksign = %d -> rhs = %g\n", 9878 /* remove row from sparsity pattern, do not increase i (i-th position is filled with last entry) */ 9896 /** removes all nearly-zero coefficients from MIR row and relaxes the right hand side correspondingly in order to 9954 /* remove variable from sparsity pattern, do not increase i (i-th position is filled with last entry) */ 9974 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 10007 /* we have to avoid cyclic variable bound usage, so we enforce to use only variable bounds variables of smaller index */ 10008 /**@todo this check is not needed for continuous variables; but allowing all but binary variables 10030 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 10062 /* we have to avoid cyclic variable bound usage, so we enforce to use only variable bounds variables of smaller index */ 10063 /**@todo this check is not needed for continuous variables; but allowing all but binary variables 10083 * x^\prime_j := x_j - lb_j,& x_j = x^\prime_j + lb_j,& a^\prime_j = a_j,& \mbox{if lb is used in transformation}\\ 10084 * x^\prime_j := ub_j - x_j,& x_j = ub_j - x^\prime_j,& a^\prime_j = -a_j,& \mbox{if ub is used in transformation} 10092 * x^\prime_j := x_j - (bl_j\, zl_j + dl_j),& x_j = x^\prime_j + (bl_j\, zl_j + dl_j),& a^\prime_j = a_j,& \mbox{if vlb is used in transf.} \\ 10093 * x^\prime_j := (bu_j\, zu_j + du_j) - x_j,& x_j = (bu_j\, zu_j + du_j) - x^\prime_j,& a^\prime_j = -a_j,& \mbox{if vub is used in transf.} 10096 * move the constant terms \f$ a_j\, dl_j \f$ or \f$ a_j\, du_j \f$ to the rhs, and update the coefficient of the VLB variable: 10110 SCIP_Real boundswitch, /**< fraction of domain up to which lower bound is used in transformation */ 10112 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 10113 SCIP_Bool fixintegralrhs, /**< should complementation tried to be adjusted such that rhs gets fractional? */ 10114 int* boundsfortrans, /**< bounds that should be used for transformed variables: vlb_idx/vub_idx, 10117 SCIP_BOUNDTYPE* boundtypesfortrans, /**< type of bounds that should be used for transformed variables; 10129 SCIP_Bool* freevariable, /**< stores whether a free variable was found in MIR row -> invalid summation */ 10130 SCIP_Bool* localbdsused /**< pointer to store whether local bounds were used in transformation */ 10168 /* start with continuous variables, because using variable bounds can affect the untransformed integral 10169 * variables, and these changes have to be incorporated in the transformation of the integral variables 10212 assert(SCIPvarGetType(var) == SCIP_VARTYPE_CONTINUOUS || ( boundsfortrans[v] == -2 || boundsfortrans[v] == -1 )); 10240 /* we have to avoid cyclic variable bound usage, so we enforce to use only variable bounds variables of smaller index */ 10242 bestlb = vlbcoefs[k] * (sol == NULL ? SCIPvarGetLPSol(vlbvars[k]) : SCIPsolGetVal(sol, set, stat, vlbvars[k])) + vlbconsts[k]; 10253 /* find closest upper bound in standard upper bound (and variable upper bounds for continuous variables) */ 10254 findBestUb(set, stat, var, sol, usevbds && fixintegralrhs, allowlocal && fixintegralrhs, &bestub, &bestubtype); 10283 /* we have to avoid cyclic variable bound usage, so we enforce to use only variable bounds variables of smaller index */ 10285 bestub = vubcoefs[k] * (sol == NULL ? SCIPvarGetLPSol(vubvars[k]) : SCIPsolGetVal(sol, set, stat, vubvars[k])) + vubconsts[k]; 10296 /* find closest lower bound in standard lower bound (and variable lower bounds for continuous variables) */ 10297 findBestLb(set, stat, var, sol, usevbds && fixintegralrhs, allowlocal && fixintegralrhs, &bestlb, &bestlbtype); 10306 /* find closest lower bound in standard lower bound (and variable lower bounds for continuous variables) */ 10309 /* find closest upper bound in standard upper bound (and variable upper bounds for continuous variables) */ 10457 SCIPdebugMessage("MIR var <%s>: varsign=%d, boundtype=%d, mircoef=%g, base=%d, sol=%g, lb=%g, ub=%g, vlb=%g<%s>%+g, vub=%g<%s>%+g -> rhs=%g\n", 10532 solval = (sol == NULL ? SCIPvarGetLPSol(prob->vars[v]) : SCIPsolGetVal(sol, set, stat, prob->vars[v])); 10537 /* prefer larger violations; for equal violations, prefer smaller f0 values since then the possibility that 10562 assert(bestubtypes[bestv] < 0); /* cannot switch to a variable bound (would lead to further coef updates) */ 10569 assert(bestlbtypes[bestv] < 0); /* cannot switch to a variable bound (would lead to further coef updates) */ 10589 /** Calculate fractionalities \f$ f_0 := b - down(b), f_j := a^\prime_j - down(a^\prime_j) \f$, and derive MIR cut \f$ \tilde{a} \cdot x' \leq down(b) \f$ 10604 * x^\prime_j := x_j - lb_j,& x_j = x^\prime_j + lb_j,& a^\prime_j = a_j,& \hat{a}_j := \tilde{a}_j,& \mbox{if lb was used in transformation} \\ 10605 * x^\prime_j := ub_j - x_j,& x_j = ub_j - x^\prime_j,& a^\prime_j = -a_j,& \hat{a}_j := -\tilde{a}_j,& \mbox{if ub was used in transformation} 10620 * x^\prime_j := x_j - (bl_j \cdot zl_j + dl_j),& x_j = x^\prime_j + (bl_j\, zl_j + dl_j),& a^\prime_j = a_j,& \hat{a}_j := \tilde{a}_j,& \mbox{(vlb)} \\ 10621 * x^\prime_j := (bu_j\, zu_j + du_j) - x_j,& x_j = (bu_j\, zu_j + du_j) - x^\prime_j,& a^\prime_j = -a_j,& \hat{a}_j := -\tilde{a}_j,& \mbox{(vub)} 10634 * \hat{a}_{zl_j} := \hat{a}_{zl_j} - \tilde{a}_j\, bl_j = \hat{a}_{zl_j} - \hat{a}_j\, bl_j,& \mbox{or} \\ 10649 int* boundtype, /**< stores the bound used for transformed variable (vlb/vub_idx or -1 for lb/ub)*/ 10667 /* Loop backwards to be able to delete coefficients from the sparsity pattern. Additionally, the variable bound 10668 * substitutions are only used in such a way that a variable of higher index is substituted by a variable of a 10732 /* move the constant term -a~_j * lb_j == -a^_j * lb_j , or a~_j * ub_j == -a^_j * ub_j to the rhs */ 10811 * The coefficient of the slack variable s_r is equal to the row's weight times the slack's sign, because the slack 10812 * variable only appears in its own row: \f$ a^\prime_r = scale * weight[r] * slacksign[r]. \f$ 10814 * Depending on the slacks type (integral or continuous), its coefficient in the cut calculates as follows: 10818 * & \hat{a}_r = \tilde{a}_r = down(a^\prime_r) + (f_r - f0)/(1 - f0),& \mbox{if}\qquad f_r > f0 \\ 10824 * Substitute \f$ \hat{a}_r \cdot s_r \f$ by adding \f$ \hat{a}_r \f$ times the slack's definition to the cut. 10949 /* a*x + c + s == rhs => s == - a*x - c + rhs: move a^_r * (rhs - c) to the right hand side */ 11003 activity += mircoef[i] * (sol == NULL ? SCIPvarGetLPSol(prob->vars[i]) : SCIPsolGetVal(sol, set, stat, prob->vars[i])); 11034 act += mircoef[v] * ( sol == NULL ? SCIPvarGetLPSol(prob->vars[v]) : SCIPsolGetVal(sol, set, stat, prob->vars[v])); 11040 /* calculates a MIR cut out of the weighted sum of LP rows; The weights of modifiable rows are set to 0.0, because these 11049 SCIP_Real boundswitch, /**< fraction of domain up to which lower bound is used in transformation */ 11051 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 11052 SCIP_Bool fixintegralrhs, /**< should complementation tried to be adjusted such that rhs gets fractional? */ 11053 int* boundsfortrans, /**< bounds that should be used for transformed variables: vlb_idx/vub_idx, 11056 SCIP_BOUNDTYPE* boundtypesfortrans, /**< type of bounds that should be used for transformed variables; 11059 SCIP_Real maxweightrange, /**< maximal valid range max(|weights|)/min(|weights|) of row weights */ 11063 SCIP_Real maxweight, /**< largest magnitude of weights; set to -1 if sparsity information is unknown */ 11064 int* weightinds, /**< sparsity pattern of weights; size nrowinds; NULL if sparsity info is unknown */ 11066 int rowlensum, /**< total number of non-zeros in used rows (row associated with nonzero weight coefficient); -1 if unknown */ 11067 int* sidetypes, /**< specify row side type (-1 = lhs, 0 = unkown, 1 = rhs) or NULL for automatic choices */ 11069 SCIP_Real* mksetcoefs, /**< array to store mixed knapsack set coefficients: size nvars; or NULL */ 11070 SCIP_Bool* mksetcoefsvalid, /**< pointer to store whether mixed knapsack set coefficients are valid; or NULL */ 11074 SCIP_Bool* success, /**< pointer to store whether the returned coefficients are a valid MIR cut */ 11075 SCIP_Bool* cutislocal, /**< pointer to store whether the returned cut is only valid locally */ 11149 maxmksetcoefs, maxweightrange, compress, mircoef, &rhs, slacksign, varused, varinds, &nvarinds, rowinds, &nrowinds, 11157 /* remove all nearly-zero coefficients from MIR row and relax the right hand side correspondingly in order to 11172 * x'_j := x_j - (bl_j * zl_j + dl_j), x_j == x'_j + (bl_j * zl_j + dl_j), a'_j == a_j, if vlb is used in transf. 11173 * x'_j := (bu_j * zu_j + du_j) - x_j, x_j == (bu_j * zu_j + du_j) - x'_j, a'_j == -a_j, if vub is used in transf. 11174 * move the constant terms "a_j * dl_j" or "a_j * du_j" to the rhs, and update the coefficient of the VLB variable: 11178 SCIP_CALL( transformMIRRow(set, stat, prob, sol, boundswitch, usevbds, allowlocal, fixintegralrhs, boundsfortrans, 11179 boundtypesfortrans, minfrac, maxfrac, mircoef, &rhs, varused, varinds, &nvarinds, varsign, boundtype, 11194 /* Calculate fractionalities f_0 := b - down(b), f_j := a'_j - down(a'_j) , and derive MIR cut 11204 * x'_j := x_j - lb_j, x_j == x'_j + lb_j, a'_j == a_j, a^_j := a~_j, if lb was used in transformation 11205 * x'_j := ub_j - x_j, x_j == ub_j - x'_j, a'_j == -a_j, a^_j := -a~_j, if ub was used in transformation 11212 * x'_j := x_j - (bl_j * zl_j + dl_j), x_j == x'_j + (bl_j * zl_j + dl_j), a'_j == a_j, a^_j := a~_j, (vlb) 11213 * x'_j := (bu_j * zu_j + du_j) - x_j, x_j == (bu_j * zu_j + du_j) - x'_j, a'_j == -a_j, a^_j := -a~_j, (vub) 11238 * The coefficient of the slack variable s_r is equal to the row's weight times the slack's sign, because the slack 11242 * Depending on the slacks type (integral or continuous), its coefficient in the cut calculates as follows: 11254 /* remove again all nearly-zero coefficients from MIR row and relax the right hand side correspondingly in order to 11273 /**@todo pass the sparsity pattern to the calling method in order to speed up the calling method's loops */ 11278 /** builds a weighted sum of rows, and decides whether to use the left or right hand side of the rows in summation */ 11286 SCIP_Bool allowlocal, /**< should local rows be included, resulting in a locally valid summation? */ 11288 SCIP_Real maxweightrange, /**< maximal valid range max(|weights|)/min(|weights|) of row weights */ 11289 SCIP_Real* strongcgcoef, /**< array to store strong CG coefficients: must be of size prob->nvars */ 11292 SCIP_Bool* varused, /**< array to flag variables that appear in the MIR constraint; size prob->nvars */ 11293 int* varinds, /**< array to store sparsity pattern of non-zero MIR coefficients; size prob->nvars */ 11299 SCIP_Bool* rowtoolong, /**< pointer to store whether the aggregated row is too long and thus invalid */ 11389 if( SCIPsetIsInfinity(set, row->rhs) || (!SCIPsetIsInfinity(set, -row->lhs) && weight < 0.0) ) 11412 addRowToAggregation(set, strongcgcoef, strongcgrhs, slacksign, varused, varinds, nvarinds, row, weight, uselhs); 11418 SCIPdebugMessage("strong CG: %d: row <%s>, lhs = %g, rhs = %g, scale = %g, weight = %g, slacksign = %d -> rhs = %g\n", 11429 /* remove row from sparsity pattern, do not increase i, since the i-th position is filled with the last element */ 11449 /** Transform equation \f$ a*x == b \f$, \f$ lb <= x <= ub \f$ into standard form \f$ a^\prime*x^\prime == b\f$, \f$ 0 <= x^\prime <= ub^\prime \f$. 11454 * x^\prime_j := x_j - lb_j,& x_j == x^\prime_j + lb_j,& a^\prime_j == a_j,& \mbox{if lb is used in transformation} \\ 11455 * x^\prime_j := ub_j - x_j,& x_j == ub_j - x^\prime_j,& a^\prime_j == -a_j,& \mbox{if ub is used in transformation} 11463 * x^\prime_j := x_j - (bl_j * zl_j + dl_j),& x_j == x^\prime_j + (bl_j * zl_j + dl_j),& a^\prime_j == a_j,& \mbox{if vlb is used in transf.} \\ 11464 * x^\prime_j := (bu_j * zu_j + du_j) - x_j,& x_j == (bu_j * zu_j + du_j) - x^\prime_j,& a^\prime_j == -a_j,& \mbox{if vub is used in transf.} 11467 * move the constant terms \f$ a_j * dl_j \f$ or \f$ a_j * du_j \f$ to the rhs, and update the coefficient of the VLB variable: 11480 SCIP_Real boundswitch, /**< fraction of domain up to which lower bound is used in transformation */ 11482 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 11491 SCIP_Bool* freevariable, /**< stores whether a free variable was found in strong CG row -> invalid summation */ 11492 SCIP_Bool* localbdsused /**< pointer to store whether local bounds were used in transformation */ 11520 /* start with continuous variables, because using variable bounds can affect the untransformed integral 11521 * variables, and these changes have to be incorporated in the transformation of the integral variables 11562 /* find closest lower bound in standard lower bound (and variable lower bounds for continuous variables) */ 11590 /* find closest upper bound in standard upper bound (and variable upper bounds for continuous variables) */ 11741 SCIPdebugMessage("strong CG var <%s>: varsign=%d, boundtype=%d, strongcgcoef=%g, lb=%g, ub=%g -> rhs=%g\n", 11742 SCIPvarGetName(var), varsign[v], boundtype[v], strongcgcoef[v], bestlb, bestub, *strongcgrhs); 11748 /** Calculate fractionalities \f$ f_0 := b - down(b) \f$, \f$ f_j := a^\prime_j - down(a^\prime_j) \f$ and 11749 * integer \f$ k >= 1 \f$ with \f$ 1/(k + 1) <= f_0 < 1/k \f$ and \f$ (=> k = up(1/f_0) + 1) \f$ 11750 * integer \f$ 1 <= p_j <= k \f$ with \f$ f_0 + ((p_j - 1) * (1 - f_0)/k) < f_j <= f_0 + (p_j * (1 - f_0)/k)\f$ \f$ (=> p_j = up( k*(f_j - f_0)/(1 - f_0) )) \f$ 11766 * x^\prime_j := x_j - lb_j,& x_j == x^\prime_j + lb_j,& a^\prime_j == a_j,& \hat{a}_j := \tilde{a}_j,& \mbox{if lb was used in transformation} \\ 11767 * x^\prime_j := ub_j - x_j,& x_j == ub_j - x^\prime_j,& a^\prime_j == -a_j,& \hat{a}_j := -\tilde{a}_j,& \mbox{if ub was used in transformation} 11782 * x^\prime_j := x_j - (bl_j * zl_j + dl_j),& x_j == x^\prime_j + (bl_j * zl_j + dl_j),& a^\prime_j == a_j,& \hat{a}_j := \tilde{a}_j,& \mbox{(vlb)} \\ 11783 * x^\prime_j := (bu_j * zu_j + du_j) - x_j,& x_j == (bu_j * zu_j + du_j) - x^\prime_j,& a^\prime_j == -a_j,& \hat{a}_j := -\tilde{a}_j,& \mbox{(vub)} 11796 * \hat{a}_{zl_j} := \hat{a}_{zl_j} - \tilde{a}_j * bl_j == \hat{a}_{zl_j} - \hat{a}_j * bl_j,& \mbox{or} \\ 11797 * \hat{a}_{zu_j} := \hat{a}_{zu_j} + \tilde{a}_j * bu_j == \hat{a}_{zu_j} - \hat{a}_j * bu_j & 11811 int* boundtype, /**< stores the bound used for transformed variable (vlb/vub_idx or -1 for lb/ub)*/ 11832 /* start with integer variables, since the variable bound substitutions can add up to the integer cut coefficients; 11878 assert(pj >= 0); /* should be >= 1, but due to rounding bias can be 0 if fj almost equal to f0 */ 11896 /* move the constant term -a~_j * lb_j == -a^_j * lb_j , or a~_j * ub_j == -a^_j * ub_j to the rhs */ 11937 /* in a strong CG cut, cut coefficients of continuous variables are always zero; check this in debug mode */ 11965 * The coefficient of the slack variable s_r is equal to the row's weight times the slack's sign, because the slack 11966 * variable only appears in its own row: \f$ a^\prime_r = scale * weight[r] * slacksign[r] \f$. 11968 * Depending on the slacks type (integral or continuous), its coefficient in the cut calculates as follows: 11978 * Substitute \f$ \hat{a}_r * s_r \f$ by adding \f$ \hat{a}_r \f$ times the slack's definition to the cut. 12055 assert(pr >= 0); /* should be >= 1, but due to rounding bias can be 0 if fr almost equal to f0 */ 12102 /* a*x + c + s == rhs => s == - a*x - c + rhs: move a^_r * (rhs - c) to the right hand side */ 12133 /* calculates a strong CG cut out of the weighted sum of LP rows; The weights of modifiable rows are set to 0.0, because 12141 SCIP_Real boundswitch, /**< fraction of domain up to which lower bound is used in transformation */ 12143 SCIP_Bool allowlocal, /**< should local information allowed to be used, resulting in a local cut? */ 12145 SCIP_Real maxweightrange, /**< maximal valid range max(|weights|)/min(|weights|) of row weights */ 12156 SCIP_Bool* success, /**< pointer to store whether the returned coefficients are a valid strong CG cut */ 12157 SCIP_Bool* cutislocal, /**< pointer to store whether the returned cut is only valid locally */ 12214 maxmksetcoefs, maxweightrange, strongcgcoef, &rhs, slacksign, varused, varinds, &nvarinds, rowinds, &nrowinds, 12222 /* remove all nearly-zero coefficients from strong CG row and relaxes the right hand side correspondingly in order to 12237 * x'_j := x_j - (bl_j * zl_j + dl_j), x_j == x'_j + (bl_j * zl_j + dl_j), a'_j == a_j, if vlb is used in transf. 12238 * x'_j := (bu_j * zu_j + du_j) - x_j, x_j == (bu_j * zu_j + du_j) - x'_j, a'_j == -a_j, if vub is used in transf. 12239 * move the constant terms "a_j * dl_j" or "a_j * du_j" to the rhs, and update the coefficient of the VLB variable: 12244 strongcgcoef, &rhs, varused, varinds, &nvarinds, varsign, boundtype, &freevariable, &localbdsused); 12255 * - integer 1 <= p_j <= k with f_0 + ((p_j - 1) * (1 - f_0)/k) < f_j <= f_0 + (p_j * (1 - f_0)/k) 12267 * x'_j := x_j - lb_j, x_j == x'_j + lb_j, a'_j == a_j, a^_j := a~_j, if lb was used in transformation 12268 * x'_j := ub_j - x_j, x_j == ub_j - x'_j, a'_j == -a_j, a^_j := -a~_j, if ub was used in transformation 12275 * x'_j := x_j - (bl_j * zl_j + dl_j), x_j == x'_j + (bl_j * zl_j + dl_j), a'_j == a_j, a^_j := a~_j, (vlb) 12276 * x'_j := (bu_j * zu_j + du_j) - x_j, x_j == (bu_j * zu_j + du_j) - x'_j, a'_j == -a_j, a^_j := -a~_j, (vub) 12291 roundStrongCGRow(set, prob, strongcgcoef, strongcgrhs, varused, varinds, &nvarinds, varsign, boundtype, f0, k); 12296 * The coefficient of the slack variable s_r is equal to the row's weight times the slack's sign, because the slack 12300 * Depending on the slacks type (integral or continuous), its coefficient in the cut calculates as follows: 12312 /* remove again all nearly-zero coefficients from strong CG row and relax the right hand side correspondingly in order to 12391 /* @todo: setting feasibility to TRUE might be wrong because in probing mode, the state is even saved when the LP was 12485 SCIPdebugMessage("setting LP upper objective limit from %g to %g\n", lp->cutoffbound, cutoffbound); 12487 /* if the objective function was changed in diving, the cutoff bound has no meaning (it will be set correctly 12496 /* if the cutoff bound is increased, and the LP was proved to exceed the old cutoff, it is no longer solved */ 12504 /* if the cutoff bound is decreased below the current optimal value, the LP now exceeds the objective limit; 12505 * if the objective limit in the LP solver was disabled, the solution status of the LP is not changed 12543 /** calls LPI to perform primal simplex, measures time and counts iterations, gets basis feasibility status */ 12550 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 12564 SCIPdebugMessage("solving LP %" SCIP_LONGINT_FORMAT " (%d cols, %d rows) with primal simplex (diving=%d, nprimallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 12565 stat->lpcount+1, lp->ncols, lp->nrows, lp->diving || lp->probing, stat->nprimallps, stat->ndivinglps); 12573 (void) SCIPsnprintf(fname, SCIP_MAXSTRLEN, "lp%" SCIP_LONGINT_FORMAT "_%" SCIP_LONGINT_FORMAT ".lp", stat->nnodes, stat->lpcount); 12575 SCIPmessagePrintInfo("wrote LP to file <%s> (primal simplex, uobjlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n", 12602 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") primal simplex solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 12678 SCIPdebugMessage("solved LP %" SCIP_LONGINT_FORMAT " with primal simplex (diving=%d, nprimallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 12691 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 12705 SCIPdebugMessage("solving LP %" SCIP_LONGINT_FORMAT " (%d cols, %d rows) with dual simplex (diving=%d, nduallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 12706 stat->lpcount+1, lp->ncols, lp->nrows, lp->diving || lp->probing, stat->nduallps, stat->ndivinglps); 12714 (void) SCIPsnprintf(fname, SCIP_MAXSTRLEN, "lp%" SCIP_LONGINT_FORMAT "_%" SCIP_LONGINT_FORMAT ".lp", stat->nnodes, stat->lpcount); 12716 SCIPmessagePrintInfo("wrote LP to file <%s> (dual simplex, uobjlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n", 12743 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") dual simplex solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 12819 SCIPdebugMessage("solved LP %" SCIP_LONGINT_FORMAT " with dual simplex (diving=%d, nduallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 12825 /** calls LPI to perform lexicographic dual simplex to find a lexicographically minimal optimal solution, measures time and counts iterations 12834 * We do, however, not aim for the exact lexicographically minimal optimal solutions, but perform a 12837 * More precisely, we first solve the problem with the dual simplex algorithm. Then we fix those 12839 * variables) that have nonzero reduced cost. This fixes the objective function value, because only 12842 * Then the not yet fixed variables are considered in turn. If they are at their lower bounds and 12843 * nonbasic, they are fixed to this bound, since their value cannot be decreased further. Once a 12844 * candidate is found, we set the objective to minimize this variable. We run the primal simplex 12846 * variables out of the basis have been fixed to their lower bound, the basis is also not primal 12847 * feasible anymore). After the optimization, we again fix nonbasic variables that have nonzero 12854 * @todo Can we skip the consideration of basic variables that are at their lower bound? How can we 12855 * guarantee that these variables will not be changed in later stages? We can fix these variables 12865 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 12882 SCIPdebugMessage("solving LP %" SCIP_LONGINT_FORMAT " (%d cols, %d rows) with lex dual simplex (diving=%d, nduallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 12883 stat->lpcount+1, lp->ncols, lp->nrows, lp->diving || lp->probing, stat->nduallps, stat->ndivinglps); 12908 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") dual simplex solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 13147 /* check columns: find first candidate (either basic or nonbasic and zero reduced cost) and fix variables */ 13274 /* solve with primal simplex, because we are primal feasible, but not necessarily dual feasible */ 13279 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") in lex-dual: primal simplex solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 13357 while( pos >= 0 && nDualDeg > 0 && (set->lp_lexdualmaxrounds == -1 || rounds < set->lp_lexdualmaxrounds) ); 13364 /* resolve to update solvers internal data structures - should only produce few pivots - is this needed? */ 13369 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") dual simplex solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 13433 SCIPdebugMessage("solved LP %" SCIP_LONGINT_FORMAT " with lex dual simplex (diving=%d, nduallps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 13456 /** calls LPI to perform barrier, measures time and counts iterations, gets basis feasibility status */ 13463 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 13477 SCIPdebugMessage("solving LP %" SCIP_LONGINT_FORMAT " (%d cols, %d rows) with barrier%s (diving=%d, nbarrierlps=%" SCIP_LONGINT_FORMAT ", ndivinglps=%" SCIP_LONGINT_FORMAT ")\n", 13478 stat->lpcount+1, lp->ncols, lp->nrows, crossover ? "/crossover" : "", lp->diving || lp->probing, 13487 (void) SCIPsnprintf(fname, SCIP_MAXSTRLEN, "lp%" SCIP_LONGINT_FORMAT "_%" SCIP_LONGINT_FORMAT ".lp", stat->nnodes, stat->lpcount); 13489 SCIPmessagePrintInfo("wrote LP to file <%s> (barrier, uobjlim=%.15g, feastol=%.15g/%.15g, convtol=%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n", 13516 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") barrier solving error in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 13587 SCIPdebugMessage("solved LP %" SCIP_LONGINT_FORMAT " with barrier%s (diving=%d, nduallps=%" SCIP_LONGINT_FORMAT ", nbarrierlps=%" SCIP_LONGINT_FORMAT ")\n", 13588 stat->lpcount, crossover ? "/crossover" : "", lp->diving || lp->probing, stat->nbarrierlps, stat->ndivinglps); 13601 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 13629 SCIPdebugMessage("calling LP algorithm <%s> with a time limit of %f seconds\n", lpalgoName(lpalgo), lptimelimit); 13640 if( set->lp_lexdualalgo && (!set->lp_lexdualrootonly || stat->maxdepth == 0) && (!set->lp_lexdualstalling || lp->installing) ) 13668 SCIPdebugMessage("LP feasibility: primalfeasible=%u, dualfeasible=%u\n", lp->primalfeasible, lp->dualfeasible); 13684 int itlim, /**< maximal number of LP iterations to perform in first LP calls (before solving from scratch), or -1 for no limit */ 13685 int harditlim, /**< maximal number of LP iterations to perform (hard limit for all LP calls), or -1 for no limit */ 13690 SCIP_Bool fromscratch, /**< should the LP be solved from scratch without using current basis? */ 13691 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 13711 /**@todo implement solving the LP when loose variables with infinite best bound are present; for this, we need to 13712 * solve with deactivated objective limit in order to determine whether we are (a) infeasible or (b) feasible 13713 * and hence unbounded; to handle case (b) we need to store an array of loose variables with best bound in 13718 SCIPerrorMessage("cannot solve LP when loose variable with infinite best bound is present\n"); 13738 SCIP_CALL( lpSetFeastol(lp, tightprimfeastol ? FEASTOLTIGHTFAC * SCIPsetLpfeastol(set) : SCIPsetLpfeastol(set), &success) ); 13739 SCIP_CALL( lpSetDualfeastol(lp, tightdualfeastol ? FEASTOLTIGHTFAC * SCIPsetDualfeastol(set) : SCIPsetDualfeastol(set), 13741 SCIP_CALL( lpSetBarrierconvtol(lp, (tightprimfeastol || tightdualfeastol) ? FEASTOLTIGHTFAC * SCIPsetBarrierconvtol(set) 13756 /* check for stability; iteration limit exceeded is also treated like instability if the iteration limit is soft */ 13757 if( *timelimit || (!(*lperror) && SCIPlpiIsStable(lp->lpi) && (itlimishard || !SCIPlpiIsIterlimExc(lp->lpi))) ) 13765 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13771 /* In the following, whenever the LP iteration limit is exceeded in an LP solving call, we leave out the 13772 * remaining resolving calls with changed settings and go directly to solving the LP from scratch. 13775 /* if FASTMIP is turned on, solve again without FASTMIP (starts from the solution of the last LP solving call); 13784 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again with %s without FASTMIP\n", 13789 if( *timelimit || (!(*lperror) && SCIPlpiIsStable(lp->lpi) && (itlimishard || !SCIPlpiIsIterlimExc(lp->lpi))) ) 13797 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13805 /* if the iteration limit was exceeded in the last LP solving call, we leave out the remaining resolving calls with changed settings 13810 /* solve again with opposite scaling setting (starts from the solution of the last LP solving call) */ 13815 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again with %s %s scaling\n", 13820 if( *timelimit || (!(*lperror) && SCIPlpiIsStable(lp->lpi) && (itlimishard || !SCIPlpiIsIterlimExc(lp->lpi))) ) 13828 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13840 /* if the iteration limit was exceeded in the last LP solving call, we leave out the remaining resolving calls with changed settings 13845 /* solve again with opposite presolving setting (starts from the solution of the last LP solving call) */ 13850 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again with %s %s presolving\n", 13855 if( *timelimit || (!(*lperror) && SCIPlpiIsStable(lp->lpi) && (itlimishard || !SCIPlpiIsIterlimExc(lp->lpi))) ) 13863 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13875 /* solve again with a tighter feasibility tolerance (starts from the solution of the last LP solving call); 13878 if( ((simplex && (!tightprimfeastol || !tightdualfeastol)) || (!tightprimfeastol && !tightdualfeastol)) && 13896 SCIP_CALL( lpSetBarrierconvtol(lp, FEASTOLTIGHTFAC * SCIPsetBarrierconvtol(set), &success3) ); 13902 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again with %s with tighter primal and dual feasibility tolerance\n", 13907 if( *timelimit || (!(*lperror) && SCIPlpiIsStable(lp->lpi) && (itlimishard || !SCIPlpiIsIterlimExc(lp->lpi))) ) 13915 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13937 /* all LPs solved after this point are solved from scratch, so set the LP iteration limit to the hard limit; 13948 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again from scratch with %s\n", 13961 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13972 lpalgo = (lpalgo == SCIP_LPALGO_PRIMALSIMPLEX ? SCIP_LPALGO_DUALSIMPLEX : SCIP_LPALGO_PRIMALSIMPLEX); 13974 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again from scratch with %s\n", 13987 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 13998 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again from scratch with %s %s scaling\n", 14011 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 14027 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again from scratch with %s %s presolving\n", 14040 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 14069 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- solve again from scratch with %s with tighter feasibility tolerance\n", 14082 "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in LP %" SCIP_LONGINT_FORMAT " -- ignoring instability of %s\n", 14102 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH, "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT "\n", 14120 if( SCIPsetIsInfinity(set, lp->lpobjval) && lp->lpobjval != SCIPsetInfinity(set) ) /*lint !e777*/ 14129 else if( SCIPsetIsInfinity(set, -lp->lpobjval) && lp->lpobjval != -SCIPsetInfinity(set) ) /*lint !e777*/ 14149 int resolveitlim, /**< maximal number of LP iterations to perform in resolving calls, or -1 for no limit */ 14150 int harditlim, /**< maximal number of LP iterations to perform (hard limit for all LP calls), or -1 for no limit */ 14157 SCIP_Bool fromscratch, /**< should the LP be solved from scratch without using current basis? */ 14158 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 14184 SCIP_CALL( lpSolveStable(lp, set, messagehdlr, stat, prob, lpalgo, itlim, harditlim, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, 14210 assert(!(SCIPlpiIsOptimal(lp->lpi) && SCIPlpiIsObjlimExc(lp->lpi) && SCIPlpiIsPrimalInfeasible(lp->lpi) && 14211 SCIPlpiExistsPrimalRay(lp->lpi) && SCIPlpiIsIterlimExc(lp->lpi) && SCIPlpiIsTimelimExc(lp->lpi))); 14222 if( !SCIPsetIsInfinity(set, lp->lpiuobjlim) && SCIPsetIsGE(set, lp->lpobjval, lp->lpiuobjlim) ) 14224 /* the solver may return the optimal value, even if this is greater or equal than the upper bound */ 14225 SCIPdebugMessage("optimal solution %.15g exceeds objective limit %.15g\n", lp->lpobjval, lp->lpiuobjlim); 14229 /* if we did not disable the cutoff bound in the LP solver, the LP solution status should be objective limit 14232 assert(lpCutoffDisabled(set) || lp->lpsolstat == SCIP_LPSOLSTAT_OBJLIMIT || SCIPsetIsInfinity(set, lp->cutoffbound) 14243 /* because of numerical instability lpalgo != lp->lastlpalgo might happen - hence, we have to check both */ 14244 if( needdualray && !SCIPlpiHasDualRay(lp->lpi) && !solveddual && lpalgo != SCIP_LPALGO_DUALSIMPLEX ) 14255 /* because of numerical instability lpalgo != lp->lastlpalgo might happen - hence, we have to check both */ 14256 if( needprimalray && !SCIPlpiHasPrimalRay(lp->lpi) && !solvedprimal && lpalgo != SCIP_LPALGO_PRIMALSIMPLEX ) 14281 "(node %" SCIP_LONGINT_FORMAT ") solution status of LP %" SCIP_LONGINT_FORMAT " could not be proven (internal status:%d) -- solve again with %s\n", 14290 "(node %" SCIP_LONGINT_FORMAT ") solution status of LP %" SCIP_LONGINT_FORMAT " could not be proven (internal status:%d) -- solve again with %s\n", 14296 SCIPerrorMessage("(node %" SCIP_LONGINT_FORMAT ") error or unknown return status of %s in LP %" SCIP_LONGINT_FORMAT " (internal status: %d)\n", 14304 SCIPdebugMessage("solving LP with %s returned solstat=%d (internal status: %d, primalfeasible=%u, dualfeasible=%u)\n", 14311 /** flushes the LP and solves it with the primal or dual simplex algorithm, depending on the current basis feasibility */ 14321 int resolveitlim, /**< maximal number of LP iterations to perform in resolving calls, or -1 for no limit */ 14322 int harditlim, /**< maximal number of LP iterations to perform (hard limit for all LP calls), or -1 for no limit */ 14328 SCIP_Bool fromscratch, /**< should the LP be solved from scratch without using current basis? */ 14329 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 14342 fastmip = ((!lp->flushaddedcols && !lp->flushdeletedcols) ? fastmip : 0); /* turn off FASTMIP if columns were changed */ 14355 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_DUALSIMPLEX, resolveitlim, harditlim, needprimalray, 14356 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14361 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_PRIMALSIMPLEX, resolveitlim, harditlim, needprimalray, 14362 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14368 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_PRIMALSIMPLEX, resolveitlim, harditlim, needprimalray, 14369 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14374 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_DUALSIMPLEX, resolveitlim, harditlim, needprimalray, 14375 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14380 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_BARRIER, resolveitlim, harditlim, needprimalray, 14381 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14386 SCIP_CALL( lpSolve(lp, set, messagehdlr, stat, prob, SCIP_LPALGO_BARRIERCROSSOVER, resolveitlim, harditlim, needprimalray, 14387 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14417 assert(SCIPsetIsInfinity(set, -col->lazylb) || SCIPsetIsFeasGE(set, col->primsol, col->lazylb)); 14418 assert(SCIPsetIsInfinity(set, col->lazyub) || SCIPsetIsFeasLE(set, col->primsol, col->lazyub)); 14425 /** marks all lazy columns to be changed; this is needed for reloading/removing bounds of these columns before and after 14445 SCIPdebugMessage("mark all lazy columns as changed in order to reload bounds (diving=%u, applied=%u)\n", 14481 /* update lp->divinglazyapplied flag: if we are in diving mode, we just applied the lazy bounds, 14500 /* set itlim to INT_MAX if it is -1 to reduce the number of cases to be regarded in the following */ 14503 /* return resolveiterfac * average iteration number per call after root, but at least resolveitermin and at most the hard iteration limit */ 14505 (set->lp_resolveiterfac * (stat->nlpiterations - stat->nrootlpiterations) / (SCIP_Real)(stat->nlps - stat->nrootlps)))); 14524 SCIP_Bool keepsol, /**< should the old LP solution be kept if no iterations were performed? */ 14539 SCIPdebugMessage("solving LP: %d rows, %d cols, primalfeasible=%u, dualfeasible=%u, solved=%u, diving=%u, probing=%u, cutoffbnd=%g\n", 14540 lp->nrows, lp->ncols, lp->primalfeasible, lp->dualfeasible, lp->solved, lp->diving, lp->probing, lp->cutoffbound); 14550 /* compute the limit for the number of LP resolving iterations, if needed (i.e. if limitresolveiters == TRUE) */ 14555 /* if there are lazy bounds, check whether the bounds should explicitly be put into the LP (diving was started) 14560 /* @todo avoid loosing primal feasibility here after changing the objective already did destroy dual feasibility; 14571 /* if the time limit was reached in the last call and the LP did not change, lp->solved is set to TRUE, but we want 14574 if( !lp->solved || (lp->lpsolstat == SCIP_LPSOLSTAT_TIMELIMIT && stat->status != SCIP_STATUS_TIMELIMIT) ) 14589 fastmip = ((lp->lpihasfastmip && !lp->flushaddedcols && !lp->flushdeletedcols && stat->nnodes > 1) ? set->lp_fastmip : 0); 14600 SCIP_CALL( lpFlushAndSolve(lp, blkmem, set, messagehdlr, stat, prob, eventqueue, resolveitlim, harditlim, needprimalray, 14602 SCIPdebugMessage("lpFlushAndSolve() returned solstat %d (error=%u)\n", SCIPlpGetSolstat(lp), *lperror); 14651 SCIPdebugMessage("removed obsoletes - resolve LP again: %d rows, %d cols\n", lp->nrows, lp->ncols); 14658 SCIP_Bool simplex = (lp->lastlpalgo == SCIP_LPALGO_PRIMALSIMPLEX || lp->lastlpalgo == SCIP_LPALGO_DUALSIMPLEX); 14662 /* solution is infeasible (this can happen due to numerical problems): solve again without FASTMIP */ 14664 "(node %" SCIP_LONGINT_FORMAT ") solution of LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, dfeas=%d) -- solving again without FASTMIP\n", 14671 /* solution is infeasible (this can happen due to numerical problems): solve again with tighter feasibility 14675 "(node %" SCIP_LONGINT_FORMAT ") solution of LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, dfeas=%d) -- solving again with tighter feasibility tolerance\n", 14683 /* solution is infeasible (this can happen due to numerical problems): solve again from scratch */ 14685 "(node %" SCIP_LONGINT_FORMAT ") solution of LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, dfeas=%d) -- solving again from scratch\n", 14693 "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 14700 lp->lpobjval, getFiniteLooseObjval(lp, set, prob), lp->lpobjval + getFiniteLooseObjval(lp, set, prob), 14712 /* it might happen that we have no infeasibility proof for the current LP (e.g. if the LP was always solved 14718 "(node %" SCIP_LONGINT_FORMAT ") infeasibility of LP %" SCIP_LONGINT_FORMAT " could not be proven by dual ray\n", stat->nnodes, stat->nlps); 14749 SCIP_Bool simplex = (lp->lastlpalgo == SCIP_LPALGO_PRIMALSIMPLEX || lp->lastlpalgo == SCIP_LPALGO_DUALSIMPLEX); 14753 /* unbounded solution is infeasible (this can happen due to numerical problems): solve again without FASTMIP */ 14755 "(node %" SCIP_LONGINT_FORMAT ") solution of unbounded LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, rfeas=%d) -- solving again without FASTMIP\n", 14762 /* unbounded solution is infeasible (this can happen due to numerical problems): solve again with tighter feasibility 14766 "(node %" SCIP_LONGINT_FORMAT ") solution of unbounded LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, rfeas=%d) -- solving again with tighter primal feasibility tolerance\n", 14773 /* unbounded solution is infeasible (this can happen due to numerical problems): solve again from scratch */ 14775 "(node %" SCIP_LONGINT_FORMAT ") solution of unbounded LP %" SCIP_LONGINT_FORMAT " not optimal (pfeas=%d, rfeas=%d) -- solving again from scratch\n", 14782 /* unbounded solution is infeasible (this can happen due to numerical problems) and nothing helped: 14786 "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles in unbounded LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 14797 /* if we do branch-and-price, make sure that a dual feasible solution exists, that exceeds the objective limit; 14798 * With FASTMIP setting, CPLEX does not apply the final pivot to reach the dual solution exceeding the objective 14799 * limit. Therefore, we have to either turn off FASTMIP and resolve the problem or continue solving it without 14800 * objective limit for at least one iteration. We first try to continue with FASTMIP for one additional simplex 14801 * iteration using the steepest edge pricing rule. If this does not fix the problem, we temporarily disable 14812 /* actually, SCIPsetIsGE(set, lp->lpobjval, lp->lpiuobjlim) should hold, but we are a bit less strict in 14815 assert(SCIPlpiIsObjlimExc(lpi) || !SCIPsetIsFeasNegative(set, lp->lpobjval - lp->lpiuobjlim)); 14819 /* do one additional simplex step if the computed dual solution doesn't exceed the objective limit */ 14826 SCIPdebugMessage("objval = %f < %f = lp->lpiuobjlim, but status objlimit\n", objval, lp->lpiuobjlim); 14828 /* we want to resolve from the current basis (also if the LP had to be solved from scratch) */ 14841 FALSE, FALSE, TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14859 /* disable fastmip for subsequent LP calls (if objective limit is not yet exceeded or LP solution is infeasible) */ 14871 FALSE, FALSE, TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, keepsol, lperror) ); 14895 /* optimal solution / objlimit with fastmip turned off / itlimit or timelimit, but objlimit exceeded */ 14920 /* in debug mode, check that lazy bounds (if present) are not violated by an optimal LP solution */ 14936 /* LP solution is not feasible or objective limit was reached without the LP value really exceeding 14944 "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 14951 lp->lpobjval, getFiniteLooseObjval(lp, set, prob), lp->lpobjval + getFiniteLooseObjval(lp, set, prob), 14991 "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles in unbounded LP %" SCIP_LONGINT_FORMAT "\n", stat->nnodes, stat->nlps); 15026 SCIPmessagePrintWarning(messagehdlr, "LP solver reached time limit, but SCIP time limit is not exceeded yet; " 15047 /* if the LP had to be solved from scratch, we have to reset this flag since it is stored in the LPI; otherwise it 15053 SCIPdebugMessage("resetting parameter SCIP_LPPARAM_FROMSCRATCH to FALSE %s\n", success ? "" : "failed"); 15072 * @note This method returns the objective value of the current LP solution, which might be primal or dual infeasible 15073 * if a limit was hit during solving. It must not be used as a dual bound if the LP solution status is 15224 /** gets the global pseudo objective value; that is all variables set to their best (w.r.t. the objective function) 15245 /* if the global pseudo objective value is smaller than -infinity, we just return -infinity */ 15253 /** gets the pseudo objective value for the current search node; that is all variables set to their best (w.r.t. the 15282 /** gets pseudo objective value, if a bound of the given variable would be modified in the given way */ 15320 /** gets pseudo objective value, if a bound of the given variable would be modified in the given way; 15525 assert(SCIPsetIsPositive(set, obj)); /* we only need to update if the objective is positive */ 15566 assert(SCIPsetIsNegative(set, obj)); /* we only need to update if the objective is negative */ 15593 /** updates current pseudo and loose objective values for a change in a variable's objective value or bounds */ 15628 /* after changing a local bound on a LOOSE variable, we have to update the loose objective value, too */ 15673 /** updates current pseudo and loose objective values for a change in a variable's objective value or bounds; 15707 if( SCIPvarGetStatus(var) != SCIP_VARSTATUS_LOOSE && SCIPvarGetStatus(var) != SCIP_VARSTATUS_COLUMN ) 15728 SCIPintervalSub(SCIPsetInfinity(set), &deltaval, deltaval, prod); /* deltaval -= oldlb * oldobj; */ 15740 SCIPintervalSub(SCIPsetInfinity(set), &deltaval, deltaval, prod); /* deltaval -= oldub * oldobj; */ 15754 SCIPintervalAdd(SCIPsetInfinity(set), &deltaval, deltaval, prod); /* deltaval += newlb * newobj; */ 15766 SCIPintervalAdd(SCIPsetInfinity(set), &deltaval, deltaval, prod); /* deltaval += newub * newobj; */ 15789 /** updates current pseudo and loose objective value for a change in a variable's objective value */ 15805 SCIP_CALL( lpUpdateVarProved(lp, set, var, oldobj, SCIPvarGetLbLocal(var), SCIPvarGetUbLocal(var), 15816 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN); 15819 /* the objective coefficient can only be changed during presolving, that implies that the global and local 15826 getObjvalDeltaObj(set, oldobj, newobj, SCIPvarGetLbLocal(var), SCIPvarGetUbLocal(var), &deltaval, &deltainf); 15832 getObjvalDeltaObj(set, oldobj, newobj, SCIPvarGetLbGlobal(var), SCIPvarGetUbGlobal(var), &deltaval, &deltainf); 15843 /** updates current root pseudo objective value for a global change in a variable's lower bound */ 15871 /** updates current pseudo and loose objective value for a change in a variable's lower bound */ 15898 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN); 15912 /** updates current root pseudo objective value for a global change in a variable's upper bound */ 15966 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN); 15988 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN); 16009 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN); 16107 SCIPintervalSub(SCIPsetInfinity(set), &loose, loose, prod); /* lp->looseobjval -= lb * obj; */ 16120 SCIPintervalSub(SCIPsetInfinity(set), &loose, loose, prod); /* lp->looseobjval -= ub * obj; */ 16125 /* get rid of numerical problems: set loose objective value explicitly to zero, if no loose variables remain */ 16238 SCIPintervalAdd(SCIPsetInfinity(set), &loose, loose, prod); /* lp->looseobjval += lb * obj; */ 16251 SCIPintervalAdd(SCIPsetInfinity(set), &loose, loose, prod); /* lp->looseobjval += ub * obj; */ 16292 /* get rid of numerical problems: set loose objective value explicitly to zero, if no loose variables remain */ 16305 SCIP_Bool* primalfeasible, /**< pointer to store whether the solution is primal feasible, or NULL */ 16306 SCIP_Bool* dualfeasible /**< pointer to store whether the solution is dual feasible, or NULL */ 16334 /* initialize return and feasibility flags; if primal oder dual feasibility shall not be checked, we set the 16401 (SCIPsetIsInfinity(set, -lpicols[c]->lb) || !SCIPsetIsFeasNegative(set, lpicols[c]->primsol - lpicols[c]->lb)) 16402 && (SCIPsetIsInfinity(set, lpicols[c]->ub) || !SCIPsetIsFeasPositive(set, lpicols[c]->primsol - lpicols[c]->ub)); 16409 /* complementary slackness in barrier solutions is measured as product of primal slack and dual multiplier; 16410 * we use a slack of at most 1, because otherwise we multiply by something like SCIPinfinty() for unbounded 16424 SCIPdebugMessage(" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n", 16425 SCIPvarGetName(lpicols[c]->var), lpicols[c]->lb, lpicols[c]->ub, lpicols[c]->primsol, lpicols[c]->redcost, 16429 !SCIPsetIsDualfeasPositive(set, MIN((lpicols[c]->primsol - lpicols[c]->lb), 1.0) * lpicols[c]->redcost), 16430 !SCIPsetIsDualfeasNegative(set, MIN((lpicols[c]->ub - lpicols[c]->primsol), 1.0) * lpicols[c]->redcost), 16441 /* complementary slackness means that if a variable is not at its lower or upper bound, its reduced costs 16442 * must be non-positive or non-negative, respectively; in particular, if a variable is strictly within its 16446 && (SCIPsetIsInfinity(set, -lpicols[c]->lb) || SCIPsetIsFeasGT(set, lpicols[c]->primsol, lpicols[c]->lb)) ) 16449 && (SCIPsetIsInfinity(set, lpicols[c]->ub) || SCIPsetIsFeasLT(set, lpicols[c]->primsol, lpicols[c]->ub)) ) 16452 SCIPdebugMessage(" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n", 16453 SCIPvarGetName(lpicols[c]->var), lpicols[c]->lb, lpicols[c]->ub, lpicols[c]->primsol, lpicols[c]->redcost, 16457 !SCIPsetIsFeasGT(set, lpicols[c]->primsol, lpicols[c]->lb) || !SCIPsetIsDualfeasPositive(set, lpicols[c]->redcost), 16458 !SCIPsetIsFeasLT(set, lpicols[c]->primsol, lpicols[c]->ub) || !SCIPsetIsDualfeasNegative(set, lpicols[c]->redcost), 16462 /* we intentionally use an exact positive/negative check because ignoring small reduced cost values may lead to a 16463 * wrong bound value; if the corresponding bound is +/-infinity, we use zero reduced cost (if stilldualfeasible is 16486 (SCIPsetIsInfinity(set,-lpirows[r]->lhs) ||SCIPsetIsFeasGE(set, lpirows[r]->activity, lpirows[r]->lhs)) 16487 && (SCIPsetIsInfinity(set, lpirows[r]->rhs) || SCIPsetIsFeasLE(set, lpirows[r]->activity, lpirows[r]->rhs)); 16493 /* complementary slackness in barrier solutions is measured as product of primal slack and dual multiplier; 16494 * we use a slack of at most 1, because otherwise we multiply by something like SCIPinfinity() for unbounded 16508 SCIPdebugMessage(" row <%s> [%.9g,%.9g]: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n", 16509 lpirows[r]->name, lpirows[r]->lhs, lpirows[r]->rhs, lpirows[r]->activity, lpirows[r]->dualsol, 16513 !SCIPsetIsDualfeasPositive(set, MIN((lpirows[r]->activity - lpirows[r]->lhs), 1.0) * lpirows[r]->dualsol), 16514 !SCIPsetIsDualfeasNegative(set, MIN((lpirows[r]->rhs - lpirows[r]->activity), 1.0) * lpirows[r]->dualsol), 16519 /* complementary slackness means that if the activity of a row is not at its left-hand or right-hand side, 16520 * its dual multiplier must be non-positive or non-negative, respectively; in particular, if the activity is 16524 (SCIPsetIsInfinity(set, -lpirows[r]->lhs) || SCIPsetIsFeasGT(set, lpirows[r]->activity, lpirows[r]->lhs)) ) 16527 (SCIPsetIsInfinity(set,lpirows[r]->rhs) || SCIPsetIsFeasLT(set, lpirows[r]->activity, lpirows[r]->rhs)) ) 16530 SCIPdebugMessage(" row <%s> [%.9g,%.9g] + %.9g: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n", 16531 lpirows[r]->name, lpirows[r]->lhs, lpirows[r]->rhs, lpirows[r]->constant, lpirows[r]->activity, lpirows[r]->dualsol, 16535 !SCIPsetIsFeasGT(set, lpirows[r]->activity, lpirows[r]->lhs) || !SCIPsetIsDualfeasPositive(set, lpirows[r]->dualsol), 16536 !SCIPsetIsFeasLT(set, lpirows[r]->activity, lpirows[r]->rhs) || !SCIPsetIsDualfeasNegative(set, lpirows[r]->dualsol), 16540 /* we intentionally use an exact positive/negative check because ignoring small dual multipliers may lead to a 16541 * wrong bound value; if the corresponding side is +/-infinity, we use a zero dual multiplier (if 16542 * stilldualfeasible is TRUE, we are in the case that the dual multiplier is tiny with wrong sign) 16546 if( lpirows[r]->dualsol > 0.0 && !SCIPsetIsInfinity(set, -(lpirows[r]->lhs - lpirows[r]->constant)) ) 16548 else if( lpirows[r]->dualsol < 0.0 && !SCIPsetIsInfinity(set, lpirows[r]->rhs - lpirows[r]->constant) ) 16553 /* if the objective value returned by the LP solver is smaller than the internally computed primal bound, then we 16554 * declare the solution primal infeasible; we assume primalbound and lp->lpobjval to be equal if they are both +/- 16557 /**@todo alternatively, if otherwise the LP solution is feasible, we could simply update the objective value */ 16558 if( stillprimalfeasible && !(SCIPsetIsInfinity(set, primalbound) && SCIPsetIsInfinity(set, lp->lpobjval)) 16562 SCIPdebugMessage(" primalbound=%.9f, lpbound=%.9g, pfeas=%u(%u)\n", primalbound, lp->lpobjval, 16563 SCIPsetIsFeasLE(set, primalbound, lp->lpobjval), primalfeasible != NULL ? stillprimalfeasible : TRUE); 16566 /* if the objective value returned by the LP solver is smaller than the internally computed dual bound, we declare 16567 * the solution dual infeasible; we assume dualbound and lp->lpobjval to be equal if they are both +/- infinity 16569 /**@todo alternatively, if otherwise the LP solution is feasible, we could simply update the objective value */ 16570 if( stilldualfeasible && !(SCIPsetIsInfinity(set, dualbound) && SCIPsetIsInfinity(set, lp->lpobjval)) 16575 SCIPsetIsFeasGE(set, dualbound, lp->lpobjval), dualfeasible != NULL ? stilldualfeasible : TRUE); 16599 SCIP_Bool* primalfeasible, /**< pointer to store whether the solution is primal feasible, or NULL */ 16600 SCIP_Bool* rayfeasible /**< pointer to store whether the primal ray is a feasible unboundedness proof, or NULL */ 16643 SCIPdebugMessage("getting new unbounded LP solution %" SCIP_LONGINT_FORMAT "\n", stat->lpcount); 16669 /* there should only be a nonzero value in the ray if there is no finite bound in this direction */ 16675 /* check primal feasibility of (finite) primal solution; note that the comparisons ensure that the primal 16752 && (SCIPsetIsInfinity(set, -lpirows[r]->lhs) || SCIPsetIsFeasGE(set, lpirows[r]->activity, lpirows[r]->lhs)) 16753 && (SCIPsetIsInfinity(set, lpirows[r]->rhs) || SCIPsetIsFeasLE(set, lpirows[r]->activity, lpirows[r]->rhs)); 16768 SCIP_Real* ray /**< array for storing primal ray values, they are stored w.r.t. the problem index of the variables, 16900 /** increases age of columns with solution value 0.0 and basic rows with activity not at its bounds, 16953 /*debugMessage(" -> row <%s>: activity=%f, age=%d\n", lpirows[r]->name, lpirows[r]->activity, lpirows[r]->age);*/ 16995 /* mark column to be deleted from the LPI, update column arrays of all linked rows, and update the objective 17109 SCIP_CALL( SCIPeventqueueAdd(eventqueue, blkmem, set, NULL, NULL, NULL, eventfilter, &event) ); 17201 && cols[c]->obsoletenode != stat->nnodes /* don't remove column a second time from same node (avoid cycling), or a first time if marked nonremovable locally */ 17204 && SCIPsetIsZero(set, SCIPcolGetBestBound(cols[c])) ) /* bestbd != 0 -> column would be priced in next time */ 17280 && rows[r]->obsoletenode != stat->nnodes /* don't remove row a second time from same node (avoid cycling), or a first time if marked nonremovable locally */ 17307 /** removes all non-basic columns and basic rows in the part of the LP created at the current node, that are too old */ 17323 SCIPdebugMessage("removing obsolete columns starting with %d/%d, obsolete rows starting with %d/%d\n", 17332 SCIP_CALL( lpRemoveObsoleteRows(lp, blkmem, set, stat, eventqueue, eventfilter, lp->firstnewrow) ); 17413 && SCIPsetIsZero(set, SCIPcolGetBestBound(cols[c])) ) /* bestbd != 0 -> column would be priced in next time */ 17507 /** removes all non-basic columns at 0.0 and basic rows in the part of the LP created at the current node */ 17531 SCIPdebugMessage("removing unused columns starting with %d/%d (%u), unused rows starting with %d/%d (%u), LP algo: %d, basic sol: %u\n", 17532 lp->firstnewcol, lp->ncols, cleanupcols, lp->firstnewrow, lp->nrows, cleanuprows, lp->lastlpalgo, lp->solisbasic); 17570 SCIPdebugMessage("removing all unused columns (%u) and rows (%u), LP algo: %d, basic sol: %u\n", 17743 SCIP_CALL( rowStoreSolVals(lp->rows[r], blkmem, lp->storedsolvals->lpsolstat == SCIP_LPSOLSTAT_INFEASIBLE) ); 17760 /** quits LP diving and resets bounds and objective values of columns to the current node's values */ 17826 /* reload LPI state saved at start of diving and free it afterwards; it may be NULL, in which case simply nothing 17840 /* if the LP was solved before starting the dive, but not to optimality (or unboundedness), then we need to solve the 17841 * LP again to reset the solution (e.g. we do not save the Farkas proof for infeasible LPs, because we assume that we 17842 * are not called in this case, anyway); restoring by solving the LP again in either case can be forced by setting 17844 * restoring an unbounded ray after solve does not seem to work currently (bug 631), so we resolve also in this case 17852 SCIP_CALL( SCIPlpSolveAndEval(lp, set, messagehdlr, blkmem, stat, eventqueue, eventfilter, prob, -1LL, FALSE, FALSE, FALSE, &lperror) ); 17856 "(node %" SCIP_LONGINT_FORMAT ") unresolved numerical troubles while resolving LP %" SCIP_LONGINT_FORMAT " after diving\n", stat->nnodes, stat->nlps); 17869 /* otherwise, we can just reload the buffered LP solution values at start of diving; this has the advantage that we 17870 * are guaranteed to continue with the same LP status as before diving, while in numerically difficult cases, a 17881 /* @todo avoid loosing primal feasibility here after changing the objective already did destroy dual feasibility; 17891 /* increment lp counter to ensure that we do not use solution values from the last solved diving lp */ 17908 SCIP_CALL( colRestoreSolVals(lp->cols[c], blkmem, stat->lpcount, set->lp_freesolvalbuffers) ); 17912 SCIP_CALL( rowRestoreSolVals(lp->rows[r], blkmem, stat->lpcount, set->lp_freesolvalbuffers, lp->storedsolvals->lpsolstat == SCIP_LPSOLSTAT_INFEASIBLE) ); 18024 * Calculating this value in interval arithmetics gives a proved lower LP bound for the following reason (assuming, 18036 SCIP_Bool usefarkas, /**< use y = dual Farkas and c = 0 instead of y = dual solution and c = obj? */ 18171 SCIPdebugMessage("proved Farkas value of LP: %g -> infeasibility %sproved\n", bound, *proved ? "" : "not "); 18199 SCIP_Bool genericnames, /**< should generic names like x_i and row_j be used in order to avoid 18229 SCIPmessageFPrintInfo(messagehdlr, file, "\\ Original Variable and Constraint Names have been replaced by generic names.\n"); 18232 SCIPmessageFPrintInfo(messagehdlr, file, "\\ Warning: Variable and Constraint Names should not contain special characters like '+', '=' etc.\n"); 18233 SCIPmessageFPrintInfo(messagehdlr, file, "\\ If this is the case, the model may be corrupted!\n"); 18238 SCIPmessageFPrintInfo(messagehdlr, file, "\\ An artificial variable 'objoffset' has been added and fixed to 1.\n"); 18239 SCIPmessageFPrintInfo(messagehdlr, file, "\\ Switching this variable to 0 will disable the offset in the objective.\n\n"); 18275 SCIPmessageFPrintInfo(messagehdlr, file, " %+.15g objoffset", objoffset * (SCIP_Real) objsense * objscale); 18287 /* constraint types: 'l' means: only lhs exists, 'r' means: only rhs exists, 'e' means: both sides exist and are 18288 * equal, 'b' and 'B' mean: both sides exist, if the type is 'b', the lhs will be written, if the type is 'B', 18289 * the rhs will be written. Ergo: set type to b first, change it to 'B' afterwards and go back to WRITEROW. 18291 if( SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18293 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18295 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && SCIPsetIsEQ(set, lp->rows[i]->lhs, lp->rows[i]->rhs) ) 18297 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18316 SCIPmessageFPrintInfo(messagehdlr, file, "\\\\ WARNING: The lhs and the rhs of the row with original name <%s>", lp->rows[i]->name); 18317 SCIPmessageFPrintInfo(messagehdlr, file, "are not in a valid range. The following two constraints may be corrupted!\n"); 18318 SCIPmessagePrintWarning(messagehdlr, "The lhs and rhs of row <%s> are not in a valid range.\n", lp->rows[i]->name); 18336 SCIPmessageFPrintInfo(messagehdlr, file, " %+.15g x_%d", lp->rows[i]->vals[j], lp->rows[i]->cols[j]->lppos); 18338 SCIPmessageFPrintInfo(messagehdlr, file, " %+.15g %s", lp->rows[i]->vals[j], lp->rows[i]->cols[j]->var->name); 18348 SCIPmessageFPrintInfo(messagehdlr, file, " >= %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18352 SCIPmessageFPrintInfo(messagehdlr, file, " >= %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18356 SCIPmessageFPrintInfo(messagehdlr, file, " <= %.15g\n", lp->rows[i]->rhs - lp->rows[i]->constant); 18359 SCIPmessageFPrintInfo(messagehdlr, file, " = %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18379 /* constraint types: 'l' means: only lhs exists, 'r' means: only rhs exists, 'e' means: both sides exist and are 18380 * equal, 'b' and 'B' mean: both sides exist, if the type is 'b', the lhs will be written, if the type is 'B', 18381 * the rhs will be written. Ergo: set type to b first, change it to 'B' afterwards and go back to WRITEROW. 18383 if( SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18385 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18387 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && SCIPsetIsEQ(set, lp->rows[i]->lhs, lp->rows[i]->rhs) ) 18389 else if( !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->lhs)) && !SCIPsetIsInfinity(set, REALABS(lp->rows[i]->rhs)) ) 18408 SCIPmessageFPrintInfo(messagehdlr, file, "\\\\ WARNING: The lhs and the rhs of the row with original name <%s>", lp->rows[i]->name); 18409 SCIPmessageFPrintInfo(messagehdlr, file, "are not in a valid range. The following two constraints may be corrupted!\n"); 18410 SCIPmessagePrintWarning(messagehdlr, "The lhs and rhs of row <%s> are not in a valid range.\n",lp->rows[i]->name); 18428 SCIPmessageFPrintInfo(messagehdlr, file, " %+.15g x_%d", lp->rows[i]->vals[j], lp->rows[i]->cols[j]->lppos); 18430 SCIPmessageFPrintInfo(messagehdlr, file, " %+.15g %s", lp->rows[i]->vals[j], lp->rows[i]->cols[j]->var->name); 18440 SCIPmessageFPrintInfo(messagehdlr, file, " >= %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18444 SCIPmessageFPrintInfo(messagehdlr, file, " >= %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18448 SCIPmessageFPrintInfo(messagehdlr, file, " <= %.15g\n", lp->rows[i]->rhs - lp->rows[i]->constant); 18451 SCIPmessageFPrintInfo(messagehdlr, file, " = %.15g\n", lp->rows[i]->lhs - lp->rows[i]->constant); 18671 /** gets the basis status of a column in the LP solution; only valid for LPs with status SCIP_LPSOLSTAT_OPTIMAL 18672 * and with SCIPisLPSolBasic(scip) == TRUE; returns SCIP_BASESTAT_ZERO for columns not in the current SCIP_LP 18704 /** returns whether the associated variable is of integral type (binary, integer, implicit integer) */ 18768 /** get number of nonzero entries in column vector, that correspond to rows currently in the SCIP_LP; 18770 * @warning This method is only applicable on columns, that are completely linked to their rows (e.g. a column 18771 * that is in the current LP and the LP was solved, or a column that was in a solved LP and didn't change afterwards 18803 /** gets node number of the last node in current branch and bound run, where strong branching was used on the 18845 /** get number of nonzero entries in row vector, that correspond to columns currently in the SCIP_LP; 18847 * @warning This method is only applicable on rows, that are completely linked to their columns (e.g. a row 18848 * that is in the current LP and the LP was solved, or a row that was in a solved LP and didn't change afterwards 18960 /** gets the basis status of a row in the LP solution; only valid for LPs with status SCIP_LPSOLSTAT_OPTIMAL 18961 * and with SCIPisLPSolBasic(scip) == TRUE; returns SCIP_BASESTAT_BASIC for rows not in the current SCIP_LP 19013 /** returns TRUE iff the activity of the row (without the row's constant) is always integral in a feasible solution */ 19033 /** returns TRUE iff row is modifiable during node processing (subject to column generation) */ 19251 /** recalculates Euclidean norm of objective function vector of column variables if it have gotten unreliable during calculation */ 19273 /* due to numerical troubles it still can appear that lp->objsqrnorm is a little bit smaller than 0 */ 19281 /** gets Euclidean norm of objective function vector of column variables, only use this method if 19282 * lp->objsqrnormunreliable == FALSE, so probably you have to call SCIPlpRecalculateObjSqrNorm before */ 19294 /** sets whether the root lp is a relaxation of the problem and its optimal objective value is a global lower bound */ 19305 /** returns whether the root lp is a relaxation of the problem and its optimal objective value is a global lower bound */ 19315 /** gets the objective value of the root node LP; returns SCIP_INVALID if the root node LP was not (yet) solved */ 19325 /** gets part of the objective value of the root node LP that results from COLUMN variables only; 19337 /** gets part of the objective value of the root node LP that results from LOOSE variables only; 19359 /** sets whether the current LP is a relaxation of the current problem and its optimal objective value is a local lower bound */ 19370 /** returns whether the current LP is a relaxation of the problem for which it has been solved and its 19412 /** returns whether the LP is in diving mode and the objective value of at least one column was changed */ 19444 /* returns TRUE if at least one left/right hand side of an LP row was changed during diving mode */ 19459 * "Identifying the Set of Always-Active Constraints in a System of Linear Inequalities by a Single Linear Program"@par 19486 * If the original LP is feasible, this LP is feasible as well. Any optimal solution yields the relative interior point 19487 * \f$x^*_j/\alpha^*\f$. Note that this will just produce some relative interior point. It does not produce a 19488 * particular relative interior point, e.g., one that maximizes the distance to the boundary in some norm. 19500 SCIP_Bool* success /**< buffer to indicate whether interior point was successfully computed */ 19543 if( inclobjcutoff && (SCIPsetIsInfinity(set, lp->cutoffbound) || lp->looseobjvalinf > 0 || lp->looseobjval == SCIP_INVALID) ) /*lint !e777 */ 19582 /* note: if the variable is fixed we cannot simply fix the variables (because alpha scales the problem) */ 19920 SCIPmessagePrintWarning(messagehdlr, "Could not set time limit of LP solver for relative interior point computation.\n"); 19927 SCIPmessagePrintWarning(messagehdlr, "Could not set iteration limit of LP solver for relative interior point computation.\n"); 19942 SCIPmessagePrintWarning(messagehdlr, "Iteration limit exceeded in relative interior point computation.\n"); 19944 SCIPmessagePrintWarning(messagehdlr, "Time limit exceeded in relative interior point computation.\n"); 20049 assert( SCIPsetIsFeasZero(set, primal[lp->ncols+1+cnt]) || SCIPsetIsFeasGT(set, val, col->lb) ); 20055 assert( SCIPsetIsFeasZero(set, primal[lp->ncols+1+cnt]) || SCIPsetIsFeasLT(set, val, col->ub) ); static SCIP_RETCODE lpRestoreSolVals(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_Longint validlp) Definition: lp.c:367 SCIP_Bool SCIPsetIsUpdateUnreliable(SCIP_SET *set, SCIP_Real newvalue, SCIP_Real oldvalue) Definition: set.c:6287 Definition: type_lp.h:64 SCIP_RETCODE SCIPeventfilterCreate(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem) Definition: event.c:1650 SCIP_Longint ndualresolvelpiterations Definition: struct_stat.h:54 void SCIPcolMarkNotRemovableLocal(SCIP_COL *col, SCIP_STAT *stat) Definition: lp.c:4544 SCIP_RETCODE SCIPlpGetProvedLowerbound(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *bound) Definition: lp.c:18143 SCIP_Real SCIProwGetSolFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol) Definition: lp.c:6272 void SCIPcolGetStrongbranchLast(SCIP_COL *col, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Real *solval, SCIP_Real *lpobjval) Definition: lp.c:4500 SCIP_Bool SCIPsolveIsStopped(SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool checknodelimits) Definition: solve.c:69 static SCIP_RETCODE lpStoreSolVals(SCIP_LP *lp, SCIP_STAT *stat, BMS_BLKMEM *blkmem) Definition: lp.c:335 SCIP_Bool SCIPsetIsSumGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5483 static SCIP_RETCODE lpSetBoolpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Bool value, SCIP_Bool *success) Definition: lp.c:2488 static SCIP_RETCODE lpSetFastmip(SCIP_LP *lp, int fastmip, SCIP_Bool *success) Definition: lp.c:2773 static void roundStrongCGRow(SCIP_SET *set, SCIP_PROB *prob, SCIP_Real *strongcgcoef, SCIP_Real *strongcgrhs, SCIP_Bool *varused, int *varinds, int *nvarinds, int *varsign, int *boundtype, SCIP_Real f0, SCIP_Real k) Definition: lp.c:11802 #define BMSfreeBlockMemoryArrayNull(mem, ptr, num) Definition: memory.h:422 static SCIP_RETCODE lpSetDualfeastol(SCIP_LP *lp, SCIP_Real dualfeastol, SCIP_Bool *success) Definition: lp.c:2675 static SCIP_RETCODE lpUpdateVarProved(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real oldlb, SCIP_Real oldub, SCIP_Real newobj, SCIP_Real newlb, SCIP_Real newub) Definition: lp.c:15677 void SCIPvarGetClosestVlb(SCIP_VAR *var, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real *closestvlb, int *closestvlbidx) Definition: var.c:13376 SCIP_RETCODE SCIPeventCreateRowAddedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row) Definition: event.c:781 internal methods for managing events SCIP_RETCODE SCIPlpFreeNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lp.c:12462 static SCIP_RETCODE lpSetFromscratch(SCIP_LP *lp, SCIP_Bool fromscratch, SCIP_Bool *success) Definition: lp.c:2748 static int SCIProwGetDiscreteScalarProduct(SCIP_ROW *row1, SCIP_ROW *row2) Definition: lp.c:7044 SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5238 internal methods for storing primal CIP solutions static SCIP_RETCODE lpSetRowrepswitch(SCIP_LP *lp, SCIP_Real rowrepswitch, SCIP_Bool *success) Definition: lp.c:2874 Definition: type_lpi.h:58 static SCIP_RETCODE rowScale(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Real scaleval, SCIP_Bool integralcontvars, SCIP_Real minrounddelta, SCIP_Real maxrounddelta) Definition: lp.c:4723 static void cleanupMIRRow(SCIP_SET *set, SCIP_PROB *prob, SCIP_Real *mircoef, SCIP_Real *mirrhs, SCIP_Bool *varused, int *varinds, int *nvarinds, SCIP_Bool cutislocal) Definition: lp.c:9900 SCIP_RETCODE SCIPlpUpdateAddVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:15981 Definition: intervalarith.h:36 SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lpi_clp.cpp:3422 static SCIP_RETCODE colChgCoefPos(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, int pos, SCIP_Real val) Definition: lp.c:1815 SCIP_RETCODE SCIPlpShrinkRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int newnrows) Definition: lp.c:9217 Definition: type_lp.h:39 SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas) Definition: lpi_clp.cpp:2721 static SCIP_RETCODE colUnlink(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: lp.c:2340 static SCIP_Bool isNewValueUnreliable(SCIP_SET *set, SCIP_Real newvalue, SCIP_Real oldvalue) Definition: lp.c:3450 SCIP_Longint SCIProwGetNLPsAfterCreation(SCIP_ROW *row) Definition: lp.c:19158 static SCIP_RETCODE lpCleanupCols(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, int firstcol) Definition: lp.c:17370 SCIP_RETCODE SCIPlpComputeRelIntPoint(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_LP *lp, SCIP_PROB *prob, SCIP_Bool relaxrows, SCIP_Bool inclobjcutoff, SCIP_Real timelimit, int iterlimit, SCIP_Real *point, SCIP_Bool *success) Definition: lp.c:19490 static SCIP_Real getFiniteLooseObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:856 static SCIP_RETCODE lpSetConditionLimit(SCIP_LP *lp, SCIP_Real condlimit, SCIP_Bool *success) Definition: lp.c:3023 SCIP_RETCODE SCIPeventCreateRowDeletedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row) Definition: event.c:800 static SCIP_RETCODE ensureLpirowsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:216 SCIP_RETCODE SCIPlpFlush(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue) Definition: lp.c:8258 SCIP_RETCODE SCIPlpGetBInvCol(SCIP_LP *lp, int c, SCIP_Real *coef, int *inds, int *ninds) Definition: lp.c:9384 SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds) Definition: lpi_clp.cpp:3127 static void findBestUb(SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_SOL *sol, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Real *bestub, int *bestubtype) Definition: lp.c:10024 SCIP_Real SCIProwGetRelaxFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6038 SCIP_RETCODE SCIPcolChgCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val) Definition: lp.c:3319 SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5578 #define SCIPsetDuplicateBufferArray(set, ptr, source, num) Definition: set.h:1790 static SCIP_RETCODE rowStoreSolVals(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_Bool infeasible) Definition: lp.c:495 SCIP_RETCODE SCIPlpRemoveAllObsoletes(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:17339 SCIP_Real SCIProwGetPseudoActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6186 void SCIPlpSetRootLPIsRelax(SCIP_LP *lp, SCIP_Bool isrelax) Definition: lp.c:19295 SCIP_RETCODE SCIPeventqueueAdd(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENT **event) Definition: event.c:2057 SCIP_Bool SCIProwIsRedundant(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6392 static SCIP_RETCODE lpFlushAddCols(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue) Definition: lp.c:7650 SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate) Definition: lpi_clp.cpp:3330 void SCIProwRecalcLPActivity(SCIP_ROW *row, SCIP_STAT *stat) Definition: lp.c:5936 SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval) Definition: lpi_clp.cpp:3593 void SCIPlpRecalculateObjSqrNorm(SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:19252 internal methods for clocks and timing issues static void getObjvalDeltaUb(SCIP_SET *set, SCIP_Real obj, SCIP_Real oldub, SCIP_Real newub, SCIP_Real *deltaval, int *deltainf) Definition: lp.c:15554 SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds) Definition: lpi_clp.cpp:3089 static SCIP_Real getMaxAbsWeightCalcSparsity(SCIP_SET *set, SCIP_LP *lp, SCIP_Real *weights, int *rowinds, int *nrowinds, int *rowlensum) Definition: lp.c:9546 SCIP_RETCODE SCIPlpCalcMIR(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real *weights, SCIP_Real maxweight, int *weightinds, int nweightinds, int rowlensum, int *sidetypes, SCIP_Real scale, SCIP_Real *mksetcoefs, SCIP_Bool *mksetcoefsvalid, SCIP_Real *mircoef, SCIP_Real *mirrhs, SCIP_Real *cutactivity, SCIP_Bool *success, SCIP_Bool *cutislocal, int *cutrank) Definition: lp.c:11043 SCIP_RETCODE SCIPeventfilterDel(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: event.c:1808 Definition: type_lpi.h:41 SCIP_RETCODE SCIProwChgConstant(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real constant) Definition: lp.c:5348 static SCIP_RETCODE lpDelColset(SCIP_LP *lp, SCIP_SET *set, int *coldstat) Definition: lp.c:16961 SCIP_RETCODE SCIPlpGetIterations(SCIP_LP *lp, int *iterations) Definition: lp.c:16888 static void adjustLPobjval(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr) Definition: lp.c:14111 SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_clp.cpp:2236 Definition: struct_var.h:196 interface methods for specific LP solvers SCIP_RETCODE SCIPcolChgObj(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newobj) Definition: lp.c:3504 SCIP_Real SCIPlpGetGlobalPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15227 SCIP_RETCODE SCIPlpUpdateVarLb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb) Definition: lp.c:15872 SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success) Definition: lpi_clp.cpp:1475 static SCIP_RETCODE lpUpdateVarLoose(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16160 SCIP_RETCODE SCIProwEnsureSize(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, int num) Definition: lp.c:580 SCIP_RETCODE SCIPlpFreeState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lp.c:12401 SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds) Definition: lpi_clp.cpp:3162 SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val) Definition: lpi_clp.cpp:638 Definition: type_lpi.h:52 SCIP_RETCODE SCIPcolCreate(SCIP_COL **col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, int len, SCIP_ROW **rows, SCIP_Real *vals, SCIP_Bool removable) Definition: lp.c:3086 static void substituteMIRRow(SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Real *weights, SCIP_Real scale, SCIP_Real *mircoef, SCIP_Real *mirrhs, int *slacksign, SCIP_Bool *varused, int *varinds, int *nvarinds, int *rowinds, int nrowinds, SCIP_Real f0) Definition: lp.c:10827 Definition: type_message.h:45 SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals) Definition: lpi_clp.cpp:1513 SCIP_RETCODE SCIPlpUpdateVarLbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb) Definition: lp.c:15844 Definition: type_lpi.h:72 SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi) Definition: lpi_clp.cpp:1830 void SCIPsortIntPtrIntReal(int *intarray1, void **ptrarray, int *intarray2, SCIP_Real *realarray, int len) void SCIPintervalMul(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2) Definition: intervalarith.c:963 static SCIP_RETCODE ensureLazycolsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:262 SCIP_RETCODE SCIPlpUpdateVarUbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub) Definition: lp.c:15913 SCIP_Bool SCIPsetIsFeasIntegral(SCIP_SET *set, SCIP_Real val) Definition: set.c:5721 static void recomputeLooseObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:730 static SCIP_RETCODE insertColChgcols(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:3425 static SCIP_RETCODE colAddCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val, int linkpos) Definition: lp.c:1649 Definition: struct_event.h:169 Definition: type_lp.h:72 Definition: struct_message.h:35 SCIP_RETCODE SCIPlpIsInfeasibilityProved(SCIP_LP *lp, SCIP_SET *set, SCIP_Bool *proved) Definition: lp.c:18157 static SCIP_RETCODE lpFlushAddRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue) Definition: lp.c:7870 static SCIP_RETCODE lpSetBarrierconvtol(SCIP_LP *lp, SCIP_Real barrierconvtol, SCIP_Bool *success) Definition: lp.c:2711 SCIP_Real SCIProwGetLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:6487 SCIP_RETCODE SCIPlpGetState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lp.c:12339 void SCIPlpStartStrongbranchProbing(SCIP_LP *lp) Definition: lp.c:17997 static SCIP_RETCODE lpCheckIntpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, int value) Definition: lp.c:2528 SCIP_RETCODE SCIProwChgCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real val) Definition: lp.c:5242 SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival) Definition: lpi_clp.cpp:3447 SCIP_RETCODE SCIPlpSetState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPISTATE *lpistate, SCIP_Bool wasprimfeas, SCIP_Bool wasdualfeas) Definition: lp.c:12363 void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup) Definition: intervalarith.c:479 SCIP_RETCODE SCIPlpRemoveNewObsoletes(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:17308 SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss) Definition: lpi_clp.cpp:1567 Definition: struct_prob.h:38 SCIP_Real SCIProwGetNLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6643 static void rowAddNorms(SCIP_ROW *row, SCIP_SET *set, SCIP_COL *col, SCIP_Real val, SCIP_Bool updateidxvals) Definition: lp.c:1859 SCIP_RETCODE SCIPlpEndDive(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_VAR **vars, int nvars) Definition: lp.c:17761 SCIP_RETCODE SCIProwMakeIntegral(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Bool usecontvars, SCIP_Bool *success) Definition: lp.c:5745 static SCIP_RETCODE lpSetPresolving(SCIP_LP *lp, SCIP_Bool presolving, SCIP_Bool *success) Definition: lp.c:2849 static void sumStrongCGRow(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_Real *weights, SCIP_Real scale, SCIP_Bool allowlocal, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Real *strongcgcoef, SCIP_Real *strongcgrhs, int *slacksign, SCIP_Bool *varused, int *varinds, int *nvarinds, int *rowinds, int *nrowinds, SCIP_Bool *emptyrow, SCIP_Bool *localrowsused, SCIP_Bool *rowtoolong, int *cutrank) Definition: lp.c:11280 SCIP_RETCODE SCIPlpSolveAndEval(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_Longint itlim, SCIP_Bool limitresolveiters, SCIP_Bool aging, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:14511 Definition: struct_lp.h:106 static SCIP_RETCODE updateLazyBounds(SCIP_LP *lp, SCIP_SET *set) Definition: lp.c:14429 Definition: type_lp.h:55 static void lpUpdateObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real deltaval, int deltainf, SCIP_Bool local, SCIP_Bool loose, SCIP_Bool global) Definition: lp.c:15595 SCIP_Real SCIPlpGetPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15256 SCIP_RETCODE SCIPcolIncCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real incval) Definition: lp.c:3370 SCIP_RETCODE SCIPlpCleanupAll(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Bool root) Definition: lp.c:17547 SCIP_RETCODE SCIPcolDelCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row) Definition: lp.c:3274 SCIP_RETCODE SCIProwCreate(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, const char *name, int len, SCIP_COL **cols, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_ROWORIGINTYPE origintype, void *origin, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable) Definition: lp.c:4894 static SCIP_RETCODE colStoreSolVals(SCIP_COL *col, BMS_BLKMEM *blkmem) Definition: lp.c:421 SCIP_RETCODE SCIPlpSetNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS *lpinorms) Definition: lp.c:12442 Definition: struct_sepa.h:36 static SCIP_RETCODE lpSetPricing(SCIP_LP *lp, SCIP_PRICING pricing) Definition: lp.c:2935 static SCIP_RETCODE ensureChgcolsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:147 Definition: type_message.h:46 static SCIP_RETCODE lpSetRealpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Real value, SCIP_Bool *success) Definition: lp.c:2500 static SCIP_RETCODE reallocDiveChgSideArrays(SCIP_LP *lp, int minsize, SCIP_Real growfact) Definition: lp.c:8611 Definition: type_lp.h:37 SCIP_RETCODE SCIProwIncCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real incval) Definition: lp.c:5294 static SCIP_RETCODE lpAlgorithm(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_LPALGO lpalgo, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool *timelimit, SCIP_Bool *lperror) Definition: lp.c:13595 Definition: type_lp.h:65 SCIP_Longint SCIPcolGetStrongbranchLPAge(SCIP_COL *col, SCIP_STAT *stat) Definition: lp.c:4532 internal methods for LP management static SCIP_RETCODE lpUpdateVarColumnProved(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16073 static void recomputeGlbPseudoObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:814 SCIP_RETCODE SCIPlpRecordOldRowSideDive(SCIP_LP *lp, SCIP_ROW *row, SCIP_SIDETYPE sidetype) Definition: lp.c:17943 SCIP_Real SCIProwGetScalarProduct(SCIP_ROW *row1, SCIP_ROW *row2) Definition: lp.c:6687 SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var) Definition: sol.c:1245 Definition: struct_lp.h:123 Definition: lpi_cpx.c:191 static SCIP_RETCODE lpSolveStable(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LPALGO lpalgo, int itlim, int harditlim, SCIP_Bool resolve, int fastmip, SCIP_Bool tightprimfeastol, SCIP_Bool tightdualfeastol, SCIP_Bool fromscratch, SCIP_Bool keepsol, SCIP_Bool *timelimit, SCIP_Bool *lperror) Definition: lp.c:13677 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 Definition: type_lpi.h:53 SCIP_Bool SCIPsetIsEfficacious(SCIP_SET *set, SCIP_Bool root, SCIP_Real efficacy) Definition: set.c:6042 Definition: type_lpi.h:70 static SCIP_RETCODE colLink(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: lp.c:2296 SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *nominator, SCIP_Longint *denominator) Definition: misc.c:7215 SCIP_RETCODE SCIPrealarrayIncVal(SCIP_REALARRAY *realarray, int arraygrowinit, SCIP_Real arraygrowfac, int idx, SCIP_Real incval) Definition: misc.c:2693 Definition: type_lp.h:73 SCIP_RETCODE SCIPlpCalcStrongCG(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real *weights, int *rowinds, int nrowinds, SCIP_Real scale, SCIP_Real *strongcgcoef, SCIP_Real *strongcgrhs, SCIP_Real *cutactivity, SCIP_Bool *success, SCIP_Bool *cutislocal, int *cutrank) Definition: lp.c:12136 static void rowDelNorms(SCIP_ROW *row, SCIP_SET *set, SCIP_COL *col, SCIP_Real val, SCIP_Bool forcenormupdate, SCIP_Bool updateindex, SCIP_Bool updateval) Definition: lp.c:1928 SCIP_Real SCIPcolCalcRedcost(SCIP_COL *col, SCIP_Real *dualsol) Definition: lp.c:3653 SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5220 SCIP_RETCODE SCIPlpCleanupNew(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Bool root) Definition: lp.c:17508 SCIP_Bool SCIPsetIsSumLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5447 Definition: struct_lp.h:95 SCIP_RETCODE SCIProwCatchEvent(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: lp.c:7480 Definition: type_lp.h:40 SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS *lpinorms) Definition: lpi_clp.cpp:3409 SCIP_RETCODE SCIPcolAddCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val) Definition: lp.c:3253 SCIP_RETCODE SCIPlpUpdateVarUb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub) Definition: lp.c:15940 #define BMSduplicateBlockMemoryArray(mem, ptr, source, num) Definition: memory.h:416 static SCIP_RETCODE rowUnlink(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:2422 static SCIP_RETCODE lpUpdateVarLooseProved(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16205 static SCIP_RETCODE colRestoreSolVals(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer) Definition: lp.c:448 Definition: struct_misc.h:109 SCIP_RETCODE SCIPlpStartDive(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:17660 SCIP_RETCODE SCIProwChgLhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real lhs) Definition: lp.c:5429 static SCIP_RETCODE lpFlushDelRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set) Definition: lp.c:7822 SCIP_RETCODE SCIPeventfilterAdd(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: event.c:1715 SCIP_RETCODE SCIPlpWriteMip(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *fname, SCIP_Bool genericnames, SCIP_Bool origobj, SCIP_OBJSENSE objsense, SCIP_Real objscale, SCIP_Real objoffset, SCIP_Bool lazyconss) Definition: lp.c:18194 internal methods for storing and manipulating the main problem static SCIP_Bool isIntegralScalar(SCIP_Real val, SCIP_Real scalar, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Real *intval) Definition: lp.c:4683 void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...) Definition: message.c:662 interval arithmetics for provable bounds SCIP_Real SCIProwGetParallelism(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc) Definition: lp.c:7403 void SCIPsortPtrRealInt(void **ptrarray, SCIP_Real *realarray, int *intarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) Definition: struct_cons.h:116 SCIP_RETCODE SCIPlpAddCol(SCIP_LP *lp, SCIP_SET *set, SCIP_COL *col, int depth) Definition: lp.c:8963 SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval) Definition: intervalarith.c:451 SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs) Definition: lpi_clp.cpp:1536 SCIP_RETCODE SCIPlpShrinkCols(SCIP_LP *lp, SCIP_SET *set, int newncols) Definition: lp.c:9146 Definition: type_retcode.h:48 Definition: type_lp.h:75 Definition: type_lp.h:47 static SCIP_Real colCalcInternalFarkasCoef(SCIP_COL *col) Definition: lp.c:3888 SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lpi_clp.cpp:3312 Definition: type_lpi.h:34 SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_clp.cpp:2169 static SCIP_RETCODE lpCleanupRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int firstrow) Definition: lp.c:17437 static void addRowToAggregation(SCIP_SET *set, SCIP_Real *mircoef, SCIP_Real *mirrhs, int *slacksign, SCIP_Bool *varused, int *varinds, int *nvarinds, SCIP_ROW *row, SCIP_Real weight, SCIP_Bool uselhs) Definition: lp.c:9638 SCIP_RETCODE SCIPlpSumRows(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real *weights, SCIP_REALARRAY *sumcoef, SCIP_Real *sumlhs, SCIP_Real *sumrhs) Definition: lp.c:9459 Definition: type_lpi.h:44 static SCIP_Real getMIRRowActivity(SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, SCIP_Real *mircoef, int *varinds, int nvarinds) Definition: lp.c:11012 static SCIP_RETCODE rowAddCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real val, int linkpos) Definition: lp.c:1986 Definition: type_var.h:42 SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow) Definition: lpi_clp.cpp:844 void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...) Definition: message.c:411 SCIP_Real SCIProwGetNLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6100 SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs) Definition: lpi_clp.cpp:1007 SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi) Definition: lpi_clp.cpp:1821 SCIP_RETCODE SCIPlpGetUnboundedSol(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *rayfeasible) Definition: lp.c:16595 SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval) Definition: lpi_clp.cpp:2634 SCIP_Real SCIProwGetPseudoFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6214 SCIP_RETCODE SCIPlpAddRow(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_ROW *row, int depth) Definition: lp.c:9022 internal miscellaneous methods void SCIPvarGetClosestVub(SCIP_VAR *var, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real *closestvub, int *closestvubidx) Definition: var.c:13451 static SCIP_RETCODE lpPrimalSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:12545 SCIP_Longint nprimalresolvelpiterations Definition: struct_stat.h:53 Definition: type_lpi.h:51 Definition: type_retcode.h:33 Definition: type_lpi.h:33 static SCIP_RETCODE lpSetFeastol(SCIP_LP *lp, SCIP_Real feastol, SCIP_Bool *success) Definition: lp.c:2639 static void roundMIRRow(SCIP_SET *set, SCIP_PROB *prob, SCIP_Real *mircoef, SCIP_Real *mirrhs, SCIP_Bool *varused, int *varinds, int *nvarinds, int *varsign, int *boundtype, SCIP_Real f0) Definition: lp.c:10640 Definition: struct_event.h:143 SCIP_RETCODE SCIPlpGetDualfarkas(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:16822 internal methods for global SCIP settings Definition: type_lpi.h:45 static SCIP_RETCODE lpSetScaling(SCIP_LP *lp, SCIP_Bool scaling, SCIP_Bool *success) Definition: lp.c:2799 static void sumMIRRow(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_Real *weights, SCIP_Real knownmaxweight, int *sidetypes, SCIP_Real scale, SCIP_Bool allowlocal, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Bool compress, SCIP_Real *mircoef, SCIP_Real *mirrhs, int *slacksign, SCIP_Bool *varused, int *varinds, int *nvarinds, int *rowinds, int *nrowinds, SCIP_Bool *emptyrow, SCIP_Bool *localrowsused, SCIP_Bool *rowtoolong, int *cutrank) Definition: lp.c:9709 SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5666 static void rowCalcActivityBounds(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6290 Definition: type_retcode.h:46 void SCIPmessagePrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...) Definition: message.c:578 void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value) Definition: intervalarith.c:467 SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi) Definition: lpi_clp.cpp:2374 SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5202 Definition: type_clock.h:35 SCIP_Real SCIPlpGetObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15076 void SCIProwPrint(SCIP_ROW *row, SCIP_MESSAGEHDLR *messagehdlr, FILE *file) Definition: lp.c:5065 static SCIP_RETCODE rowLink(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: lp.c:2379 static SCIP_RETCODE colDelCoefPos(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, int pos) Definition: lp.c:1770 SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5622 SCIP_Bool SCIProwIsSolEfficacious(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_Bool root) Definition: lp.c:6587 Definition: type_lpi.h:68 Definition: type_lp.h:34 static SCIP_RETCODE rowSideChanged(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp, SCIP_SIDETYPE sidetype) Definition: lp.c:2243 static SCIP_RETCODE rowEventSideChanged(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_SIDETYPE side, SCIP_Real oldval, SCIP_Real newval) Definition: lp.c:1475 static SCIP_RETCODE allocDiveChgSideArrays(SCIP_LP *lp, int initsize) Definition: lp.c:8589 Definition: type_retcode.h:34 SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost) Definition: lpi_clp.cpp:2652 SCIP_RETCODE SCIProwRelease(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:5118 static SCIP_RETCODE lpSolve(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LPALGO lpalgo, int resolveitlim, int harditlim, SCIP_Bool needprimalray, SCIP_Bool needdualray, SCIP_Bool resolve, int fastmip, SCIP_Bool tightprimfeastol, SCIP_Bool tightdualfeastol, SCIP_Bool fromscratch, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:14142 SCIP_Real SCIProwGetSolActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol) Definition: lp.c:6230 internal methods for problem variables static void computeLPBounds(SCIP_LP *lp, SCIP_SET *set, SCIP_COL *col, SCIP_Real lpiinf, SCIP_Real *lb, SCIP_Real *ub) Definition: lp.c:7615 SCIP_RETCODE SCIPlpClear(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:9283 void SCIPlpRecomputeLocalAndGlobalPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15159 Definition: type_lpi.h:71 SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival) Definition: lpi_clp.cpp:3491 static void recomputePseudoObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:772 static SCIP_RETCODE lpDelRowset(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int *rowdstat) Definition: lp.c:17059 SCIP_RETCODE SCIPlpFree(SCIP_LP **lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:8890 SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, int *ind, SCIP_Real *obj) Definition: lpi_clp.cpp:1078 SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray) Definition: lpi_clp.cpp:2696 SCIP_RETCODE SCIPeventCreateRowSideChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_SIDETYPE side, SCIP_Real oldval, SCIP_Real newval) Definition: event.c:867 SCIP_Longint nlexdualresolvelpiterations Definition: struct_stat.h:55 SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval) Definition: lpi_clp.cpp:3639 static SCIP_RETCODE ensureRowsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:285 SCIP_RETCODE SCIPlpGetBInvRow(SCIP_LP *lp, int r, SCIP_Real *coef, int *inds, int *ninds) Definition: lp.c:9362 Definition: type_lpi.h:67 SCIP_RETCODE SCIPcolChgLb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newlb) Definition: lp.c:3563 Definition: struct_lp.h:189 static int colSearchCoefPart(SCIP_COL *col, const SCIP_ROW *row, int minpos, int maxpos) Definition: lp.c:1052 SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_clp.cpp:2190 void SCIPcolSetStrongbranchData(SCIP_COL *col, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Real lpobjval, SCIP_Real primsol, SCIP_Real sbdown, SCIP_Real sbup, SCIP_Bool sbdownvalid, SCIP_Bool sbupvalid, SCIP_Longint iter, int itlim) Definition: lp.c:4016 Definition: type_lpi.h:57 static SCIP_RETCODE rowDelCoefPos(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, int pos) Definition: lp.c:2127 SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp) Definition: prob.c:2140 SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat) Definition: lpi_clp.cpp:2798 Definition: type_lpi.h:43 Definition: type_lpi.h:42 Definition: type_var.h:41 void SCIPintervalAdd(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2) Definition: intervalarith.c:677 SCIP_RETCODE SCIProwDelCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col) Definition: lp.c:5196 SCIP_RETCODE SCIPlpCreate(SCIP_LP **lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, const char *name) Definition: lp.c:8657 SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype) Definition: lp.c:18826 SCIP_RETCODE SCIPsetSetCharParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, char value) Definition: set.c:2910 SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val) Definition: lpi_clp.cpp:782 SCIP_Real SCIProwGetSolEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol) Definition: lp.c:6544 SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname) Definition: lpi_clp.cpp:3775 SCIP_Real SCIProwGetRelaxEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6603 static SCIP_RETCODE ensureColsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:239 SCIP_RETCODE SCIPlpRemoveRedundantRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:17586 SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5600 SCIP_Bool SCIPsetIsSumEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5411 SCIP_RETCODE SCIPcolChgUb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newub) Definition: lp.c:3608 SCIP_RETCODE SCIPlpGetNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lp.c:12418 SCIP_RETCODE SCIPsetGetCharParam(SCIP_SET *set, const char *name, char *value) Definition: set.c:2650 SCIP_RETCODE SCIProwDropEvent(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: lp.c:7504 SCIP_RETCODE SCIPcolFree(SCIP_COL **col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: lp.c:3183 void SCIPcolPrint(SCIP_COL *col, SCIP_MESSAGEHDLR *messagehdlr, FILE *file) Definition: lp.c:3213 static int lpGetResolveItlim(SCIP_SET *set, SCIP_STAT *stat, int itlim) Definition: lp.c:14491 static int rowSearchCoefPart(SCIP_ROW *row, const SCIP_COL *col, int minpos, int maxpos) Definition: lp.c:1127 SCIP_RETCODE SCIPeventCreateRowCoefChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_COL *col, SCIP_Real oldval, SCIP_Real newval) Definition: event.c:819 static void getObjvalDeltaObj(SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj, SCIP_Real lb, SCIP_Real ub, SCIP_Real *deltaval, int *deltainf) Definition: lp.c:15381 SCIP_Real SCIProwGetOrthogonality(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc) Definition: lp.c:7435 Definition: type_retcode.h:39 SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms) Definition: lpi_clp.cpp:3393 SCIP_RETCODE SCIPlpReset(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: lp.c:8934 SCIP_RETCODE SCIPcolGetStrongbranches(SCIP_COL **cols, int ncols, SCIP_Bool integral, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *lperror) Definition: lp.c:4264 SCIP_Bool SCIPsetIsDualfeasPositive(SCIP_SET *set, SCIP_Real val) Definition: set.c:5912 SCIP_Real SCIProwGetMaxActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6371 static void getObjvalDeltaLb(SCIP_SET *set, SCIP_Real obj, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real *deltaval, int *deltainf) Definition: lp.c:15513 static SCIP_RETCODE lpBarrier(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool crossover, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:13458 SCIP_Real SCIPlpGetLooseObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15115 static SCIP_RETCODE provedBound(SCIP_LP *lp, SCIP_SET *set, SCIP_Bool usefarkas, SCIP_Real *bound) Definition: lp.c:18033 SCIP_Real SCIPlpGetModifiedPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype) Definition: lp.c:15283 static SCIP_RETCODE rowRestoreSolVals(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer, SCIP_Bool infeasible) Definition: lp.c:532 static SCIP_RETCODE lpCheckRealpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Real value) Definition: lp.c:2564 Definition: type_lp.h:36 SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub) Definition: lpi_clp.cpp:941 static SCIP_RETCODE rowEventCoefChanged(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_COL *col, SCIP_Real oldval, SCIP_Real newval) Definition: lp.c:1417 Definition: type_lpi.h:47 static SCIP_RETCODE lpRemoveObsoleteCols(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, int firstcol) Definition: lp.c:17156 void SCIPlpStoreRootObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15135 SCIP_Bool SCIProwIsLPEfficacious(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool root) Definition: lp.c:6528 SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate) Definition: lpi_clp.cpp:3202 SCIP_Real SCIProwGetMinActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat) Definition: lp.c:6350 SCIP_RETCODE SCIPlpSetCutoffbound(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real cutoffbound) Definition: lp.c:12476 static void substituteStrongCGRow(SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Real *weights, SCIP_Real scale, SCIP_Real *strongcgcoef, SCIP_Real *strongcgrhs, int *slacksign, SCIP_Bool *varused, int *varinds, int *nvarinds, int *rowinds, int nrowinds, SCIP_Real f0, SCIP_Real k) Definition: lp.c:11981 internal methods for main solving loop and node processing Definition: type_retcode.h:40 Definition: lpi_clp.cpp:121 SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE *lpistate) Definition: lpi_clp.cpp:3242 Definition: struct_lp.h:255 SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen) Definition: lpi_clp.cpp:469 SCIP_RETCODE SCIPeventfilterFree(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set) Definition: event.c:1675 Definition: type_lp.h:48 SCIP_RETCODE SCIPlpUpdateVarObj(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj) Definition: lp.c:15790 static SCIP_RETCODE lpRemoveObsoleteRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int firstrow) Definition: lp.c:17232 static SCIP_RETCODE lpUpdateVarColumn(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16026 static SCIP_RETCODE ensureChgrowsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:170 public methods for message output Definition: type_lpi.h:79 void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...) Definition: message.c:602 SCIP_Real SCIProwGetLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:6018 SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5256 Definition: type_lpi.h:69 void SCIPsortDownInt(int *intarray, int len) SCIP_RETCODE SCIPcolGetStrongbranch(SCIP_COL *col, SCIP_Bool integral, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *lperror) Definition: lp.c:4105 SCIP_Longint SCIPcolGetStrongbranchNode(SCIP_COL *col) Definition: lp.c:18806 internal methods for problem statistics Definition: lpi_clp.cpp:93 SCIP_Real SCIProwGetObjParallelism(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:7447 SCIP_Bool SCIPsetIsFeasPositive(SCIP_SET *set, SCIP_Real val) Definition: set.c:5699 SCIP_RETCODE SCIPrealarrayExtend(SCIP_REALARRAY *realarray, int arraygrowinit, SCIP_Real arraygrowfac, int minidx, int maxidx) Definition: misc.c:2417 Definition: type_lp.h:56 static SCIP_RETCODE lpSetUobjlim(SCIP_LP *lp, SCIP_SET *set, SCIP_Real uobjlim) Definition: lp.c:2597 SCIP_Real SCIPcolGetFarkasValue(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:3967 static void findBestLb(SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_SOL *sol, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Real *bestlb, int *bestlbtype) Definition: lp.c:9968 Definition: type_lpi.h:49 SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible) Definition: lpi_clp.cpp:2281 SCIP_RETCODE SCIPlpUpdateVarLoose(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16262 SCIP_RETCODE SCIProwChgRhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real rhs) Definition: lp.c:5461 SCIP_RETCODE SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter) Definition: lpi_clp.cpp:2215 SCIP_Bool SCIPsetIsDualfeasZero(SCIP_SET *set, SCIP_Real val) Definition: set.c:5901 static SCIP_RETCODE lpSetPricingChar(SCIP_LP *lp, char pricingchar) Definition: lp.c:2958 SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations) Definition: lpi_clp.cpp:2753 SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds) Definition: lpi_clp.cpp:3054 SCIP_RETCODE SCIPlpGetPrimalRay(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *ray) Definition: lp.c:16765 static SCIP_RETCODE lpSetIterationLimit(SCIP_LP *lp, int itlim) Definition: lp.c:2899 SCIP_RETCODE SCIProwCalcIntegralScalar(SCIP_ROW *row, SCIP_SET *set, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Bool usecontvars, SCIP_Real *intscalar, SCIP_Bool *success) Definition: lp.c:5510 SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol) Definition: lpi_clp.cpp:705 SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5644 Definition: type_lp.h:35 SCIP_RETCODE SCIPlpGetBInvARow(SCIP_LP *lp, int r, SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds) Definition: lp.c:9410 void SCIProwMarkNotRemovableLocal(SCIP_ROW *row, SCIP_STAT *stat) Definition: lp.c:7525 Definition: type_lp.h:74 void SCIPintervalSub(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2) Definition: intervalarith.c:784 static SCIP_RETCODE colEnsureSize(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, int num) Definition: lp.c:308 static void transformStrongCGRow(SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Real *strongcgcoef, SCIP_Real *strongcgrhs, SCIP_Bool *varused, int *varinds, int *nvarinds, int *varsign, int *boundtype, SCIP_Bool *freevariable, SCIP_Bool *localbdsused) Definition: lp.c:11476 SCIP_Real SCIPcolGetFarkasCoef(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:3941 SCIP_Real SCIProwGetLPActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:5988 Definition: type_lpi.h:66 Definition: type_lp.h:33 Definition: type_lp.h:38 Definition: struct_stat.h:44 Definition: type_lpi.h:46 Definition: type_lpi.h:80 SCIP_Bool SCIPsetIsDualfeasNegative(SCIP_SET *set, SCIP_Real val) Definition: set.c:5923 SCIP_Real SCIPcolGetFeasibility(SCIP_COL *col, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:3782 SCIP_RETCODE SCIPlpGetBInvACol(SCIP_LP *lp, int c, SCIP_Real *coef, int *inds, int *ninds) Definition: lp.c:9435 SCIP_RETCODE SCIPlpUpdateVarColumn(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16138 common defines and data types used in all packages of SCIP SCIP_Real SCIPlpGetModifiedProvedPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype) Definition: lp.c:15323 Definition: struct_event.h:204 static SCIP_Real getFinitePseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:878 Definition: type_prob.h:39 void SCIPcolInvalidateStrongbranchData(SCIP_COL *col, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:4070 SCIP_RETCODE SCIPlpUpdateDelVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var) Definition: lp.c:16002 Definition: type_retcode.h:43 static SCIP_RETCODE rowEventConstantChanged(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_Real oldval, SCIP_Real newval) Definition: lp.c:1447 SCIP_RETCODE SCIProwAddCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real val) Definition: lp.c:5175 SCIP_Real SCIPcolGetRedcost(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp) Definition: lp.c:3758 SCIP_RETCODE SCIPlpGetSol(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible) Definition: lp.c:16301 void SCIProwRecalcPseudoActivity(SCIP_ROW *row, SCIP_STAT *stat) Definition: lp.c:6159 static SCIP_RETCODE lpSetThreads(SCIP_LP *lp, int threads, SCIP_Bool *success) Definition: lp.c:2824 static SCIP_RETCODE ensureLpicolsSize(SCIP_LP *lp, SCIP_SET *set, int num) Definition: lp.c:193 static SCIP_RETCODE rowChgCoefPos(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, int pos, SCIP_Real val) Definition: lp.c:2187 static SCIP_RETCODE lpSetIntpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, int value, SCIP_Bool *success) Definition: lp.c:2461 static SCIP_RETCODE lpLexDualSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:12860 SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2) Definition: misc.c:7083 Definition: type_lpi.h:55 static SCIP_Real getMaxAbsWeight(SCIP_SET *set, SCIP_LP *lp, SCIP_Real *weights, int *rowinds, int *nrowinds, int *rowlensum) Definition: lp.c:9591 static SCIP_RETCODE lpCheckBoolpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Bool value) Definition: lp.c:2553 Definition: type_lpi.h:82 static SCIP_RETCODE lpDualSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:12686 #define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum) Definition: memory.h:412 Definition: type_lpi.h:48 Definition: struct_lp.h:83 static void lpUpdateObjNorms(SCIP_LP *lp, SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj) Definition: lp.c:3468 Definition: type_lpi.h:81 SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind) Definition: lpi_clp.cpp:3002 SCIP_RETCODE SCIProwFree(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp) Definition: lp.c:5033 Definition: struct_event.h:185 static SCIP_RETCODE transformMIRRow(SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real *mircoef, SCIP_Real *mirrhs, SCIP_Bool *varused, int *varinds, int *nvarinds, int *varsign, int *boundtype, SCIP_Bool *freevariable, SCIP_Bool *localbdsused) Definition: lp.c:10105 SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover) Definition: lpi_clp.cpp:1780 SCIP_Bool SCIPsetIsFeasNegative(SCIP_SET *set, SCIP_Real val) Definition: set.c:5710 Definition: type_stat.h:42 static SCIP_RETCODE lpFlushAndSolve(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, int resolveitlim, int harditlim, SCIP_Bool needprimalray, SCIP_Bool needdualray, int fastmip, SCIP_Bool tightprimfeastol, SCIP_Bool tightdualfeastol, SCIP_Bool fromscratch, SCIP_Bool keepsol, SCIP_Bool *lperror) Definition: lp.c:14313 SCIP_RETCODE SCIProwAddConstant(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real addval) Definition: lp.c:5403 SCIP_RETCODE SCIPeventCreateRowConstChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_Real oldval, SCIP_Real newval) Definition: event.c:844 SCIP_Real SCIPcolCalcFarkasCoef(SCIP_COL *col, SCIP_Real *dualfarkas) Definition: lp.c:3836 static SCIP_RETCODE lpSetTiming(SCIP_LP *lp, SCIP_CLOCKTYPE timing, SCIP_Bool enabled, SCIP_Bool *success) Definition: lp.c:3048 Definition: type_clock.h:36 Definition: type_lpi.h:59 Definition: type_var.h:56 |