lpexact.c
Go to the documentation of this file.
36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
97#ifdef SCIP_DISABLED_CODE /* enable this to check links between columns and rows in LP data structure (for debugging, very slow!) */
194 assert(SCIPrationalIsApproxEQReal(set, colexact->flushedobj, fpcol->flushedobj, SCIP_R_ROUND_NEAREST));
195 assert(SCIPrationalIsApproxEQReal(set, colexact->lb, fpcol->lb, SCIP_R_ROUND_DOWNWARDS) || (SCIPrationalIsNegInfinity(colexact->lb) && SCIPsetIsInfinity(set, -fpcol->lb)));
196 assert(SCIPrationalIsApproxEQReal(set, colexact->ub, fpcol->ub, SCIP_R_ROUND_UPWARDS) || (SCIPrationalIsInfinity(colexact->ub) && SCIPsetIsInfinity(set, fpcol->ub)));
220 synced = SCIPrationalIsGEReal(rowexact->lhs, fprow->lhs) || (SCIPrationalIsNegInfinity(rowexact->lhs) && SCIPsetIsInfinity(set, -fprow->lhs));
221 synced = synced && (SCIPrationalIsLEReal(rowexact->rhs, fprow->rhs) || (SCIPrationalIsInfinity(rowexact->rhs) && SCIPsetIsInfinity(set, fprow->rhs)));
222 synced = synced && (SCIPrationalIsApproxEQReal(set, rowexact->constant, fprow->constant, SCIP_R_ROUND_NEAREST) );
235/** checks if the exact lp and lp are consistent (same number of rows/cols, and all cols/rows in sync) */
291/** sorts column entries of linked rows currently in the LP such that lower row indices precede higher ones */
306 SCIPsortPtrPtrInt((void**)col->rows, (void**)col->vals, col->linkpos, SCIProwExactComp, col->nlprows );
322/** sorts column entries of unlinked rows or rows currently not in the LP such that lower row indices precede higher
358/** sorts row entries of linked columns currently in the LP such that lower column indices precede higher ones */
390/** sorts row entries of unlinked columns or columns currently not in the LP such that lower column indices precede
408 (void**)(&(row->cols[row->nlpcols])), (void**)&(row->vals[row->nlpcols]), &(row->valsinterval[row->nlpcols]),
553/** searches coefficient in part of the column, returns position in col vector or -1 if not found */
628/** searches coefficient in part of the row, returns position in col vector or -1 if not found */
770/** moves a coefficient in a column to a different place, and updates all corresponding data structures */
875/** moves a coefficient in a row to a different place, and updates all corresponding data structures */
1053 /* 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
1080 /* if the column is in current LP, we have to link it to the row, because otherwise, the primal information
1085 /* this call might swap the current row with the first non-LP/not linked row, s.t. insertion position
1107 /* if the column is in current LP, now both conditions, row->cols[linkpos]->lppos >= 0 and row->linkpos[linkpos] >= 0
1145 SCIPrationalDebugMessage("added coefficient %q * <%s> at position %d (%d/%d) to column <%s> (nunlinked=%d)\n",
1181 /* if row is a linked LP row, move last linked LP coefficient to position of empty slot (deleted coefficient) */
1214 SCIPrationalDebugMessage("changing coefficient %q * <%s> at position %d of column <%s> to %g\n",
1257 SCIPerrorMessage("cannot add a coefficient to the locked unmodifiable row <%s>\n", row->fprow->name);
1268 /* 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
1297 /* if the row is in current LP, we have to link it to the column, because otherwise, the dual information
1302 /* this call might swap the current column with the first non-LP/not linked column, s.t. insertion position
1324 /* if the row is in current LP, now both conditions, col->rows[linkpos]->lppos >= 0 and col->linkpos[linkpos] >= 0
1362 SCIPrationalDebugMessage("added coefficient %q * <%s> at position %d (%d/%d) to row <%s> (nunlinked=%d)\n",
1394 SCIPerrorMessage("cannot delete a coefficient from the locked unmodifiable row <%s>\n", row->fprow->name);
1401 /* if column is a linked LP column, move last linked LP coefficient to position of empty slot (deleted coefficient) */
1444 SCIPerrorMessage("cannot change a coefficient of the locked unmodifiable row <%s>\n", row->fprow->name);
1499 /* this call might swap the current row with the first non-LP/not linked row, but this is of no harm */
1504 assert(col->nlprows == 0 || col->rows[col->nlprows-1]->cols[col->linkpos[col->nlprows-1]] == col);
1505 assert(col->nlprows == 0 || col->rows[col->nlprows-1]->linkpos[col->linkpos[col->nlprows-1]] == col->nlprows-1);
1542 /* this call might swap the current column with the first non-LP/not linked column, but this is of no harm */
1547 assert(row->nlpcols == 0 || row->cols[row->nlpcols-1]->rows[row->linkpos[row->nlpcols-1]] == row);
1548 assert(row->nlpcols == 0 || row->cols[row->nlpcols-1]->linkpos[row->linkpos[row->nlpcols-1]] == row->nlpcols-1);
1787 SCIPdebugMessage("flushing col deletions: shrink exact LP from %d to %d columns\n", lp->nlpicols, lp->lpifirstchgcol);
1924 SCIPsetDebugMsg(set, "flushing col additions: enlarge exact LP from %d to %d columns\n", lp->nlpicols, lp->ncols);
1925 SCIP_CALL( SCIPlpiExactAddCols(lp->lpiexact, naddcols, obj, lb, ub, name, nnonz, beg, ind, val) );
1990 SCIPsetDebugMsg(set, "flushing row deletions: shrink exact LP from %d to %d rows\n", lp->nlpirows, lp->lpifirstchgrow);
2103 SCIPrationalDebugMessage(" %q %d(<%s>)", row->vals[i], lpipos+1, SCIPvarGetName(row->cols[i]->fpcol->var));
2120 SCIPsetDebugMsg(set, "flushing row additions: enlarge LP from %d to %d rows\n", lp->nlpirows, lp->nrows);
2121 SCIP_CALL( SCIPlpiExactAddRows(lp->lpiexact, naddrows, lhs, rhs, name, nnonz, beg, ind, val) );
2225 if( !SCIPrationalIsEQ(col->flushedlb, col->lb) || !SCIPrationalIsEQ(col->flushedub, col->ub) ) /*lint !e777*/
2245 SCIPsetDebugMsg(set, "flushing objective changes: change %d objective values of %d changed columns\n", nobjchg, lp->nchgcols);
2258 SCIPsetDebugMsg(set, "flushing bound changes: change %d bounds of %d changed columns\n", nbdchg, lp->nchgcols);
2344 if( SCIPrationalIsEQ(row->flushedlhs, newlhs) || SCIPrationalIsEQ(row->flushedrhs, newrhs) ) /*lint !e777*/
2366 SCIPsetDebugMsg(set, "flushing side changes: change %d sides of %d exact rows\n", nchg, lp->nchgrows);
2399 assert((lp->nloosevars > 0) || (lp->looseobjvalinf == 0 && SCIPrationalIsZero(lp->looseobjval)));
2558 /* We disabled the objective limit in the LP solver or we want so solve exactly and thus cannot rely on the LP
2559 * solver's objective limit handling, so we return here and do not apply the objective limit. */
2574 /* check whether the parameter was actually changed or already was at the boundary of the LP solver's parameter range */
2667 /* set the correct status for rows that never made it to the lpi (this is special for the exact lp) */
2870 SCIPerrorMessage("coefficient for row <%s> doesn't exist in column <%s>\n", row->fprow->name, SCIPvarGetName(col->var));
3014 SCIPrationalDebugMessage("changing objective value of column <%s> from %q to %q\n", SCIPvarGetName(col->var), col->obj, newobj);
3030 /* in any case, when the sign of the objective (and thereby the best bound) changes, the variable has to enter the
3033 else if( (SCIPrationalIsNegative(col->obj) && SCIPrationalIsPositive(newobj) && SCIPrationalIsZero(col->ub))
3034 || (SCIPrationalIsPositive(col->obj) && SCIPrationalIsNegative(newobj) && SCIPrationalIsZero(col->lb)) )
3061 SCIPrationalDebugMessage("changing lower bound of column <%s> from %q to %q\n", SCIPvarGetName(col->var), col->lb, newlb);
3077 /* 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
3106 SCIPrationalDebugMessage("changing upper bound of column <%s> from %q to %q\n", SCIPvarGetName(col->var), col->ub, newub);
3122 /* 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
3162 * in case, for example, lhs > rhs but they are equal with tolerances, one could pass lhs=rhs=lhs+rhs/2 to
3298 if( SCIPrationalIsNegInfinity(SCIPvarGetLbGlobalExact(var)) && SCIPrationalIsInfinity(SCIPvarGetUbGlobalExact(var)) )
3306 ((maxboundval > 0) && SCIPrationalIsGTReal(SCIPvarGetUbGlobalExact(var), (double) maxboundval)) ||
3328 SCIP_CALL( SCIProwExactAddCoef(rowexact, blkmem, set, eventqueue, lpexact, SCIPcolGetColExact(row->cols[i]), newval) );
3333 rhschange += (SCIPintervalGetInf(rowexact->valsinterval[rowexact->len - 1]) - SCIPintervalGetSup(rowexact->valsinterval[rowexact->len - 1])) * SCIPvarGetLbGlobal(var);
3346 SCIP_CALL( SCIProwDelCoef(rowexact->fprow, blkmem, set, eventqueue, lpexact->fplp, rowexact->fprow->cols[i]) );
3351 SCIP_CALL( SCIProwAddCoef(rowexact->fprow, blkmem, set, eventqueue, lpexact->fplp, rowexact->cols[i]->fpcol,
3370 * @note This may change the floating-point coefficients slightly if the rational representation is rounded to smaller
3415 SCIP_CALL( SCIProwExactCreate(row, fprow, NULL, blkmem, set, stat, lpexact, 0, NULL, NULL, tmplhs, tmpval, TRUE) );
3428 SCIP_CALL( rowExactCreateFromRowLimitEncodingLength(fprow, workrow, set, blkmem, eventqueue, lpexact) );
3440 SCIP_CALL( SCIPvarAddToRowExact(SCIPcolGetVar(col), blkmem, set, stat, eventqueue, prob, lpexact, workrow, tmpval) );
3441 assert(SCIPrationalIsFpRepresentable(SCIProwExactGetVals(workrow)[SCIProwExactGetNNonz(workrow) -1]));
3500 /* we need to adapt the two fprows that are created, so that one is a relaxation wrt the lhs and the other wrt the rhs of the row */
3513 /* unbounded variable with non fp-representable coefficient: var would need to be split in pos/neg to be relaxable */
3554 /* change the sides where necessary (do not do it immediately to not change rounding mode too often) */
3564 rhsrelax += ubreal >= 0 ? (rowexactvalsinterval[idx].sup - rowexactvalsinterval[idx].inf) * ubreal : 0;
3566 rhsrelax -= lbreal <= 0 ? (rowexactvalsinterval[idx].sup - rowexactvalsinterval[idx].inf) * lbreal : 0;
3580 lhsrelax -= ubreal >= 0 ? (rowexactvalsinterval[i].sup - rowexactvalsinterval[i].inf) * ubreal : 0;
3582 lhsrelax += lbreal <= 0 ? (rowexactvalsinterval[i].sup - rowexactvalsinterval[i].inf) * lbreal : 0;
3605 /* we created the fprows directly from the exact row, so we should only have active variables inside it */
3607 SCIP_CALL( SCIProwChgConstant(rowlhs, blkmem, set, stat, eventqueue, lpexact->fplp, SCIPrationalRoundReal(row->constant, SCIP_R_ROUND_DOWNWARDS)) );
3634 /* we created the fprows directly from the exact row, so we should only have active variables inside it */
3637 SCIP_CALL( SCIProwChgConstant(rowlhs, blkmem, set, stat, eventqueue, lpexact->fplp, SCIPrationalRoundReal(row->constant, SCIP_R_ROUND_UPWARDS)) );
3638 SCIP_CALL( SCIProwChgConstant(rowrhs, blkmem, set, stat, eventqueue, lpexact->fplp, SCIPrationalRoundReal(row->constant, SCIP_R_ROUND_DOWNWARDS)) );
3661 SCIPsetDebugMsg(set, "flushing exact LP changes: old (%d cols, %d rows), nchgcols=%d, nchgrows=%d, firstchgcol=%d, firstchgrow=%d, new (%d cols, %d rows), flushed=%u\n",
3662 lpexact->nlpicols, lpexact->nlpirows, lpexact->nchgcols, lpexact->nchgrows, lpexact->lpifirstchgcol, lpexact->lpifirstchgrow, lpexact->ncols, lpexact->nrows, lpexact->flushed);
3683 /* we can't retrieve the solution from Qsoptex after anything was changed, so we need to resolve the lp */
3710/** ensures all rows/columns are correctly updated, but changes are not yet communicated to the exact LP solver */
3725 SCIPsetDebugMsg(set, "flushing exact LP changes: old (%d cols, %d rows), nchgcols=%d, nchgrows=%d, firstchgcol=%d, firstchgrow=%d, new (%d cols, %d rows), flushed=%u\n",
3726 lpexact->nlpicols, lpexact->nlpirows, lpexact->nchgcols, lpexact->nchgrows, lpexact->lpifirstchgcol, lpexact->lpifirstchgrow, lpexact->ncols, lpexact->nrows, lpexact->flushed);
3735 /* we still flush added/deleted columns since this should only happen at the very start of the solve */
3869 SCIPrationalFreeBlockArray(blkmem, &projshiftdata->interiorpoint, projshiftdata->nextendedrows);
3879 BMSfreeBlockMemoryArrayNull(blkmem, &projshiftdata->includedrows, projshiftdata->nextendedrows);
3880 BMSfreeBlockMemoryArrayNull(blkmem, &projshiftdata->projshiftbasis, projshiftdata->nextendedrows);
3898/** returns whether the success rate of the Neumaier-Shcherbina safe bounding method is sufficiently high */
3952 SCIP_CALL( SCIPlpiExactCreate(&(*lpexact)->lpiexact, messagehdlr, name, SCIP_OBJSEN_MINIMIZE) );
4108 SCIPsetDebugMsg(set, "adding column <%s> to exact LP (%d rows, %d cols)\n", SCIPvarGetName(col->var), lpexact->nrows, lpexact->ncols);
4147 SCIPsetDebugMsg(set, "adding row <%s> to LP (%d rows, %d cols)\n", rowexact->fprow->name, lpexact->nrows, lpexact->ncols);
4153 SCIPrationalDebugMessage(" %q<%s>", rowexact->vals[i], SCIPvarGetName(rowexact->cols[i]->var));
4175#define lpCutoffDisabled(set) (set->lp_disablecutoff == 1 || (set->nactivepricers > 0 && set->lp_disablecutoff == 2))
4191 SCIPsetDebugMsg(set, "setting exact LP upper objective limit from %g to %g\n", lpexact->cutoffbound, cutoffbound);
4197 /* if the cutoff bound is increased, and the LP was proved to exceed the old cutoff, it is no longer solved */
4205 /* if the cutoff bound is decreased below the current optimal value, the LP now exceeds the objective limit;
4206 * if the objective limit in the LP solver was disabled, the solution status of the LP is not changed
4208 else if( !lpCutoffDisabled(set) && lpexact->lpsolstat == SCIP_LPSOLSTAT_OPTIMAL && lpexact->solved && lpexact->flushed
4221/** maximal number of verblevel-high messages about numerical trouble in LP that will be printed
4222 * when this number is reached and display/verblevel is not full, then further messages are suppressed in this run
4252 /* if already max number of messages about numerical trouble in LP on verblevel at most high, then skip message */
4276 if( set->disp_verblevel < SCIP_VERBLEVEL_FULL && verblevel <= SCIP_VERBLEVEL_HIGH && stat->nnumtroublelpmsgs > MAXNUMTROUBLELPMSGS )
4278 SCIPmessagePrintInfo(messagehdlr, " -- further messages will be suppressed (use display/verblevel=5 to see all)");
4285/** flushes the exact LP and solves it with the primal or dual simplex algorithm, depending on the current basis feasibility */
4295 int harditlim, /**< maximal number of LP iterations to perform (hard limit for all LP calls), or -1 for no limit */
4296 SCIP_Bool fromscratch, /**< should the LP be solved from scratch without using current basis? */
4316 SCIP_CALL( SCIPlpiExactSetIntpar(lpexact->lpiexact, SCIP_LPPAR_LPINFO, (int) set->exact_lpinfo) );
4376 SCIP_CALL( lpExactSetObjlim(lpexact, set, lpexact->cutoffbound - SCIPrationalRoundReal(getFiniteLooseObjvalExact(lpexact, set, prob), SCIP_R_ROUND_DOWNWARDS), &success) );
4403 SCIP_CALL( SCIPlpiExactGetSolFeasibility(lpexact->lpiexact, &(lpexact->primalfeasible), &(lpexact->dualfeasible)) );
4408 assert(!(SCIPlpiExactIsOptimal(lpexact->lpiexact) && SCIPlpiExactIsObjlimExc(lpexact->lpiexact) && SCIPlpiExactIsPrimalInfeasible(lpexact->lpiexact) &&
4409 SCIPlpiExactExistsPrimalRay(lpexact->lpiexact) && SCIPlpiExactIsIterlimExc(lpexact->lpiexact) && SCIPlpiExactIsTimelimExc(lpexact->lpiexact)));
4417 SCIPdebugMessage("Exact lp solve terminated with optimal. Safe dual bound is %e, previous lp obj-val was %e \n",
4422 if( !SCIPsetIsInfinity(set, lpexact->lpiobjlim) && SCIPrationalIsGTReal(lpexact->lpobjval, lpexact->lpiobjlim) )
4424 /* the solver may return the optimal value, even if this is greater or equal than the upper bound */
4425 SCIPrationalDebugMessage("optimal solution %q exceeds objective limit %.15g\n", lpexact->lpobjval, lp->lpiobjlim);
4457 SCIPdebugMessage("(node %" SCIP_LONGINT_FORMAT ") error or unknown return status of %s in LP %" SCIP_LONGINT_FORMAT " (internal status: %d)\n",
4469 SCIPsetDebugMsg(set, "solving exact LP with %d returned solstat=%d (internal status: %d, primalfeasible=%u, dualfeasible=%u)\n",
4471 SCIPlpiExactIsPrimalFeasible(lpexact->lpiexact), SCIPlpiExactIsDualFeasible(lpexact->lpiexact));
4515 /* compute the limit for the number of LP resolving iterations, if needed (i.e. if limitresolveiters == TRUE) */
4549 lpExactNumericalTroubleMessage(messagehdlr, set, stat, SCIP_VERBLEVEL_FULL, "solve exact lp again from scratch");
4600 SCIP_CALL( SCIPlpExactGetSol(lpexact, set, stat, primalfeaspointer, dualfeaspointer, overwritefplp) );
4613 SCIPmessagePrintInfo(messagehdlr, "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in exact LP %" SCIP_LONGINT_FORMAT " -- ",stat->nnodes, stat->nlps);
4633 "(node %" SCIP_LONGINT_FORMAT ") infeasibility of LP %" SCIP_LONGINT_FORMAT " could not be proven by dual ray\n", stat->nnodes, stat->nlps);
4644 /* the Farkas proof does not prove infeasibility (this can happen due to numerical problems) and nothing
4647 SCIPmessagePrintInfo(messagehdlr, "(node %" SCIP_LONGINT_FORMAT ") numerical troubles in exakt LP %" SCIP_LONGINT_FORMAT " -- ",stat->nnodes, stat->nlps);
4657 SCIPwarningMessage(set->scip, "Exact LP solver returned unbounded ray: handling not fully supported.\n");
4662 /* Some LP solvers, e.g. CPLEX With FASTMIP setting, do not apply the final pivot to reach the dual solution
4663 * exceeding the objective limit. In some cases like branch-and-price, however, we must make sure that a dual
4664 * feasible solution exists that exceeds the objective limit. Therefore, we have to continue solving it without
4665 * objective limit for at least one iteration. We first try to continue with FASTMIP for one additional simplex
4666 * iteration using the steepest edge pricing rule. If this does not fix the problem, we temporarily disable
4672 /* actually, SCIPsetIsGE(set, lp->lpobjval, lp->lpiuobjlim) should hold, but we are a bit less strict in
4678 /* do one additional simplex step if the computed dual solution doesn't exceed the objective limit */
4685 SCIPrationalDebugMessage("objval = %q < %f = lp->lpiobjlim, but status objlimit\n", objval, lp->lpiobjlim);
4696 SCIP_CALL( lpExactFlushAndSolve(lpexact, blkmem, set, messagehdlr, stat, prob, eventqueue, 1, FALSE, lperror) );
4711 SCIPrationalDebugMessage(" ---> new objval = %q (solstat: %d, 1 add. step)\n", objval, solstat);
4731 /* optimal solution / objlimit with fastmip turned off / itlimit or timelimit, but objlimit exceeded */
4734 && SCIPrationalIsGEReal(objval, lpexact->cutoffbound - SCIPrationalRoundReal(getFiniteLooseObjvalExact(lpexact, set, prob), SCIP_R_ROUND_DOWNWARDS)) ) )
4768 if( SCIPrationalIsGEReal(objval, lp->cutoffbound - SCIPrationalRoundReal(getFiniteLooseObjvalExact(lpexact, set, prob), SCIP_R_ROUND_DOWNWARDS)) )
4776 /* LP solution is not feasible or objective limit was reached without the LP value really exceeding
4781 !SCIPrationalIsGEReal(objval, lp->cutoffbound - SCIPrationalRoundReal(getFiniteLooseObjvalExact(lpexact, set, prob), SCIP_R_ROUND_DOWNWARDS))) )
4783 SCIPmessagePrintInfo(messagehdlr, "(node %" SCIP_LONGINT_FORMAT ") numerical troubles exact in LP %" SCIP_LONGINT_FORMAT " \n ", stat->nnodes, stat->nlps);
4799 /* it might happen that we have no infeasibility proof for the current LP (e.g. if the LP was always solved
4805 "(node %" SCIP_LONGINT_FORMAT ") infeasibility of exact LP %" SCIP_LONGINT_FORMAT " could not be proven by dual ray\n", stat->nnodes, stat->nlps);
4814 /* the Farkas proof does not prove infeasibility (this can happen due to numerical problems) and nothing
4817 SCIPmessagePrintInfo(messagehdlr, "(node %" SCIP_LONGINT_FORMAT ") numerical troubles exact in LP %" SCIP_LONGINT_FORMAT " \n ", stat->nnodes, stat->nlps);
4856 SCIPmessagePrintInfo(messagehdlr, "(node %" SCIP_LONGINT_FORMAT ") numerical troubles exact in LP %" SCIP_LONGINT_FORMAT " \n ",
4866 assert(SCIPrationalIsGEReal(objval, lp->cutoffbound - SCIPrationalRoundReal(getFiniteLooseObjvalExact(lpexact, set, prob), SCIP_R_ROUND_DOWNWARDS))
4892 SCIPmessagePrintWarning(messagehdlr, "LP solver reached time limit, but SCIP time limit is not exceeded yet; "
4897 /* set the status of the floating point lp also to timelimit to avoid using the uncorrected bound */
4948 SCIPdebugMessage("capture row <%s> with nuses=%d and nlocks=%u\n", row->fprow->name, row->nuses, row->nlocks);
4979 SCIPmessageFPrintInfo(messagehdlr, file, "(%g)<%s> ", SCIPrationalGetReal(row->vals[r]), SCIPvarGetName(row->cols[r]->var));
5110/** calculates the Farkas coefficient y^T A_i or reduced cost c - y^T A_i of a column i using the given dual Farkas vector y */
5187 assert((usefarkas && SCIPrationalIsZero(row->dualfarkas)) || SCIPrationalIsZero(row->dualsol));
5245 SCIPerrorMessage("coefficient for column <%s> doesn't exist in row <%s>\n", SCIPvarGetName(col->var), row->fprow->name);
5350 /* coefficient doesn't exist, or sorting is delayed: add coefficient to the end of the row's arrays */
5563 SCIPrationalIsPositive(rowexact->vals[i]) ? SCIPrationalSetRational(solval, colexact->lb) : SCIPrationalSetRational(solval, colexact->ub);
5565 SCIPrationalIsPositive(rowexact->vals[i]) ? SCIPrationalSetRational(solval, colexact->ub) : SCIPrationalSetRational(solval, colexact->lb);
5654/** returns the feasibility of a row in the current LP solution: negative value means infeasibility */
5683/** returns the pseudo feasibility of a row in the current pseudo solution: negative value means infeasibility */
5752/** sorts row entries such that LP columns precede non-LP columns and inside both parts lower column indices precede
5768/** sorts row, and merges equal column entries (resulting from lazy sorting and adding) into a single entry; removes
5769 * zero entries from row the row must not be linked to the columns; otherwise, we would need to update the columns as
5828 row->integral = row->integral && SCIPcolIsIntegral(cols[t]->fpcol) && SCIPrationalIsIntegral(vals[t]);
5839 row->integral = row->integral && SCIPcolIsIntegral(cols[t]->fpcol) && SCIPrationalIsIntegral(vals[t]);
5988 SCIPrationalAddProd(rowexact->pseudoactivity, rowexact->vals[i], SCIPcolExactGetBestBound(colexact));
6371/** updates current pseudo and loose objective values for a change in a variable's objective value or bounds */
6395 /* after changing a local bound on a LOOSE variable, we have to update the loose objective value, too */
6421/** updates current pseudo and loose objective value for a change in a variable's objective value */
6438 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN);
6440 /* the objective coefficient can only be changed during presolving, that implies that the global and local
6443 assert(lpexact->fplp->probing || SCIPrationalIsEQ(SCIPvarGetLbGlobalExact(var), SCIPvarGetLbLocalExact(var)));
6444 assert(lpexact->fplp->probing || SCIPrationalIsEQ(SCIPvarGetUbGlobalExact(var), SCIPvarGetUbLocalExact(var)));
6468/** updates current root pseudo objective value for a global change in a variable's lower bound */
6500/** updates current pseudo and loose objective value for a change in a variable's lower bound */
6518 assert(SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_COLUMN);
6535/** updates current root pseudo objective value for a global change in a variable's upper bound */
6585 assert(SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_COLUMN);
6616 assert(SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_COLUMN);
6643 assert(SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatusExact(var) == SCIP_VARSTATUS_COLUMN);
6779 /* get rid of numerical problems: set loose objective value explicitly to zero, if no loose variables remain */
6857 SCIP_Bool* primalfeasible, /**< pointer to store whether the solution is primal feasible, or NULL */
6858 SCIP_Bool* dualfeasible, /**< pointer to store whether the solution is dual feasible, or NULL */
6859 SCIP_Bool overwritefplp /**< should the floating point values be overwritten, e.g. if fp lp was infeasible */
6886 /* initialize return and feasibility flags; if primal oder dual feasibility shall not be checked, we set the
6928 stat->boundingerrorexlp += REALABS(lpexact->fplp->lpobjval - SCIPrationalRoundReal(lpexact->lpobjval, SCIP_R_ROUND_DOWNWARDS));
6970 (SCIPrationalIsNegInfinity(lpicols[c]->lb) || !SCIPrationalIsLT(lpicols[c]->primsol, lpicols[c]->lb))
6971 && (SCIPrationalIsInfinity(lpicols[c]->ub) || !SCIPrationalIsGT(lpicols[c]->primsol, lpicols[c]->ub));
6975 /* complementary slackness means that if a variable is not at its lower or upper bound, its reduced costs
6976 * must be non-positive or non-negative, respectively; in particular, if a variable is strictly within its
6979 if( stilldualfeasible && (SCIPrationalIsNegInfinity(lpicols[c]->lb) || SCIPrationalIsGT(lpicols[c]->primsol, lpicols[c]->lb)) )
6981 if( stilldualfeasible && (SCIPrationalIsInfinity(lpicols[c]->ub) || SCIPrationalIsLT(lpicols[c]->primsol, lpicols[c]->ub)) )
6984 SCIPrationalDebugMessage("col <%s> [%q,%q]: primsol=%q, redcost=%q, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
6985 SCIPvarGetName(lpicols[c]->var), lpicols[c]->lb, lpicols[c]->ub, lpicols[c]->primsol, lpicols[c]->redcost,
6989 !SCIPrationalIsGT(lpicols[c]->primsol, lpicols[c]->lb) || !SCIPrationalIsPositive(lpicols[c]->redcost),
6990 !SCIPrationalIsGT(lpicols[c]->primsol, lpicols[c]->ub) || !SCIPrationalIsNegative(lpicols[c]->redcost),
6993 /* we intentionally use an exact positive/negative check because ignoring small reduced cost values may lead to a
6994 * wrong bound value; if the corresponding bound is +/-infinity, we use zero reduced cost (if stilldualfeasible is
6999 if( SCIPrationalIsPositive(lpicols[c]->redcost) && !SCIPrationalIsNegInfinity(lpicols[c]->lb) )
7003 else if( SCIPrationalIsNegative(lpicols[c]->redcost) && !SCIPrationalIsInfinity(lpicols[c]->ub) )
7036 (SCIPrationalIsNegInfinity(lpirows[r]->lhs) ||SCIPrationalIsGE(lpirows[r]->activity, lpirows[r]->lhs))
7037 && (SCIPrationalIsInfinity(lpirows[r]->rhs) || SCIPrationalIsLE(lpirows[r]->activity, lpirows[r]->rhs));
7039 /* complementary slackness means that if the activity of a row is not at its left-hand or right-hand side,
7040 * its dual multiplier must be non-positive or non-negative, respectively; in particular, if the activity is
7044 (SCIPrationalIsNegInfinity(lpirows[r]->lhs) || SCIPrationalIsGT(lpirows[r]->activity, lpirows[r]->lhs)) )
7047 (SCIPrationalIsInfinity(lpirows[r]->rhs) || SCIPrationalIsLT(lpirows[r]->activity, lpirows[r]->rhs)) )
7050 SCIPrationalDebugMessage("<%s> [%q,%q] + %q: activity=%q, dualsol=%q, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
7056 !SCIPrationalIsGT(lpirows[r]->activity, lpirows[r]->lhs) || !SCIPrationalIsPositive(lpirows[r]->dualsol),
7057 !SCIPrationalIsLT(lpirows[r]->activity, lpirows[r]->rhs) || !SCIPrationalIsNegative(lpirows[r]->dualsol),
7060 /* we intentionally use an exact positive/negative check because ignoring small dual multipliers may lead to a
7061 * wrong bound value; if the corresponding side is +/-infinity, we use a zero dual multiplier (if
7062 * stilldualfeasible is TRUE, we are in the case that the dual multiplier is tiny with wrong sign)
7066 if( SCIPrationalIsPositive(lpirows[r]->dualsol) && !SCIPrationalIsNegInfinity(lpirows[r]->lhs) )
7071 else if( SCIPrationalIsNegative(lpirows[r]->dualsol) && !SCIPrationalIsInfinity(lpirows[r]->rhs) )
7079 /* if the objective value returned by the LP solver is smaller than the internally computed primal bound, then we
7080 * declare the solution primal infeasible; we assume primalbound and lpexact->lpobjval to be equal if they are both +/-
7083 /**@todo alternatively, if otherwise the LP solution is feasible, we could simply update the objective value */
7084 if( stillprimalfeasible && !(SCIPrationalIsInfinity(primalbound) && SCIPrationalIsInfinity(lpexact->lpobjval))
7088 SCIPrationalDebugMessage(" primalbound=%q, lpbound=%q, pfeas=%u(%u)\n", primalbound, lpexact->lpobjval,
7089 SCIPrationalIsLE(primalbound, lpexact->lpobjval), primalfeasible != NULL ? stillprimalfeasible : TRUE);
7092 /* if the objective value returned by the LP solver is smaller than the internally computed dual bound, we declare
7093 * the solution dual infeasible; we assume dualbound and lpexact->lpobjval to be equal if they are both +/- infinity
7095 /**@todo alternatively, if otherwise the LP solution is feasible, we could simply update the objective value */
7096 if( stilldualfeasible && !(SCIPrationalIsInfinity(dualbound) && SCIPrationalIsInfinity(lpexact->lpobjval))
7100 SCIPrationalDebugMessage(" dualbound=%q, lpbound=%q, dfeas=%u(%u)\n", dualbound, lpexact->lpobjval,
7101 SCIPrationalIsGE(dualbound, lpexact->lpobjval), dualfeasible != NULL ? stilldualfeasible : TRUE);
7128 SCIP_Bool* primalfeasible, /**< pointer to store whether the solution is primal feasible, or NULL */
7129 SCIP_Bool* rayfeasible /**< pointer to store whether the primal ray is a feasible unboundedness proof, or NULL */
7140 SCIP_RATIONAL** ray /**< array for storing primal ray values, they are stored w.r.t. the problem index of the variables,
7196 * @note The Farkas proof is checked for validity if lp/checkfarkas = TRUE and @p valid is not NULL.
7203 SCIP_Bool overwritefplp /**< should the floating point values be overwritten, e.g. if fp lp was infeasible */
7260 SCIPrationalDebugMessage(" row <%s>: dualfarkas=%q\n", lpirows[r]->fprow->name, dualfarkas[r]);
7286 SCIPrationalDebugMessage("farkas proof is invalid: row <%s>[lhs=%q,rhs=%q,c=%q] has multiplier %q\n",
7295 /* dual multipliers, for which the corresponding row side in infinite, are treated as zero if they are zero
7374 * due to numerics, it might happen that the left-hand side of the aggregation is larger/smaller or equal than +/- infinity.
7377 if( checkfarkas && (SCIPrationalIsAbsInfinity(farkaslhs) || SCIPrationalIsGE(maxactivity, farkaslhs)) )
7379 SCIPrationalDebugMessage("farkas proof is invalid: maxactivity=%q, lhs=%q\n", maxactivity, farkaslhs);
7412 * @note This method returns the objective value of the current LP solution, which might be primal or dual infeasible
7413 * if a limit was hit during solving. It must not be used as a dual bound if the LP solution status is
7424 assert((lpexact->nloosevars > 0) || (lpexact->looseobjvalinf == 0 && SCIPrationalIsZero(lpexact->looseobjval)));
7435/** gets the pseudo objective value for the current search node; that is all variables set to their best (w.r.t. the
7547/** resets the LP to the empty LP by removing all columns and rows from LP, releasing all rows, and flushing the
7633 SCIP_Bool allowexact /**< TRUE if next safe bounding call should be allowed to be exact, FALSE otherwise */
7706 /* we do not save the farkas coefficient, since it can be recomputed; thus, we invalidate it here */
7709 /* if the column was created after performing the storage (possibly during probing), we treat it as implicitly zero;
7814 /* if the row was created after performing the storage (possibly during probing), we treat it as basic;
7942/** locks an unmodifiable row, which forbids further changes; has no effect on modifiable rows */
7956/** unlocks a lock of an unmodifiable row; a row with no sealed lock may be modified; has no effect on modifiable rows */
8125 SCIP_Bool wasprimchecked, /**< true if the LP solution has passed the primal feasibility check */
8148 /* @todo: setting feasibility to TRUE might be wrong because in probing mode, the state is even saved when the LP was
8259 SCIP_CALL( rowExactStoreSolVals(lpexact->rows[r], blkmem, lpexact->storedsolvals->lpsolstat == SCIP_LPSOLSTAT_INFEASIBLE) );
8265 SCIP_CALL( SCIPlpiExactGetIntpar(lpexact->lpiexact, SCIP_LPPAR_LPITLIM, &lpexact->divinglpiitlim) );
8279/** quits exact LP diving and resets bounds and objective values of columns to the current node's values */
8298 SCIPsetDebugMsg(set, "exact diving ended (LP flushed: %u, solstat: %d)\n", lpexact->flushed, SCIPlpExactGetSolstat(lpexact));
8307 SCIP_CALL( SCIPcolExactChgObj(SCIPvarGetColExact(var), set, lpexact, SCIPvarGetObjExact(var)) );
8308 SCIP_CALL( SCIPcolExactChgLb(SCIPvarGetColExact(var), set, lpexact, SCIPvarGetLbLocalExact(var)) );
8309 SCIP_CALL( SCIPcolExactChgUb(SCIPvarGetColExact(var), set, lpexact, SCIPvarGetUbLocalExact(var)) );
8342 /* reload LPI state saved at start of diving and free it afterwards; it may be NULL, in which case simply nothing
8346 lpexact->divelpwasprimfeas, lpexact->divelpwasprimchecked, lpexact->divelpwasdualfeas, lpexact->divelpwasdualchecked) );
8360 /* we can just always reload the buffered LP solution values at start of diving; this has the advantage that we
8380 SCIP_CALL( colExactRestoreSolVals(lpexact->cols[c], blkmem, stat->lpcount, set->lp_freesolvalbuffers) );
8385 SCIP_CALL( rowExactRestoreSolVals(lpexact->rows[r], blkmem, stat->lpcount, set->lp_freesolvalbuffers,
8396 /* we still need to copy the exact lp objval back because the safe bounding result is saved there */
internal methods for clocks and timing issues
internal methods for storing cuts in a cut pool
internal methods for managing events
SCIP_Bool SCIPlpiExactHasDualRay(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:788
SCIP_RETCODE SCIPlpiExactSetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real dval)
Definition: lpiexact_none.c:1194
SCIP_RETCODE SCIPlpiExactSetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
Definition: lpiexact_none.c:979
SCIP_Bool SCIPlpiExactHasStateBasis(SCIP_LPIEXACT *lpi, SCIP_LPISTATE *lpistate)
Definition: lpiexact_none.c:1114
SCIP_RETCODE SCIPlpiExactGetObj(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **vals)
Definition: lpiexact_none.c:555
SCIP_RETCODE SCIPlpiExactGetObjval(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval)
Definition: lpiexact_none.c:890
SCIP_RETCODE SCIPlpiExactWriteLP(SCIP_LPIEXACT *lpi, const char *fname)
Definition: lpiexact_none.c:1259
SCIP_Bool SCIPlpiExactHasPrimalRay(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:734
SCIP_RETCODE SCIPlpiExactGetDualfarkas(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **dualfarkas)
Definition: lpiexact_none.c:934
SCIP_RETCODE SCIPlpiExactSolveDual(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:634
SCIP_RETCODE SCIPlpiExactSetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int ival)
Definition: lpiexact_none.c:1171
SCIP_Bool SCIPlpiExactIsPrimalUnbounded(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:744
SCIP_RETCODE SCIPlpiExactGetSides(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, SCIP_RATIONAL **lhss, SCIP_RATIONAL **rhss)
Definition: lpiexact_none.c:585
SCIP_Bool SCIPlpiExactIsPrimalInfeasible(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:754
SCIP_Real SCIPlpiExactInfinity(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:1216
SCIP_RETCODE SCIPlpiExactGetSolFeasibility(SCIP_LPIEXACT *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
Definition: lpiexact_none.c:706
SCIP_Bool SCIPlpiExactExistsPrimalRay(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:722
SCIP_RETCODE SCIPlpiExactAddRows(SCIP_LPIEXACT *lpi, int nrows, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, char **rownames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
Definition: lpiexact_none.c:261
SCIP_RETCODE SCIPlpiExactCreate(SCIP_LPIEXACT **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
Definition: lpiexact_none.c:126
SCIP_Bool SCIPlpiExactIsIterlimExc(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:848
SCIP_Bool SCIPlpiExactIsPrimalFeasible(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:764
SCIP_Bool SCIPlpiExactIsDualFeasible(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:818
SCIP_Bool SCIPlpiExactIsOptimal(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:828
SCIP_RETCODE SCIPlpiExactAddCols(SCIP_LPIEXACT *lpi, int ncols, SCIP_RATIONAL **obj, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, char **colnames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
Definition: lpiexact_none.c:215
SCIP_RETCODE SCIPlpiExactGetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
Definition: lpiexact_none.c:967
SCIP_RETCODE SCIPlpiExactDelCols(SCIP_LPIEXACT *lpi, int firstcol, int lastcol)
Definition: lpiexact_none.c:245
SCIP_RETCODE SCIPlpiExactChgObj(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **obj)
Definition: lpiexact_none.c:401
SCIP_RETCODE SCIPlpiExactGetPrimalRay(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **ray)
Definition: lpiexact_none.c:923
SCIP_RETCODE SCIPlpiExactGetBounds(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **lbs, SCIP_RATIONAL **ubs)
Definition: lpiexact_none.c:570
int SCIPlpiExactGetInternalStatus(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:868
SCIP_Bool SCIPlpiExactIsObjlimExc(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:838
SCIP_RETCODE SCIPlpiExactGetNCols(SCIP_LPIEXACT *lpi, int *ncols)
Definition: lpiexact_none.c:438
SCIP_RETCODE SCIPlpiExactChgSides(SCIP_LPIEXACT *lpi, int nrows, int *ind, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs)
Definition: lpiexact_none.c:362
SCIP_RETCODE SCIPlpiExactGetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpiexact_none.c:1061
SCIP_RETCODE SCIPlpiExactDelRows(SCIP_LPIEXACT *lpi, int firstrow, int lastrow)
Definition: lpiexact_none.c:287
SCIP_RETCODE SCIPlpiExactGetNRows(SCIP_LPIEXACT *lpi, int *nrows)
Definition: lpiexact_none.c:423
SCIP_Bool SCIPlpiExactIsTimelimExc(SCIP_LPIEXACT *lpi)
Definition: lpiexact_none.c:858
SCIP_RETCODE SCIPlpiExactGetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
Definition: lpiexact_none.c:1182
SCIP_RETCODE SCIPlpiExactChgBounds(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub)
Definition: lpiexact_none.c:349
SCIP_RETCODE SCIPlpiExactFreeState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpiexact_none.c:1101
SCIP_RETCODE SCIPlpiExactDelRowset(SCIP_LPIEXACT *lpi, int *dstat)
Definition: lpiexact_none.c:303
SCIP_RETCODE SCIPlpiExactGetSol(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval, SCIP_RATIONAL **primsol, SCIP_RATIONAL **dualsol, SCIP_RATIONAL **activity, SCIP_RATIONAL **redcost)
Definition: lpiexact_none.c:907
SCIP_RETCODE SCIPlpiExactGetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int *ival)
Definition: lpiexact_none.c:1159
SCIP_RETCODE SCIPlpiExactSetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE *lpistate)
Definition: lpiexact_none.c:1078
SCIP_RETCODE SCIPlpiExactGetIterations(SCIP_LPIEXACT *lpi, int *iterations)
Definition: lpiexact_none.c:945
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
Definition: lpi_clp.cpp:2995
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
Definition: lpi_clp.cpp:3550
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_clp.cpp:3531
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_clp.cpp:3417
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
Definition: scip_message.c:120
void SCIPintervalSetRoundingModeUpwards(void)
Definition: intervalarith.c:353
void SCIPintervalSetRoundingModeDownwards(void)
Definition: intervalarith.c:345
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
Definition: intervalarith.c:406
SCIP_ROUNDMODE SCIPintervalGetRoundingMode(void)
Definition: intervalarith.c:277
void SCIPintervalSetRoundingMode(SCIP_ROUNDMODE roundmode)
Definition: intervalarith.c:269
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
Definition: intervalarith.c:422
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
Definition: intervalarith.c:414
void SCIPintervalSetRational(SCIP_INTERVAL *resultant, SCIP_RATIONAL *value)
Definition: intervalarith.c:434
SCIP_RETCODE SCIPprintRowExact(SCIP *scip, SCIP_ROWEXACT *row, FILE *file)
Definition: scip_lpexact.c:419
SCIP_Bool SCIPrationalIsLTReal(SCIP_RATIONAL *rat, SCIP_Real real)
Definition: rational.cpp:1576
SCIP_Bool SCIPrationalIsFpRepresentable(SCIP_RATIONAL *rational)
Definition: rational.cpp:1710
void SCIPrationalMin(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:1342
SCIP_RETCODE SCIPrationalCreateBlock(BMS_BLKMEM *blkmem, SCIP_RATIONAL **rational)
Definition: rational.cpp:108
void SCIPrationalMult(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:1066
void SCIPrationalAdd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:935
SCIP_Real SCIPrationalGetReal(SCIP_RATIONAL *rational)
Definition: rational.cpp:2085
SCIP_RETCODE SCIPrationalCreateString(BMS_BLKMEM *mem, SCIP_RATIONAL **rational, const char *desc)
Definition: rational.cpp:796
SCIP_Bool SCIPrationalIsApproxEQReal(SCIP_SET *set, SCIP_RATIONAL *rat, SCIP_Real real, SCIP_ROUNDMODE_RAT roundmode)
Definition: rational.cpp:1451
void SCIPrationalFreeBlock(BMS_BLKMEM *mem, SCIP_RATIONAL **rational)
Definition: rational.cpp:461
SCIP_Bool SCIPrationalIsAbsInfinity(SCIP_RATIONAL *rational)
Definition: rational.cpp:1680
SCIP_Bool SCIPrationalIsLT(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
Definition: rational.cpp:1503
void SCIPrationalSetReal(SCIP_RATIONAL *res, SCIP_Real real)
Definition: rational.cpp:603
SCIP_Bool SCIPrationalIsGT(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
Definition: rational.cpp:1474
SCIP_RETCODE SCIPrationalCopyBlock(BMS_BLKMEM *mem, SCIP_RATIONAL **result, SCIP_RATIONAL *src)
Definition: rational.cpp:151
void SCIPrationalFreeBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
Definition: rational.cpp:473
SCIP_RETCODE SCIPrationalCopyBlockArray(BMS_BLKMEM *mem, SCIP_RATIONAL ***target, SCIP_RATIONAL **src, int len)
Definition: rational.cpp:249
void SCIPrationalDiff(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:983
SCIP_Bool SCIPrationalIsLEReal(SCIP_RATIONAL *rat, SCIP_Real real)
Definition: rational.cpp:1615
SCIP_Bool SCIPrationalIsPositive(SCIP_RATIONAL *rational)
Definition: rational.cpp:1640
SCIP_RETCODE SCIPrationalCreateBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
Definition: rational.cpp:123
void SCIPrationalAddProd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:1173
SCIP_Bool SCIPrationalIsZero(SCIP_RATIONAL *rational)
Definition: rational.cpp:1624
void SCIPrationalSetRational(SCIP_RATIONAL *res, SCIP_RATIONAL *src)
Definition: rational.cpp:569
SCIP_Bool SCIPrationalIsGEReal(SCIP_RATIONAL *rat, SCIP_Real real)
Definition: rational.cpp:1606
SCIP_Bool SCIPrationalIsIntegral(SCIP_RATIONAL *rational)
Definition: rational.cpp:1691
SCIP_Bool SCIPrationalDenominatorIsLE(SCIP_RATIONAL *rational, SCIP_Longint val)
Definition: rational.cpp:2036
SCIP_Bool SCIPrationalIsGE(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
Definition: rational.cpp:1512
void SCIPrationalMessage(SCIP_MESSAGEHDLR *msg, FILE *file, SCIP_RATIONAL *rational)
Definition: rational.cpp:1790
void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
Definition: rational.cpp:630
void SCIPrationalSetFraction(SCIP_RATIONAL *res, SCIP_Longint nom, SCIP_Longint denom)
Definition: rational.cpp:582
void SCIPrationalNegate(SCIP_RATIONAL *res, SCIP_RATIONAL *op)
Definition: rational.cpp:1297
SCIP_Bool SCIPrationalIsNegative(SCIP_RATIONAL *rational)
Definition: rational.cpp:1650
SCIP_Bool SCIPrationalIsInfinity(SCIP_RATIONAL *rational)
Definition: rational.cpp:1660
void SCIPrationalFreeBlockArray(BMS_BLKMEM *mem, SCIP_RATIONAL ***ratblockarray, int size)
Definition: rational.cpp:501
SCIP_Real SCIPrationalRoundReal(SCIP_RATIONAL *rational, SCIP_ROUNDMODE_RAT roundmode)
Definition: rational.cpp:2110
SCIP_RETCODE SCIPrationalCreateBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***rational, int size)
Definition: rational.cpp:214
SCIP_Bool SCIPrationalIsNegInfinity(SCIP_RATIONAL *rational)
Definition: rational.cpp:1670
SCIP_Bool SCIPrationalIsGTReal(SCIP_RATIONAL *rat, SCIP_Real real)
Definition: rational.cpp:1546
SCIP_Bool SCIPrationalIsEQ(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
Definition: rational.cpp:1404
void SCIPrationalDiffProd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
Definition: rational.cpp:1239
void SCIPrationalMultReal(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_Real op2)
Definition: rational.cpp:1097
void SCIPrationalComputeApproximation(SCIP_RATIONAL *res, SCIP_RATIONAL *src, SCIP_Longint maxdenom, int forcegreater)
Definition: rational.cpp:2464
void SCIPrationalFreeBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***ratbufarray, int size)
Definition: rational.cpp:518
SCIP_Bool SCIPrationalIsLE(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
Definition: rational.cpp:1521
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
Definition: scip_lp.c:2176
SCIP_RATIONAL * SCIPvarGetLbGlobalExact(SCIP_VAR *var)
Definition: var.c:24130
SCIP_RATIONAL * SCIPvarGetUbGlobalExact(SCIP_VAR *var)
Definition: var.c:24152
void SCIPsortPtrPtrInt(void **ptrarray1, void **ptrarray2, int *intarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortIntIntPtrPtrInterval(int *intarray1, int *intarray2, void **ptrarray, void **ptrarray2, SCIP_INTERVAL *intervalarray, int len)
interval arithmetics for provable bounds
SCIP_RETCODE SCIProwDelCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col)
Definition: lp.c:5646
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:5625
void SCIProwPrint(SCIP_ROW *row, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
Definition: lp.c:5514
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:5801
SCIP_RETCODE SCIProwChgRhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real rhs)
Definition: lp.c:5914
SCIP_RETCODE SCIProwChgLhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real lhs)
Definition: lp.c:5882
SCIP_RETCODE SCIProwRelease(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
Definition: lp.c:5567
internal methods for LP management
SCIP_Bool SCIPlpExactProjectShiftPossible(SCIP_LPEXACT *lpexact)
Definition: lpexact.c:3909
void SCIProwExactRecalcLPActivity(SCIP_ROWEXACT *rowexact, SCIP_STAT *stat)
Definition: lpexact.c:5891
SCIP_RETCODE SCIProwExactGetSolFeasibility(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_RATIONAL *result)
Definition: lpexact.c:5446
SCIP_RETCODE SCIPlpExactShrinkRows(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, int newnrows)
Definition: lpexact.c:7503
void SCIPlpExactOverwriteFpDualSol(SCIP_LPEXACT *lpexact, SCIP_Bool dualfarkas)
Definition: lpexact.c:8449
SCIP_Bool SCIProwExactIsModifiable(SCIP_ROWEXACT *row)
Definition: lpexact.c:5046
static SCIP_RETCODE lpExactSetObjlim(SCIP_LPEXACT *lp, SCIP_SET *set, SCIP_Real objlim, SCIP_Bool *success)
Definition: lpexact.c:2545
static SCIP_RETCODE rowExactCreateFromRowLimitEncodingLength(SCIP_ROW *row, SCIP_ROWEXACT *rowexact, SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact)
Definition: lpexact.c:3255
SCIP_RETCODE SCIPlpExactFreeState(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpexact.c:8160
SCIP_RETCODE SCIPlpExactReset(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue)
Definition: lpexact.c:7550
void SCIPlpExactForceExactSolve(SCIP_LPEXACT *lpexact, SCIP_SET *set)
Definition: lpexact.c:7598
SCIP_RETCODE SCIPlpExactGetSol(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible, SCIP_Bool overwritefplp)
Definition: lpexact.c:6853
static SCIP_RETCODE colExactSwapCoefs(SCIP_COLEXACT *col, BMS_BUFMEM *buffer, int pos1, int pos2)
Definition: lpexact.c:809
SCIP_RETCODE SCIPlpExactLink(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
Definition: lpexact.c:3711
static SCIP_RETCODE lpExactFlushAndSolve(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, int harditlim, SCIP_Bool fromscratch, SCIP_Bool *lperror)
Definition: lpexact.c:4287
static SCIP_RETCODE ensureRowexsSize(SCIP_LPEXACT *lpexact, SCIP_SET *set, int num)
Definition: lpexact.c:270
SCIP_COLEXACT ** SCIProwExactGetCols(SCIP_ROWEXACT *row)
Definition: lpexact.c:5026
SCIP_RETCODE SCIPlpExactSetState(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPISTATE *lpistate, SCIP_Bool wasprimfeas, SCIP_Bool wasprimchecked, SCIP_Bool wasdualfeas, SCIP_Bool wasdualchecked)
Definition: lpexact.c:8118
SCIP_RETCODE SCIProwExactFree(SCIP_ROWEXACT **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LPEXACT *lpexact)
Definition: lpexact.c:5610
static SCIP_RETCODE insertColChgcols(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lp)
Definition: lpexact.c:1005
static SCIP_RETCODE colExactUpdateDelLP(SCIP_COLEXACT *col, SCIP_SET *set)
Definition: lpexact.c:1669
SCIP_RETCODE SCIPlpExactSolveAndEval(SCIP_LPEXACT *lpexact, SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_Longint itlim, SCIP_Bool *lperror, SCIP_Bool usefarkas)
Definition: lpexact.c:4477
static SCIP_RETCODE colExactRestoreSolVals(SCIP_COLEXACT *colexact, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer)
Definition: lpexact.c:7685
SCIP_RETCODE SCIPlpExactUpdateDelVar(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var)
Definition: lpexact.c:6634
static int rowExactSearchCoefPart(SCIP_ROWEXACT *row, const SCIP_COLEXACT *col, int minpos, int maxpos)
Definition: lpexact.c:630
static SCIP_RETCODE ensureLpiExactcolsSize(SCIP_LPEXACT *lp, SCIP_SET *set, int num)
Definition: lpexact.c:509
SCIP_RETCODE SCIPcolExactDelCoef(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_ROWEXACT *row)
Definition: lpexact.c:2852
SCIP_RETCODE SCIPlpExactDelRowset(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, int *rowdstat)
Definition: lpexact.c:2643
SCIP_RATIONAL * SCIProwExactGetLPActivity(SCIP_ROWEXACT *row, SCIP_STAT *stat, SCIP_LPEXACT *lpexact)
Definition: lpexact.c:5713
static void coefChangedExact(SCIP_ROWEXACT *row, SCIP_COLEXACT *col, SCIP_LPEXACT *lp)
Definition: lpexact.c:726
static SCIP_RETCODE rowExactRestoreSolVals(SCIP_ROWEXACT *rowexact, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer, SCIP_Bool infeasible)
Definition: lpexact.c:7789
static SCIP_RETCODE lpExactRestoreSolVals(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem)
Definition: lpexact.c:7887
static SCIP_RETCODE lpExactSetRealpar(SCIP_LPEXACT *lp, SCIP_LPPARAM lpparam, SCIP_Real value, SCIP_Bool *success)
Definition: lpexact.c:2488
static void getObjvalDeltaUbExact(SCIP_RATIONAL *obj, SCIP_RATIONAL *oldub, SCIP_RATIONAL *newub, SCIP_RATIONAL *deltaval, int *deltainf)
Definition: lpexact.c:6331
static SCIP_RETCODE rowExactSwapCoefs(SCIP_ROWEXACT *row, BMS_BUFMEM *buffer, int pos1, int pos2)
Definition: lpexact.c:915
static SCIP_RETCODE lpExactFlushAddRows(SCIP_LPEXACT *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
Definition: lpexact.c:2013
SCIP_RETCODE SCIProwExactGetLPFeasibility(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *result)
Definition: lpexact.c:5655
SCIP_Bool SCIPlpExactIsSynced(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_MESSAGEHDLR *msg)
Definition: lpexact.c:3920
SCIP_RETCODE SCIPlpExactGetState(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpexact.c:8094
static SCIP_RETCODE lpExactFlushChgCols(SCIP_LPEXACT *lp, SCIP_SET *set)
Definition: lpexact.c:2146
SCIP_RETCODE SCIPlpExactGetPrimalRay(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_RATIONAL **ray)
Definition: lpexact.c:7137
void SCIProwExactPrint(SCIP_ROWEXACT *row, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
Definition: lpexact.c:4953
static SCIP_RETCODE lpExactFlushAddCols(SCIP_LPEXACT *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
Definition: lpexact.c:1810
SCIP_RETCODE SCIPcolExactAddCoef(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_ROWEXACT *row, SCIP_RATIONAL *val)
Definition: lpexact.c:2834
SCIP_RETCODE SCIPlpExactUpdateVarColumn(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var)
Definition: lpexact.c:6663
SCIP_RETCODE SCIPlpExactStartDive(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
Definition: lpexact.c:8177
SCIP_RETCODE SCIProwExactIncCoef(SCIP_ROWEXACT *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_COLEXACT *col, SCIP_RATIONAL *incval)
Definition: lpexact.c:5321
SCIP_RETCODE SCIPlpExactSyncLPs(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: lpexact.c:8474
SCIP_RETCODE SCIProwExactEnsureSize(SCIP_ROWEXACT *row, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
Definition: lpexact.c:6062
SCIP_RETCODE SCIPlpExactUpdateVarLoose(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var)
Definition: lpexact.c:6718
SCIP_RETCODE SCIProwExactAddCoef(SCIP_ROWEXACT *rowexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_COLEXACT *colexact, SCIP_RATIONAL *val)
Definition: lpexact.c:5200
SCIP_Bool SCIProwHasExRow(SCIP_LPEXACT *lpexact, SCIP_ROW *row)
Definition: lpexact.c:5057
static SCIP_RETCODE colExactUpdateAddLP(SCIP_COLEXACT *col, SCIP_SET *set)
Definition: lpexact.c:1592
static SCIP_RETCODE lpExactFlushDelRows(SCIP_LPEXACT *lp, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: lpexact.c:1965
static SCIP_RETCODE rowExactAddCoef(SCIP_ROWEXACT *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lp, SCIP_COLEXACT *col, SCIP_RATIONAL *val, int linkpos)
Definition: lpexact.c:1235
static SCIP_RETCODE rowExactLink(SCIP_ROWEXACT *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lp)
Definition: lpexact.c:1517
SCIP_Bool SCIProwExactHasFpRelax(SCIP_ROWEXACT *row)
Definition: lpexact.c:5089
SCIP_RETCODE SCIPcolExactIncCoef(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_ROWEXACT *row, SCIP_RATIONAL *incval)
Definition: lpexact.c:2945
SCIP_RETCODE SCIPlpExactUpdateAddVar(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var)
Definition: lpexact.c:6603
static SCIP_RETCODE SCIPlpExactProjectShiftFreeLPIExact(SCIP_LPIEXACT **lpiexact)
Definition: lpexact.c:3822
static SCIP_RETCODE rowExactStoreSolVals(SCIP_ROWEXACT *rowexact, BMS_BLKMEM *blkmem, SCIP_Bool infeasible)
Definition: lpexact.c:7732
static SCIP_RETCODE lpExactSetIntpar(SCIP_LPEXACT *lp, SCIP_LPPARAM lpparam, int value, SCIP_Bool *success)
Definition: lpexact.c:2515
static SCIP_Bool colExactInSync(SCIP_COLEXACT *colexact, SCIP_SET *set)
Definition: lpexact.c:176
SCIP_RETCODE SCIPcolExactChgCoef(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_ROWEXACT *row, SCIP_RATIONAL *val)
Definition: lpexact.c:2894
static SCIP_RETCODE lpExactFlushDelCols(SCIP_LPEXACT *lp)
Definition: lpexact.c:1763
static SCIP_RETCODE lpExactFlushChgRows(SCIP_LPEXACT *lp, SCIP_SET *set)
Definition: lpexact.c:2282
SCIP_RETCODE SCIProwExactCreate(SCIP_ROWEXACT **row, SCIP_ROW *fprow, SCIP_ROW *fprowrhs, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LPEXACT *lpexact, int len, SCIP_COLEXACT **cols, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs, SCIP_Bool isfprelaxable)
Definition: lpexact.c:3138
SCIP_RETCODE SCIProwExactRelease(SCIP_ROWEXACT **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LPEXACT *lpexact)
Definition: lpexact.c:5583
SCIP_RETCODE SCIProwExactGetPseudoFeasibility(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_RATIONAL *result)
Definition: lpexact.c:5684
SCIP_RATIONAL * SCIProwExactGetConstant(SCIP_ROWEXACT *row)
Definition: lpexact.c:6277
static void lpExactNumericalTroubleMessage(SCIP_MESSAGEHDLR *messagehdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_VERBLEVEL verblevel, const char *formatstr,...)
Definition: lpexact.c:4233
void SCIPlpExactDecNLoosevars(SCIP_LPEXACT *lpexact)
Definition: lpexact.c:6770
SCIP_RETCODE SCIPlpExactAddRow(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_ROWEXACT *rowexact)
Definition: lpexact.c:4133
static SCIP_RETCODE SCIPlpPsdataCreate(SCIP_LPEXACT *lpexact, SCIP_SET *set, BMS_BLKMEM *blkmem)
Definition: lpexact.c:3775
static SCIP_RETCODE rowExactChgCoefPos(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_LPEXACT *lp, int pos, SCIP_RATIONAL *val)
Definition: lpexact.c:1421
SCIP_RATIONAL * SCIPcolExactGetPrimsol(SCIP_COLEXACT *col)
Definition: lpexact.c:6039
SCIP_RETCODE SCIPlpExactGetIterations(SCIP_LPEXACT *lpexact, int *iterations)
Definition: lpexact.c:7398
static SCIP_RETCODE ensureChgcolsSize(SCIP_LPEXACT *lp, SCIP_SET *set, int num)
Definition: lpexact.c:486
void SCIProwExactForceSort(SCIP_ROWEXACT *rowexact, SCIP_SET *set)
Definition: lpexact.c:5878
void SCIPlpExactGetPseudoObjval(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_RATIONAL *res)
Definition: lpexact.c:7438
static SCIP_RETCODE ensureChgrowsSizeExact(SCIP_LPEXACT *lpexact, SCIP_SET *set, int num)
Definition: lpexact.c:7973
static SCIP_RETCODE getObjvalDeltaObjExact(SCIP_SET *set, SCIP_RATIONAL *oldobj, SCIP_RATIONAL *newobj, SCIP_RATIONAL *lb, SCIP_RATIONAL *ub, SCIP_RATIONAL *deltaval, int *deltainf)
Definition: lpexact.c:6100
static SCIP_RETCODE colExactChgCoefPos(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lp, int pos, SCIP_RATIONAL *val)
Definition: lpexact.c:1200
static SCIP_RETCODE rowExactSideChanged(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_SIDETYPE sidetype)
Definition: lpexact.c:7997
SCIP_RETCODE SCIPlpExactUpdateVarObj(SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_VAR *var, SCIP_RATIONAL *oldobj, SCIP_RATIONAL *newobj)
Definition: lpexact.c:6422
SCIP_RETCODE SCIProwExactDelCoef(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_COLEXACT *col)
Definition: lpexact.c:5225
SCIP_RETCODE SCIPlpExactClear(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: lpexact.c:7581
static SCIP_RETCODE rowExactUpdateDelLP(SCIP_ROWEXACT *row, SCIP_SET *set)
Definition: lpexact.c:1707
static SCIP_RETCODE lpExactSetIterationLimit(SCIP_LPEXACT *lp, int itlim)
Definition: lpexact.c:2594
static void getObjvalDeltaLbExact(SCIP_RATIONAL *obj, SCIP_RATIONAL *oldlb, SCIP_RATIONAL *newlb, SCIP_RATIONAL *deltaval, int *deltainf)
Definition: lpexact.c:6289
static int rowExactSearchCoef(SCIP_ROWEXACT *row, const SCIP_COLEXACT *col)
Definition: lpexact.c:669
SCIP_Bool SCIProwExactGetSolActivityWithErrorbound(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_Real *activity, SCIP_Real *errorbound)
Definition: lpexact.c:5475
SCIP_RETCODE SCIProwExactCreateFromRow(SCIP_ROW *fprow, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LPEXACT *lpexact)
Definition: lpexact.c:3373
SCIP_RETCODE SCIPlpExactGetDualfarkas(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *valid, SCIP_Bool overwritefplp)
Definition: lpexact.c:7198
SCIP_RETCODE SCIPlpExactEndDive(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR **vars, int nvars)
Definition: lpexact.c:8280
static SCIP_RETCODE colExactEnsureSize(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
Definition: lpexact.c:427
SCIP_RETCODE SCIPlpExactShrinkCols(SCIP_LPEXACT *lpexact, SCIP_SET *set, int newncols)
Definition: lpexact.c:7455
SCIP_RETCODE SCIPlpExactAddCol(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_COLEXACT *col)
Definition: lpexact.c:4089
static SCIP_RETCODE rowExactUnlink(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_LPEXACT *lp)
Definition: lpexact.c:1560
SCIP_RETCODE SCIProwExactGetSolActivity(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_Bool useexact, SCIP_RATIONAL *result)
Definition: lpexact.c:5529
SCIP_RETCODE SCIPlpExactGetUnboundedSol(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *rayfeasible)
Definition: lpexact.c:7124
static void colExactMoveCoef(SCIP_COLEXACT *col, int oldpos, int newpos)
Definition: lpexact.c:772
SCIP_RETCODE SCIPlpExactSetCutoffbound(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_Real cutoffbound)
Definition: lpexact.c:4178
SCIP_LPSOLSTAT SCIPlpExactGetSolstat(SCIP_LPEXACT *lpexact)
Definition: lpexact.c:8084
SCIP_RETCODE SCIPlpExactUpdateVarUb(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var, SCIP_RATIONAL *oldub, SCIP_RATIONAL *newub)
Definition: lpexact.c:6568
SCIP_RETCODE SCIPcolExactCalcFarkasRedcostCoef(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_RATIONAL *result, SCIP_RATIONAL **dual, SCIP_Bool usefarkas)
Definition: lpexact.c:5111
static SCIP_RETCODE colExactDelCoefPos(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lpexact, int pos)
Definition: lpexact.c:1154
static SCIP_RETCODE lpExactStoreSolVals(SCIP_LPEXACT *lpexact, SCIP_STAT *stat, BMS_BLKMEM *blkmem)
Definition: lpexact.c:7838
SCIP_Bool SCIPlpExactBoundShiftUseful(SCIP_LPEXACT *lpexact)
Definition: lpexact.c:3899
void SCIPlpExactAllowExactSolve(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_Bool allowexact)
Definition: lpexact.c:7630
SCIP_RATIONAL * SCIProwExactGetPseudoActivity(SCIP_ROWEXACT *row, SCIP_STAT *stat)
Definition: lpexact.c:5734
SCIP_RETCODE SCIPcolExactFree(SCIP_COLEXACT **col, BMS_BLKMEM *blkmem)
Definition: lpexact.c:2754
void SCIPcolExactPrint(SCIP_COLEXACT *col, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
Definition: lpexact.c:2796
SCIP_RETCODE SCIPlpExactUpdateVarLbGlobal(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var, SCIP_RATIONAL *oldlb, SCIP_RATIONAL *newlb)
Definition: lpexact.c:6469
SCIP_RETCODE SCIPcolExactChgObj(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *newobj)
Definition: lpexact.c:3001
SCIP_RETCODE SCIPlpExactUpdateVarLb(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var, SCIP_RATIONAL *oldlb, SCIP_RATIONAL *newlb)
Definition: lpexact.c:6501
SCIP_RETCODE SCIProwExactGenerateFpRows(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_PROB *prob, SCIP_ROWEXACT *row, SCIP_ROW *rowlhs, SCIP_ROW *rowrhs, SCIP_Bool *onerowrelax, SCIP_Bool *hasfprelax)
Definition: lpexact.c:3454
SCIP_RETCODE SCIPcolExactChgUb(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *newub)
Definition: lpexact.c:3093
static int colExactSearchCoef(SCIP_COLEXACT *col, const SCIP_ROWEXACT *row)
Definition: lpexact.c:591
static SCIP_RETCODE SCIPlpExactProjectShiftFree(SCIP_LPEXACT *lpexact, SCIP_SET *set, BMS_BLKMEM *blkmem)
Definition: lpexact.c:3846
static SCIP_RETCODE rowExactDelCoefPos(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_LPEXACT *lp, int pos)
Definition: lpexact.c:1370
SCIP_RETCODE SCIPlpExactCreate(SCIP_LPEXACT **lpexact, BMS_BLKMEM *blkmem, SCIP_LP *fplp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, const char *name)
Definition: lpexact.c:3933
static SCIP_RATIONAL * getFiniteLooseObjvalExact(SCIP_LPEXACT *lp, SCIP_SET *set, SCIP_PROB *prob)
Definition: lpexact.c:2390
SCIP_RATIONAL ** SCIProwExactGetVals(SCIP_ROWEXACT *row)
Definition: lpexact.c:5016
SCIP_RETCODE SCIProwExactAddConstant(SCIP_ROWEXACT *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *addval)
Definition: lpexact.c:5416
static SCIP_Bool lpExactInSync(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_MESSAGEHDLR *msg)
Definition: lpexact.c:237
static void lpExactUpdateObjval(SCIP_LPEXACT *lpexact, SCIP_VAR *var, SCIP_RATIONAL *deltavalex, int deltainf, SCIP_Bool local, SCIP_Bool loose, SCIP_Bool global)
Definition: lpexact.c:6373
SCIP_RATIONAL * SCIPcolExactGetBestBound(SCIP_COLEXACT *col)
Definition: lpexact.c:6026
static SCIP_RETCODE rowExactUpdateAddLP(SCIP_ROWEXACT *row, SCIP_SET *set)
Definition: lpexact.c:1631
static SCIP_Bool rowExactInSync(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_MESSAGEHDLR *msg)
Definition: lpexact.c:203
void SCIPlpExactGetObjval(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_RATIONAL *res)
Definition: lpexact.c:7416
SCIP_RETCODE SCIPcolExactCreate(SCIP_COLEXACT **col, SCIP_COL *fpcol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, int len, SCIP_ROWEXACT **rows, SCIP_RATIONAL **vals, SCIP_Bool removable)
Definition: lpexact.c:2410
static SCIP_RETCODE ensureColexsSize(SCIP_LPEXACT *lp, SCIP_SET *set, int num)
Definition: lpexact.c:463
SCIP_RETCODE SCIProwExactChgRhs(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *rhs)
Definition: lpexact.c:8063
static int colExactSearchCoefPart(SCIP_COLEXACT *col, const SCIP_ROWEXACT *row, int minpos, int maxpos)
Definition: lpexact.c:555
SCIP_RETCODE SCIProwExactChgCoef(SCIP_ROWEXACT *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lpexact, SCIP_COLEXACT *col, SCIP_RATIONAL *val)
Definition: lpexact.c:5269
static SCIP_RETCODE colExactStoreSolVals(SCIP_COLEXACT *colexact, BMS_BLKMEM *blkmem)
Definition: lpexact.c:7648
static SCIP_RETCODE colExactLink(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lp)
Definition: lpexact.c:1473
SCIP_RETCODE SCIPlpExactWrite(SCIP_LPEXACT *lpexact, const char *fname)
Definition: lpexact.c:8434
SCIP_RETCODE SCIPlpExactFree(SCIP_LPEXACT **lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: lpexact.c:4039
SCIP_RETCODE SCIPlpExactFlush(SCIP_LPEXACT *lpexact, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
Definition: lpexact.c:3651
static SCIP_RETCODE ensureLpirowexactsSize(SCIP_LPEXACT *lp, SCIP_SET *set, int num)
Definition: lpexact.c:532
static SCIP_RETCODE colExactAddCoef(SCIP_COLEXACT *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LPEXACT *lp, SCIP_ROWEXACT *row, SCIP_RATIONAL *val, int linkpos)
Definition: lpexact.c:1026
void SCIProwExactRecalcPseudoActivity(SCIP_ROWEXACT *rowexact, SCIP_STAT *stat)
Definition: lpexact.c:5960
SCIP_RETCODE SCIProwExactChgLhs(SCIP_ROWEXACT *rowexact, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *lhs)
Definition: lpexact.c:8042
SCIP_RETCODE SCIProwExactChgConstant(SCIP_ROWEXACT *row, SCIP_STAT *stat, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *constant)
Definition: lpexact.c:5385
static void rowExactMoveCoef(SCIP_ROWEXACT *row, int oldpos, int newpos)
Definition: lpexact.c:877
void SCIPlpExactForceSafeBound(SCIP_LPEXACT *lpexact, SCIP_SET *set)
Definition: lpexact.c:7614
SCIP_RETCODE SCIPcolExactChgLb(SCIP_COLEXACT *col, SCIP_SET *set, SCIP_LPEXACT *lpexact, SCIP_RATIONAL *newlb)
Definition: lpexact.c:3048
SCIP_RETCODE SCIPlpExactUpdateVarUbGlobal(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var, SCIP_RATIONAL *oldub, SCIP_RATIONAL *newub)
Definition: lpexact.c:6536
internal methods for exact LP management
interface methods for specific LP solvers
interface methods for specific exact LP solvers
#define BMSduplicateBlockMemoryArray(mem, ptr, source, num)
Definition: memory.h:462
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
Definition: memory.h:468
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
Definition: memory.h:458
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
Definition: message.c:618
void SCIPmessageVFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr, va_list ap)
Definition: message.c:633
void SCIPmessagePrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
Definition: message.c:594
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
Definition: message.c:427
void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...)
Definition: message.c:678
internal miscellaneous methods
internal methods for storing and manipulating the main problem
public methods for managing constraints
public methods for LP management
public methods for LP management
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for branch and bound tree
public methods for problem variables
wrapper for rational number arithmetic
public methods for the LP relaxation, rows and columns
public methods for the LP relaxation, rows and columns
public methods for message handling
internal methods for storing separated exact cuts
SCIP_RETCODE SCIPsetGetCharParam(SCIP_SET *set, const char *name, char *value)
Definition: set.c:3424
SCIP_RETCODE SCIPsetSetCharParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, char value)
Definition: set.c:3669
internal methods for global SCIP settings
void SCIPsolGetValExact(SCIP_RATIONAL *res, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
Definition: sol.c:2039
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
Definition: sol.c:1908
internal methods for storing primal CIP solutions
SCIP_Bool SCIPsolveIsStopped(SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool checknodelimits)
Definition: solve.c:110
internal methods for main solving loop and node processing
internal methods for problem statistics
Definition: memory.c:2545
Definition: struct_lpexact.h:103
Definition: struct_lpexact.h:145
Definition: struct_lp.h:138
Definition: struct_event.h:237
Definition: intervalarith.h:55
Definition: lpiexact_none.c:50
Definition: lpi_clp.cpp:133
Definition: struct_lpexact.h:126
Definition: struct_lpexact.h:263
Definition: struct_lp.h:275
Definition: struct_message.h:46
Definition: struct_prob.h:49
Definition: struct_rational.h:47
Definition: struct_lpexact.h:115
Definition: struct_lpexact.h:187
Definition: struct_lp.h:205
Definition: struct_set.h:75
Definition: struct_sol.h:74
Definition: struct_stat.h:62
Definition: struct_var.h:262
datastructures for storing cuts in a cut pool
datastructures for managing events
data structures for exact LP management
datastructures for storing and manipulating the main problem
datastructures for global SCIP settings
datastructures for problem statistics
datastructures for problem variables
Definition: heur_padm.c:135
SCIP_RETCODE SCIPvarAddToRow(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val)
Definition: var.c:20035
SCIP_RETCODE SCIPvarAddToRowExact(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LPEXACT *lpexact, SCIP_ROWEXACT *rowexact, SCIP_RATIONAL *val)
Definition: var.c:20135
internal methods for problem variables