112 for(
i = 0;
i < row->
len; ++
i )
131#define debugRowPrint(x,y)
155 for(
r = 0;
r < col->
len; ++
r )
164#define debugColPrint(x,y)
189 assert(num <= lp->chgcolssize);
212 assert(num <= lp->chgrowssize);
235 assert(num <= lp->lpicolssize);
258 assert(num <= lp->lpirowssize);
281 assert(num <= lp->colssize);
301 assert(num <= lp->soldirectionsize);
324 assert(num <= lp->lazycolssize);
347 assert(num <= lp->rowssize);
364 if( num > col->
size )
429 if( storedsolvals !=
NULL )
518 if( storedsolvals !=
NULL )
603 if( storedsolvals !=
NULL )
646 if( num > row->
size )
663#ifdef SCIP_MORE_DEBUG
673 if( !msgdisp_checkrow )
675 printf(
"LP ROW CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
676 msgdisp_checkrow =
TRUE;
705#ifdef SCIP_MORE_DEBUG
720 for(
c = row->
len - 1;
c >= 0; --
c )
722 if( cols[
c]->lppos >= 0 )
743 for(
c = row->
len - 1;
c >= 0; --
c )
745 if( cols[
c]->lppos >= 0 )
766 for(
c = row->
len - 1;
c >= 0; --
c )
768 if( cols[
c]->lppos >= 0 )
775#define checkRowSqrnorm(row)
776#define checkRowSumnorm(row)
777#define checkRowObjprod(row)
814 for( v = 0; v <
nvars; ++v )
864 if(
set->exact_enable )
871 for( v = 0; v <
nvars; ++v )
921 for( v = 0; v <
nvars; ++v )
967 if(
set->exact_enable )
974 for( v = 0; v <
nvars; ++v )
1014 for( v = 0; v <
nvars; ++v )
1245 searchidx = row->
index;
1246 while(minpos <= maxpos)
1248 pos = (minpos + maxpos)/2;
1249 assert(0 <= pos && pos < col->len);
1253 if( searchidx == idx )
1255 else if( searchidx < idx )
1279 if( row->
lppos >= 0 )
1320 searchidx = col->
index;
1321 while(minpos <= maxpos)
1323 pos = (minpos + maxpos)/2;
1324 assert(0 <= pos && pos < row->len);
1329 if( searchidx == idx )
1331 else if( searchidx < idx )
1360 if( col->
lppos >= 0 )
1381 assert(-1 <= pos && pos < row->len);
1387 for(
i = 0;
i < row->
len; ++
i )
1404 assert(0 <= oldpos && oldpos < col->len);
1405 assert(0 <= newpos && newpos < col->len);
1408 if( oldpos == newpos )
1411 col->
rows[newpos] = col->
rows[oldpos];
1412 col->
vals[newpos] = col->
vals[oldpos];
1416 if( col->
linkpos[newpos] >= 0 )
1444 assert(0 <= pos1 && pos1 < col->len);
1445 assert(0 <= pos2 && pos2 < col->len);
1452 tmprow = col->
rows[pos2];
1453 tmpval = col->
vals[pos2];
1454 tmplinkpos = col->
linkpos[pos2];
1460 col->
rows[pos1] = tmprow;
1461 col->
vals[pos1] = tmpval;
1462 col->
linkpos[pos1] = tmplinkpos;
1500 assert(0 <= oldpos && oldpos < row->len);
1501 assert(0 <= newpos && newpos < row->len);
1504 if( oldpos == newpos )
1507 row->
cols[newpos] = row->
cols[oldpos];
1509 row->
vals[newpos] = row->
vals[oldpos];
1513 if( row->
linkpos[newpos] >= 0 )
1542 assert(0 <= pos1 && pos1 < row->len);
1543 assert(0 <= pos2 && pos2 < row->len);
1551 tmpcol = row->
cols[pos2];
1553 tmpval = row->
vals[pos2];
1554 tmplinkpos = row->
linkpos[pos2];
1561 row->
cols[pos1] = tmpcol;
1563 row->
vals[pos1] = tmpval;
1564 row->
linkpos[pos1] = tmplinkpos;
1680#ifdef SCIP_MORE_DEBUG
1683#define ASSERT(x) do { if( !(x) ) abort(); } while( FALSE )
1685#define ASSERT(x) assert(x)
1703 if( !msgdisp_checklinks )
1705 printf(
"LP LINK CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
1706 msgdisp_checklinks =
TRUE;
1712 ASSERT(col !=
NULL);
1718 for( j = 0; j < col->
len; ++j )
1721 ASSERT(row !=
NULL);
1732 ASSERT(row !=
NULL);
1738 for( j = 0; j < row->
len; ++j )
1741 ASSERT(col !=
NULL);
1745 ASSERT((j < row->nlpcols) == (row->
linkpos[j] >= 0 && col->
lppos >= 0));
1753#define checkLinks(lp)
1859 if( row->
lppos >= 0 && linkpos >= 0 )
1871 if( !
set->exact_enable )
1875 col->
rows[pos] = row;
1876 col->
vals[pos] = val;
1885 if( col->
lppos >= 0 )
1891 if( row->
lppos >= 0 )
1895 assert(0 <= linkpos && linkpos < row->len);
1912 if( col->
lppos >= 0 )
1918 if( linkpos == row->
nlpcols-1 )
1924 if( row->
lppos >= 0 && linkpos >= 0 )
1941 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to column <%s> (nunlinked=%d)\n",
1961 assert(0 <= pos && pos < col->len);
1966 row = col->
rows[pos];
2004 assert(0 <= pos && pos < col->len);
2012 if( !
set->exact_enable )
2023 col->
vals[pos] = val;
2059 if( col->
lppos >= 0 )
2144 if( forcenormupdate || col->
lppos >= 0 )
2212 if( col->
lppos >= 0 && linkpos >= 0 )
2224 if( !
set->exact_enable )
2228 row->
cols[pos] = col;
2230 row->
vals[pos] = val;
2233 if(
set->exact_enable )
2242 if( row->
lppos >= 0 )
2248 if( col->
lppos >= 0 )
2252 assert(0 <= linkpos && linkpos < col->len);
2269 if( row->
lppos >= 0 )
2275 if( linkpos == col->
nlprows-1 )
2281 if( col->
lppos >= 0 && linkpos >= 0 )
2307 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to row <%s> (nunlinked=%d)\n",
2332 assert(0 <= pos && pos < row->len);
2336 col = row->
cols[pos];
2337 val = row->
vals[pos];
2345 SCIPerrorMessage(
"cannot delete a coefficient from the locked unmodifiable row <%s>\n", row->
name);
2353 if( pos < row->nlpcols )
2390 assert(0 <= pos && pos < row->len);
2397 SCIPerrorMessage(
"cannot change a coefficient of the locked unmodifiable row <%s>\n", row->
name);
2402 if( !
set->exact_enable )
2404 col = row->
cols[pos];
2416 oldval = row->
vals[pos];
2420 row->
vals[pos] = val;
2422 if(
set->exact_enable )
2550 for(
i = 0;
i < col->
len; ++
i )
2626 for(
i = 0;
i < row->
len; ++
i )
2684 return lpSetIntpar(lp, lpparam, (
int)value, success);
2735 assert(lpivalue == value);
2771 assert(lpivalue == value);
2776#define lpCheckIntpar(lp, lpparam, value) SCIP_OKAY
2777#define lpCheckBoolpar(lp, lpparam, value) SCIP_OKAY
2778#define lpCheckRealpar(lp, lpparam, value) SCIP_OKAY
2782#define lpCutoffDisabled(set, prob, lp) (set->lp_disablecutoff == 1 || (set->lp_disablecutoff == 2 && !SCIPprobAllColsInLP(prob, set, lp)))
2869 avgboundingerror = 1.0;
2872 adjustedobjlim = lp->
lpiobjlim +
MAX(avgboundingerror, 1e-6);
2920 if( lp->
nrows > 0 && actualfeastol < lp->lpifeastol )
2949 assert(dualfeastol >= 0.0);
2963 if( lp->
nrows > 0 && actualdualfeastol < lp->lpidualfeastol )
2992 assert(barrierconvtol >= 0.0);
3006 if( lp->
nrows > 0 && actualbarrierconvtol < lp->lpibarrierconvtol
3062 assert(0 <= fastmip && fastmip <= 1);
3251 switch( pricingchar )
3377 lptiming = (int) timing;
3404 if( randomseed == 0 )
3503 for(
i = 0;
i < len; ++
i )
3507 (*col)->linkpos[
i] = -1;
3512 (*col)->rows =
NULL;
3513 (*col)->vals =
NULL;
3514 (*col)->linkpos =
NULL;
3522 (*col)->flushedobj = 0.0;
3523 (*col)->flushedlb = 0.0;
3524 (*col)->flushedub = 0.0;
3525 (*col)->index = stat->
ncolidx;
3529 (*col)->nlprows = 0;
3530 (*col)->nunlinked = len;
3532 (*col)->lpipos = -1;
3533 (*col)->lpdepth = -1;
3534 (*col)->primsol = 0.0;
3537 (*col)->minprimsol = (*col)->ub;
3538 (*col)->maxprimsol = (*col)->lb;
3543 (*col)->sbnode = -1;
3544 (*col)->validredcostlp = -1;
3545 (*col)->validfarkaslp = -1;
3546 (*col)->validsblp = -1;
3547 (*col)->sbitlim = -1;
3548 (*col)->nsbcalls = 0;
3550 (*col)->obsoletenode = -1;
3553 (*col)->lprowssorted =
TRUE;
3554 (*col)->nonlprowssorted = (len <= 1);
3555 (*col)->objchanged =
FALSE;
3556 (*col)->lbchanged =
FALSE;
3557 (*col)->ubchanged =
FALSE;
3558 (*col)->coefchanged =
FALSE;
3561 (*col)->removable = removable;
3562 (*col)->sbdownvalid =
FALSE;
3563 (*col)->sbupvalid =
FALSE;
3566 (*col)->storedsolvals =
NULL;
3585 assert(&(*col)->var->data.col == col);
3586 assert((*col)->lppos == -1);
3587 assert((*col)->lpipos == -1);
3619 for(
r = 0;
r < col->
len; ++
r )
3687 assert(0 <= pos && pos < col->len);
3737 assert(0 <= pos && pos < col->len);
3791 assert(0 <= pos && pos < col->len);
4062 redcost -= col->
vals[
i] * dualsol[row->
lppos];
4072 if( row->
lppos >= 0 )
4073 redcost -= col->
vals[
i] * dualsol[row->
lppos];
4125 if( row->
lppos >= 0 )
4245 farkas += col->
vals[
i] * dualfarkas[row->
lppos];
4255 if( row->
lppos >= 0 )
4256 farkas += col->
vals[
i] * dualfarkas[row->
lppos];
4308 if( row->
lppos >= 0 )
4368 if( farkascoef > 0.0 )
4369 return col->
ub * farkascoef;
4371 return col->
lb * farkascoef;
4554 validsblp = stat->
nlps;
4565 sbdownvalid =
FALSE;
4573 SCIPsetDebugMsg(
set,
"performing strong branching on variable <%s>(%g) with %d iterations\n",
4602 sbdownvalid =
FALSE;
4631 if( iter/2 >= itlim )
4654 if( downvalid !=
NULL )
4655 *downvalid = sbdownvalid;
4656 if( upvalid !=
NULL )
4657 *upvalid = sbupvalid;
4740 for( j = 0; j < ncols; ++j )
4771 if( downvalid !=
NULL )
4773 if( upvalid !=
NULL )
4781 lpipos[nsubcols] = col->
lpipos;
4782 primsols[nsubcols] = col->
primsol;
4784 subidx[nsubcols] = j;
4785 subcols[nsubcols++] = col;
4789 SCIPsetDebugMsg(
set,
"performing strong branching on %d variables with %d iterations\n", ncols, itlim);
4802 for( j = 0; j < nsubcols; ++j )
4820 up[idx] = col->
sbup;
4821 if( downvalid !=
NULL )
4823 if( upvalid !=
NULL )
4836 for( j = 0; j < nsubcols; ++j )
4853 up[idx] = col->
sbup;
4854 if( downvalid !=
NULL )
4856 if( upvalid !=
NULL )
4869 if( iter/2 >= itlim )
4918 if( downvalid !=
NULL )
4920 if( upvalid !=
NULL )
4922 if( solval !=
NULL )
4924 if( lpobjval !=
NULL )
5046 for(
i = 0;
i < row->
len; ++
i )
5114 sval = val * scalar;
5115 downval = floor(sval);
5120 if( intval !=
NULL )
5126 if( intval !=
NULL )
5172 assert(-1.0 < minrounddelta && minrounddelta <= 0.0);
5173 assert(0.0 <= maxrounddelta && maxrounddelta < 1.0);
5175 SCIPsetDebugMsg(
set,
"scale row <%s> with %g (tolerance=[%g,%g])\n", row->
name, scaleval, minrounddelta, maxrounddelta);
5179 mindeltainf =
FALSE;
5180 maxdeltainf =
FALSE;
5209 newval = val * scaleval;
5211 &&
isIntegralScalar(val, scaleval, minrounddelta, maxrounddelta, &intval) )
5215 if( intval < newval )
5217 mindelta += (intval - newval)*ub;
5218 maxdelta += (intval - newval)*lb;
5224 mindelta += (intval - newval)*lb;
5225 maxdelta += (intval - newval)*ub;
5247 if( oldlen != row->
len )
5257 if(
set->exact_enable )
5274 newval = (row->
lhs - row->
constant) * scaleval + mindelta;
5286 newval = (row->
rhs - row->
constant) * scaleval + maxdelta;
5344 (*row)->integral =
TRUE;
5355 for(
i = 0;
i < len; ++
i )
5361 (*row)->cols_index[
i] = cols[
i]->
index;
5362 (*row)->linkpos[
i] = -1;
5370 (*row)->integral =
FALSE;
5376 (*row)->cols =
NULL;
5377 (*row)->cols_index =
NULL;
5378 (*row)->vals =
NULL;
5379 (*row)->linkpos =
NULL;
5383 (*row)->constant = 0.0;
5388 (*row)->sqrnorm = 0.0;
5389 (*row)->sumnorm = 0.0;
5390 (*row)->objprod = 0.0;
5391 (*row)->maxval = 0.0;
5393 (*row)->dualsol = 0.0;
5395 (*row)->dualfarkas = 0.0;
5399 (*row)->origin = origin;
5400 (*row)->eventfilter =
NULL;
5401 (*row)->index = stat->
nrowidx;
5405 (*row)->nlpcols = 0;
5406 (*row)->nunlinked = len;
5409 (*row)->lpipos = -1;
5410 (*row)->lpdepth = -1;
5411 (*row)->minidx = INT_MAX;
5412 (*row)->maxidx = INT_MIN;
5413 (*row)->nummaxval = 0;
5414 (*row)->numminval = 0;
5415 (*row)->numintcols = -1;
5416 (*row)->numimplintcols = -1;
5417 (*row)->validactivitylp = -1;
5418 (*row)->validpsactivitydomchg = -1;
5419 (*row)->validactivitybdsdomchg = -1;
5420 (*row)->nlpsaftercreation = 0L;
5421 (*row)->activeinlpcounter = 0L;
5424 (*row)->obsoletenode = -1;
5425 (*row)->fromcutpool =
FALSE;
5427 (*row)->lpcolssorted =
TRUE;
5428 (*row)->nonlpcolssorted = (len <= 1);
5429 (*row)->delaysort =
FALSE;
5430 (*row)->validminmaxidx =
FALSE;
5431 (*row)->lhschanged =
FALSE;
5432 (*row)->rhschanged =
FALSE;
5433 (*row)->coefchanged =
FALSE;
5434 (*row)->local = local;
5435 (*row)->modifiable = modifiable;
5437 (*row)->origintype = origintype;
5438 (*row)->removable = removable;
5439 (*row)->inglobalcutpool =
FALSE;
5440 (*row)->storedsolvals =
NULL;
5441 (*row)->rowexact =
NULL;
5474 assert((*row)->nuses == 0);
5475 assert((*row)->lppos == -1);
5499 if( (*row)->rowexact !=
NULL )
5502 (*row)->rowexact->fprow =
NULL;
5504 (*row)->rowexact->fprowrhs =
NULL;
5536 for(
i = 0;
i < row->
len; ++
i )
5577 assert((*row)->nuses >= 1);
5578 assert((*row)->nlocks < (
unsigned int)((*row)->nuses));
5580 SCIPsetDebugMsg(
set,
"release row <%s> with nuses=%d and nlocks=%u\n", (*row)->name, (*row)->nuses, (*row)->nlocks);
5582 if( (*row)->nuses == 0 )
5671 assert(0 <= pos && pos < row->len);
5722 assert(0 <= pos && pos < row->len);
5776 assert(0 <= pos && pos < row->len);
6006 if( intscalar !=
NULL )
6012 for(
c = 0;
c < row->
len; ++
c )
6024 if( val < mindelta || val > maxdelta )
6027 minval =
MIN(minval, absval);
6033 if( intscalar !=
NULL )
6040 assert(minval >
MIN(-mindelta, maxdelta));
6047 scaleval = 1.0/minval;
6048 scalable = (scaleval <= maxscale);
6049 for(
c = 0;
c < row->
len && scalable; ++
c )
6058 while( scaleval <= maxscale
6072 scalable = (scaleval <= maxscale);
6073 SCIPsetDebugMsg(
set,
" -> val=%g, scaleval=%g, val*scaleval=%g, scalable=%u\n", val, scaleval, val*scaleval, scalable);
6080 assert(scaleval <= maxscale);
6081 if( intscalar !=
NULL )
6082 *intscalar = scaleval;
6084 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (minval=%g)\n", scaleval, minval);
6091 twomult = (twomultval <= maxscale);
6092 for(
c = 0;
c < row->
len && twomult; ++
c )
6101 while( twomultval <= maxscale
6102 && (absval * twomultval < 0.5 || !
isIntegralScalar(val, twomultval, mindelta, maxdelta,
NULL)) )
6115 twomult = (twomultval <= maxscale);
6117 val, twomultval, val*twomultval, twomult);
6122 assert(twomultval <= maxscale);
6123 if( intscalar !=
NULL )
6124 *intscalar = twomultval;
6126 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (power of 2)\n", twomultval);
6136 rational = (maxdnom > 1);
6139 for(
c = 0;
c < row->
len && rational; ++
c )
6144 rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
6145 if( rational && numerator != 0 )
6148 gcd =
ABS(numerator);
6152 val, numerator, denominator, gcd, scm, rational);
6159 for( ++
c;
c < row->
len && rational; ++
c )
6164 rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
6165 if( rational && numerator != 0 )
6172 val, numerator, denominator, gcd, scm, rational);
6181 if( intscalar !=
NULL )
6218 &intscalar, success) );
6223 SCIP_CALL(
rowScale(row, blkmem,
set, eventqueue, stat, lp, intscalar, usecontvars, mindelta, maxdelta) );
6244#ifdef SCIP_MORE_DEBUG
6304 for( s = 1; s < row->
len; ++s )
6309 if( cols[s] == cols[t] )
6320 if( !
set->exact_enable )
6324 if(
set->exact_enable )
6329 cols_index[t] = cols_index[s];
6336 if(
set->exact_enable )
6357 for(
i = 0;
i < row->
len; ++
i )
6361 for( j =
i+1; j < row->
len; ++j )
6432 if( col->
lppos >= 0 )
6477 activity =
MAX(activity, -inf);
6478 activity =
MIN(activity, +inf);
6497 return MIN(row->
rhs - activity, activity - row->
lhs);
6536 if ( col->
lppos >= 0 )
6556 activity =
MAX(activity, -inf);
6557 activity =
MIN(activity, +inf);
6559 return MIN(row->
rhs - activity, activity - row->
lhs);
6598 if ( col->
lppos >= 0 )
6618 activity =
MAX(activity, -inf);
6619 activity =
MIN(activity, +inf);
6621 return MIN(row->
rhs - activity, activity - row->
lhs);
6637 for(
i = 0;
i < row->
len; ++
i )
6673 activity =
MAX(activity, -inf);
6674 activity =
MIN(activity, +inf);
6692 return MIN(row->
rhs - pseudoactivity, pseudoactivity - row->
lhs);
6712 for(
i = 0;
i < row->
len; ++
i )
6721 solval = (row->
vals[
i] >= 0.0 ? col->
lb : col->
ub);
6723 solval = (row->
vals[
i] >= 0.0 ? col->
ub : col->
lb);
6725 solval = (col->
lb + col->
ub)/2.0;
6727 activity += row->
vals[
i] * solval;
6731 activity =
MAX(activity, -inf);
6732 activity =
MIN(activity, +inf);
6751 return MIN(row->
rhs - activity, activity - row->
lhs);
6773 mininfinite =
FALSE;
6774 maxinfinite =
FALSE;
6777 for(
i = 0;
i < row->
len && (!mininfinite || !maxinfinite); ++
i )
7019 for( k = 0; k < lp->
ncols; ++k )
7028 scale = 1.0 / sqrt(scale);
7030 for( k = 0; k < lp->
ncols; ++k )
7035 solcutoffdist = 0.0;
7036 for( k = 0; k < row->
nlpcols; ++k )
7039 for( k = row->
nlpcols; k < row->len; ++k )
7046 solcutoffdist =
set->num_sumepsilon;
7050 return solcutoffdist;
7067 switch(
set->sepa_efficacynorm )
7079 norm = (row->
len == 0 ? 0.0 : 1.0);
7091 return -feasibility / norm;
7124 switch(
set->sepa_efficacynorm )
7136 norm = (row->
len == 0 ? 0.0 : 1.0);
7148 return -feasibility / norm;
7182 switch(
set->sepa_efficacynorm )
7194 norm = (row->
len == 0 ? 0.0 : 1.0);
7206 return -feasibility / norm;
7222 switch(
set->sepa_efficacynorm )
7234 norm = (row->
len == 0 ? 0.0 : 1.0);
7246 return -feasibility / norm;
7320 while( i1 < row1->nlpcols && i2 < row2->len )
7335 while( i1 < row1->len && i2 < row2->nlpcols )
7367 while( i1 >= 0 && i2 >= 0 )
7371 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7372 if( row1colsidx[i1] < row2colsidx[i2] )
7374 else if( row1colsidx[i1] > row2colsidx[i2] )
7378 scalarprod += row1->
vals[i1] * row2->
vals[i2];
7406 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7412 assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7413 assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7414 assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7415 assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7418 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7420 scalarprod += row1->
vals[ilp1] * row2->
vals[ilp2];
7425 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7427 scalarprod += row1->
vals[ilp1] * row2->
vals[inlp2];
7432 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7434 scalarprod += row1->
vals[inlp1] * row2->
vals[ilp2];
7439 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos >= 0 )
7441 scalarprod += row1->
vals[inlp1] * row2->
vals[inlp2];
7446 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7448 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7450 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7457 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7465 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7467 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7474 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7486 if( ilp1 != row1->
nlpcols && inlp1 != row1->
len )
7524 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7529 assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7530 assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7533 if( row1colsidx[i1] == row2colsidx[ilp2] )
7535 scalarprod += row1->
vals[i1] * row2->
vals[ilp2];
7540 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7542 scalarprod += row1->
vals[i1] * row2->
vals[inlp2];
7547 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7549 if( row1colsidx[i1] < row2colsidx[ilp2] )
7556 if( row1colsidx[i1] < row2colsidx[inlp2] )
7584 while( i1 < end1 && i2 < end2 )
7588 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7591 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7593 scalarprod += row1->
vals[i1] * row2->
vals[i2];
7598 else if( row1colsidx[i1] < row2colsidx[i2] )
7677 while( i1 < row1->nlpcols && i2 < row2->len )
7692 while( i1 < row1->len && i2 < row2->nlpcols )
7724 while( i1 >= 0 && i2 >= 0 )
7728 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7729 if( row1colsidx[i1] < row2colsidx[i2] )
7731 else if( row1colsidx[i1] > row2colsidx[i2] )
7763 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7769 assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7770 assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7771 assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7772 assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7775 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7782 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7789 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7796 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos >= 0 )
7803 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7805 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7807 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7814 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7822 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7824 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7831 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7843 if( ilp1 != row1->
nlpcols && inlp1 != row1->
len )
7881 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7886 assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7887 assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7890 if( row1colsidx[i1] == row2colsidx[ilp2] )
7897 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7904 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7906 if( row1colsidx[i1] < row2colsidx[ilp2] )
7913 if( row1colsidx[i1] < row2colsidx[inlp2] )
7941 while( i1 < end1 && i2 < end2 )
7945 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7948 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7955 else if( row1colsidx[i1] < row2colsidx[i2] )
7983 if( scalarprod == 0.0 )
7997 for(
i = 0;
i < row1->
len; ++
i )
8007 for(
i = 0;
i < row2->
len; ++
i )
8022 SCIPerrorMessage(
"invalid orthogonality function parameter '%c'\n", orthofunc);
8072 parallelism =
MIN(parallelism, 1.0);
8073 parallelism =
MAX(parallelism, 0.0);
8095 eventtype, row->
name, (
void*)eventhdlr, (
void*)eventdata);
8116 SCIPsetDebugMsg(
set,
"drop event of row <%s> with handler %p and data %p\n", row->
name, (
void*)eventhdlr, (
void*)eventdata);
8363 assert(lpipos < lp->nrows);
8364 assert(nnonz < naddcoefs);
8365 ind[nnonz] = lpipos;
8366 val[nnonz] = col->
vals[
i];
8564 name[pos] = row->
name;
8576 assert(lpipos < lp->ncols);
8577 assert(nnonz < naddcoefs);
8579 ind[nnonz] = lpipos;
8580 val[nnonz] = row->
vals[
i];
8694 assert(nobjchg < lp->ncols);
8695 objind[nobjchg] = col->
lpipos;
8713 assert(nbdchg < lp->ncols);
8714 bdind[nbdchg] = col->
lpipos;
8731 SCIPsetDebugMsg(
set,
"flushing objective changes: change %d objective values of %d changed columns\n", nobjchg, lp->
nchgcols);
8829 assert(nchg < lp->nrows);
8928 SCIPsetDebugMsg(
set,
"flushing LP changes: old (%d cols, %d rows), nchgcols=%d, nchgrows=%d, firstchgcol=%d, firstchgrow=%d, new (%d cols, %d rows), flushed=%u\n",
9122 for(
i = 0;
i < col->
len; ++
i )
9161 for(
i = 0;
i < row->
len; ++
i )
9197 for(
i = 0;
i < col->
len; ++
i )
9206 assert(0 <= pos && pos < row->nlpcols);
9235 for(
i = 0;
i < row->
len; ++
i )
9293 if( minsize <= lp->divechgsidessize )
9322#define DIVESTACKINITSIZE 100
9345 (*lp)->lpicols =
NULL;
9346 (*lp)->lpirows =
NULL;
9347 (*lp)->chgcols =
NULL;
9348 (*lp)->chgrows =
NULL;
9350 (*lp)->soldirection =
NULL;
9351 (*lp)->lazycols =
NULL;
9353 (*lp)->lpobjval = 0.0;
9354 (*lp)->glbpseudoobjval = 0.0;
9355 (*lp)->relglbpseudoobjval = 0.0;
9356 (*lp)->glbpseudoobjvalid =
TRUE;
9357 (*lp)->glbpseudoobjvalinf = 0;
9358 (*lp)->pseudoobjval = 0.0;
9359 (*lp)->relpseudoobjval = 0.0;
9360 (*lp)->pseudoobjvalid =
TRUE;
9361 (*lp)->pseudoobjvalinf = 0;
9362 (*lp)->looseobjval = 0.0;
9363 (*lp)->rellooseobjval = 0.0;
9364 (*lp)->looseobjvalid =
TRUE;
9365 (*lp)->looseobjvalinf = 0;
9366 (*lp)->nloosevars = 0;
9372 (*lp)->validdegeneracylp = -1;
9373 (*lp)->objsqrnorm = 0.0;
9374 (*lp)->objsumnorm = 0.0;
9375 (*lp)->lpicolssize = 0;
9376 (*lp)->nlpicols = 0;
9377 (*lp)->lpirowssize = 0;
9378 (*lp)->nlpirows = 0;
9379 (*lp)->lpifirstchgcol = 0;
9380 (*lp)->lpifirstchgrow = 0;
9381 (*lp)->colssize = 0;
9382 (*lp)->soldirectionsize = 0;
9384 (*lp)->lazycolssize = 0;
9385 (*lp)->nlazycols = 0;
9386 (*lp)->rowssize = 0;
9388 (*lp)->chgcolssize = 0;
9389 (*lp)->nchgcols = 0;
9390 (*lp)->chgrowssize = 0;
9391 (*lp)->nchgrows = 0;
9392 (*lp)->firstnewcol = 0;
9393 (*lp)->firstnewrow = 0;
9394 (*lp)->nremovablecols = 0;
9395 (*lp)->nremovablerows = 0;
9396 (*lp)->validsollp = stat->
lpcount;
9397 (*lp)->validfarkaslp = -1;
9398 (*lp)->validsoldirlp = -1;
9399 (*lp)->validsoldirsol =
NULL;
9400 (*lp)->objsqrnormunreliable =
FALSE;
9401 (*lp)->flushdeletedcols =
FALSE;
9402 (*lp)->flushaddedcols =
FALSE;
9403 (*lp)->flushdeletedrows =
FALSE;
9404 (*lp)->flushaddedrows =
FALSE;
9405 (*lp)->updateintegrality =
TRUE;
9406 (*lp)->flushed =
TRUE;
9408 (*lp)->solved =
TRUE;
9409 (*lp)->primalfeasible =
TRUE;
9410 (*lp)->primalchecked =
TRUE;
9411 (*lp)->dualfeasible =
TRUE;
9412 (*lp)->dualchecked =
TRUE;
9413 (*lp)->solisbasic =
FALSE;
9414 (*lp)->rootlpisrelax =
TRUE;
9415 (*lp)->isrelax =
TRUE;
9416 (*lp)->installing =
FALSE;
9417 (*lp)->strongbranching =
FALSE;
9418 (*lp)->strongbranchprobing =
FALSE;
9419 (*lp)->probing =
FALSE;
9420 (*lp)->diving =
FALSE;
9421 (*lp)->divingobjchg =
FALSE;
9422 (*lp)->divinglazyapplied =
FALSE;
9423 (*lp)->divelpistate =
NULL;
9424 (*lp)->divelpwasprimfeas =
TRUE;
9425 (*lp)->divelpwasprimchecked =
TRUE;
9426 (*lp)->divelpwasdualfeas =
TRUE;
9427 (*lp)->divelpwasdualchecked =
TRUE;
9428 (*lp)->hasprovedbound =
FALSE;
9429 (*lp)->divechgsides =
NULL;
9430 (*lp)->divechgsidetypes =
NULL;
9431 (*lp)->divechgrows =
NULL;
9432 (*lp)->ndivechgsides = 0;
9433 (*lp)->divechgsidessize = 0;
9434 (*lp)->ndivingrows = 0;
9435 (*lp)->divinglpiitlim = INT_MAX;
9436 (*lp)->resolvelperror =
FALSE;
9437 (*lp)->divenolddomchgs = 0;
9438 (*lp)->adjustlpval =
FALSE;
9440 (*lp)->lpifeastol = (*lp)->feastol;
9443 (*lp)->lpifromscratch =
FALSE;
9444 (*lp)->lpifastmip =
set->lp_fastmip;
9445 (*lp)->lpiscaling =
set->lp_scaling;
9446 (*lp)->lpipresolving =
set->lp_presolving;
9447 (*lp)->lpilpinfo =
set->disp_lpinfo;
9448 (*lp)->lpirowrepswitch =
set->lp_rowrepswitch;
9449 (*lp)->lpisolutionpolishing = (
set->lp_solutionpolishing > 0);
9450 (*lp)->lpirefactorinterval =
set->lp_refactorinterval;
9451 (*lp)->lpiconditionlimit =
set->lp_conditionlimit;
9452 (*lp)->lpimarkowitz =
set->lp_markowitz;
9453 (*lp)->lpiitlim = INT_MAX;
9456 (*lp)->lpithreads =
set->lp_threads;
9457 (*lp)->lpitiming = (int)
set->time_clocktype;
9458 (*lp)->lpirandomseed =
set->random_randomseed;
9459 (*lp)->storedsolvals =
NULL;
9460 (*lp)->lpexact =
NULL;
9470 "LP Solver <%s>: objective limit cannot be set -- can lead to unnecessary simplex iterations\n",
9474 (*lp)->lpihasfeastol = success;
9478 "LP Solver <%s>: primal feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9482 (*lp)->lpihasdualfeastol = success;
9486 "LP Solver <%s>: dual feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9490 (*lp)->lpihasbarrierconvtol = success;
9494 "LP Solver <%s>: barrier convergence tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9499 (*lp)->lpihasfastmip = success;
9503 "LP Solver <%s>: fastmip setting not available -- SCIP parameter has no effect\n",
9507 (*lp)->lpihasscaling = success;
9511 "LP Solver <%s>: scaling not available -- SCIP parameter has no effect\n",
9515 (*lp)->lpihaspresolving = success;
9519 "LP Solver <%s>: presolving not available -- SCIP parameter has no effect\n",
9526 "LP Solver <%s>: clock type cannot be set\n",
9533 "LP Solver <%s>: iteration limit cannot be set -- can lead to unnecessary simplex iterations\n",
9540 "LP Solver <%s>: pricing strategy cannot be set -- SCIP parameter has no effect\n",
9547 "LP Solver <%s>: lpinfo setting not available -- SCIP parameter has no effect\n",
9551 (*lp)->lpihasrowrep = success;
9555 "LP Solver <%s>: row representation of the basis not available -- SCIP parameter lp/rowrepswitch has no effect\n",
9559 (*lp)->lpihaspolishing = success;
9563 "LP Solver <%s>: solution polishing not available -- SCIP parameter lp/solutionpolishing has no effect\n",
9567 (*lp)->lpihasrefactor = success;
9571 "LP Solver <%s>: refactorization interval not available -- SCIP parameter lp/refactorinterval has no effect\n",
9578 "LP Solver <%s>: condition number limit for the basis not available -- SCIP parameter lp/conditionlimit has no effect\n",
9585 "LP Solver <%s>: markowitz threshhold not available -- SCIP parameter lp/minmarkowitz has no effect\n",
9592 "LP Solver <%s>: number of threads settings not available -- SCIP parameter has no effect\n",
9596 if( (*lp)->lpirandomseed != 0 )
9602 "LP Solver <%s>: random seed parameter not available -- SCIP parameter has no effect\n",
9611 SCIPerrorMessage(
"The infinity value of the LP solver has to be at least as large as the one of SCIP.\n");
9637 for(
i = 0;
i < (*lp)->nlpirows; ++
i )
9642 if( (*lp)->lpi !=
NULL )
9722 for(
i = 0;
i < col->
len; ++
i )
9782 for(
i = 0;
i < row->
len; ++
i )
9879#define checkLazyColArray(lp, set)
9896 assert(newncols <= lp->ncols);
9898 if( newncols < lp->ncols )
9902 for(
c = lp->
ncols-1;
c >= newncols; --
c )
9968 assert(0 <= newnrows && newnrows <= lp->nrows);
9971 if( newnrows < lp->nrows )
9973 for(
r = lp->
nrows-1;
r >= newnrows; --
r )
10227 lhsinfinite =
FALSE;
10228 rhsinfinite =
FALSE;
10240 for(
i = 0;
i < row->
len; ++
i )
10253 if( weights[
r] > 0.0 )
10331 if( lpistate ==
NULL )
10358 if( *lpistate !=
NULL )
10418 if( lpinorms !=
NULL )
10516 assert(newfeastol > 0.0);
10521 if( newfeastol < lp->feastol )
10558 return "primal simplex";
10560 return "dual simplex";
10564 return "barrier/crossover";
10599#ifdef SCIP_MORE_DEBUG
10605 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (primal simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10669 if( iterations > 0 )
10714 if ( keepsol && !(*
lperror) )
10757#ifdef SCIP_MORE_DEBUG
10763 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (dual simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10827 if( iterations > 0 )
10934 int totalIterations;
10978 totalIterations = iterations;
10996 if( iterations > 0 )
11070 chooseBasic =
set->lp_lexdualbasic;
11136#ifdef DEBUG_LEXDUAL
11149 for( j = 0; j < lp->
nlpicols; ++j )
11228 if( pos == -1 &&
c > oldpos )
11241 if( pos == -1 &&
c > oldpos )
11246 newlb[cntcol] = oldlb[
c];
11247 newub[cntcol] = oldlb[
c];
11248 indcol[cntcol++] =
c;
11263 newlb[cntcol] = oldlb[
c];
11264 newub[cntcol] = oldlb[
c];
11270 newlb[cntcol] = oldub[
c];
11271 newub[cntcol] = oldub[
c];
11276 newlb[cntcol] = 0.0;
11277 newub[cntcol] = 0.0;
11280 indcol[cntcol++] =
c;
11304 newlhs[cntrow] = oldlhs[
r];
11305 newrhs[cntrow] = oldlhs[
r];
11310 newlhs[cntrow] = oldrhs[
r];
11311 newrhs[cntrow] = oldrhs[
r];
11313 indrow[cntrow++] =
r;
11320 if( nDualDeg > 0 && pos >= 0 )
11322 assert(0 <= pos && pos < lp->nlpicols && pos > oldpos);
11354 lexIterations += iterations;
11356 if( iterations > 0 )
11358#ifdef DEBUG_LEXDUAL
11369 for( j = 0; j < lp->
nlpicols; ++j )
11425 while( pos >= 0 && nDualDeg > 0 && (
set->lp_lexdualmaxrounds == -1 || rounds < set->lp_lexdualmaxrounds) );
11451 lexIterations += iterations;
11459 if( lexIterations > 0 )
11465 SCIPstatAdd(stat,
set, nlexdualresolvelpiterations, lexIterations);
11470 totalIterations += lexIterations;
11557#ifdef SCIP_MORE_DEBUG
11563 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (barrier, objlim=%.15g, feastol=%.15g/%.15g, convtol=%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
11616 if( iterations > 0 )
11690 if(
set->istimelimitfinite )
11694 if( lptimelimit > 0.0 )
11697 if( lptimelimit <= 0.0 || !success )
11752#define MAXNUMTROUBLELPMSGS 10
11766 const char* formatstr,
11789 if( verblevel >
set->disp_verblevel )
11799 va_start(ap, formatstr);
11806 SCIPmessagePrintInfo(messagehdlr,
" -- further messages will be suppressed (use display/verblevel=5 to see all)");
11831 if( !
set->lp_checkdualfeas )
11833 if( !
set->lp_checkprimfeas )
11840#define FEASTOLTIGHTFAC 0.001
11886 SCIPerrorMessage(
"cannot solve LP when loose variable with infinite best bound is present\n");
11894 itlimishard = (itlim == harditlim);
11900 usepolishing =
TRUE;
11907 usepolishing =
FALSE;
11950 if( !
set->lp_checkstability )
11977 if( !
set->lp_checkstability )
11997 lpalgoName(lpalgo), (scaling == 0) ?
"with" :
"without");
12004 if( !
set->lp_checkstability )
12027 lpalgoName(lpalgo), !
set->lp_presolving ?
"with" :
"without");
12034 if( !
set->lp_checkstability )
12051 if( ((simplex && (!tightprimfeastol || !tightdualfeastol)) || (!tightprimfeastol && !tightdualfeastol)) &&
12055 if( !tightprimfeastol )
12061 if( !tightdualfeastol )
12067 if( !simplex && !tightprimfeastol && !tightdualfeastol )
12073 if( success || success2 || success3 )
12083 if( !
set->lp_checkstability )
12092 if( !tightprimfeastol )
12096 if( !tightdualfeastol )
12100 if( !simplex && !tightprimfeastol && !tightdualfeastol )
12112 if( !fromscratch && simplex )
12124 if( !
set->lp_checkstability )
12145 if( !
set->lp_checkstability )
12158 lpalgoName(lpalgo), (scaling == 0) ?
"with" :
"without");
12165 if( !
set->lp_checkstability )
12183 lpalgoName(lpalgo), !
set->lp_presolving ?
"with" :
"without");
12190 if( !
set->lp_checkstability )
12204 if( !tightprimfeastol || !tightdualfeastol )
12207 if( !tightprimfeastol )
12213 if( !tightdualfeastol )
12219 if( success || success2 )
12229 if( !
set->lp_checkstability )
12238 if( !tightprimfeastol )
12242 if( !tightdualfeastol )
12325 solvedprimal =
FALSE;
12326 solveddual =
FALSE;
12330 itlim = ( resolve ? resolveitlim : harditlim );
12334 SCIP_CALL(
lpSolveStable(lp,
set, messagehdlr, stat, prob, lpalgo, itlim, harditlim, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch,
12335 scaling, keepsol, &timelimit,
lperror) );
12471 SCIPsetDebugMsg(
set,
"solving LP with %s returned solstat=%d (internal status: %d, primalfeasible=%u, dualfeasible=%u)\n",
12514 algo = resolve ?
set->lp_resolvealgorithm :
set->lp_initalgorithm;
12525 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12531 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12538 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12544 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12550 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12556 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12560 SCIPerrorMessage(
"invalid parameter setting <%c> for LP algorithm\n", algo);
12591#define checkLazyBounds(lp, set)
12614 SCIPsetDebugMsg(
set,
"mark all lazy columns as changed in order to reload bounds (diving=%u, applied=%u)\n",
12667 if( (
set->lp_resolveiterfac == -1) || stat->
nlps - stat->
nrootlps < 5 )
12673 return (
int)
MIN(itlim,
MAX(
set->lp_resolveitermin, \
12718 SCIPsetDebugMsg(
set,
"solving LP: %d rows, %d cols, primalfeasible=%u, dualfeasible=%u, solved=%u, diving=%u, probing=%u, cutoffbnd=%g\n",
12722 needprimalray =
TRUE;
12726 harditlim = (int)
MIN(itlim, INT_MAX);
12728 assert(harditlim == -1 || (resolveitlim <= harditlim));
12767 tightprimfeastol =
FALSE;
12768 tightdualfeastol =
FALSE;
12769 fromscratch =
FALSE;
12770 primalfeasible =
FALSE;
12771 dualfeasible =
FALSE;
12772 wasfromscratch = (stat->
nlps == 0);
12773 scaling =
set->lp_scaling;
12777 oldnlps = stat->
nlps;
12778 SCIP_CALL(
lpFlushAndSolve(lp, blkmem,
set, messagehdlr, stat, prob, eventqueue, resolveitlim, harditlim, needprimalray,
12779 needdualray, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12836 if(
set->lp_checkprimfeas )
12838 primalfeaspointer = &primalfeasible;
12844 primalfeasible =
TRUE;
12845 primalfeaspointer =
NULL;
12848 if(
set->lp_checkdualfeas )
12850 dualfeaspointer = &dualfeasible;
12856 dualfeasible =
TRUE;
12857 dualfeaspointer =
NULL;
12861 if( !
set->exact_enable )
12869 if( primalfeasible && dualfeasible && aging && !lp->
diving && stat->
nlps > oldnlps )
12873 if( stat->
nlps % ((
set->lp_rowagelimit+1)/2 + 1) == 0 )
12886 if( !primalfeasible || !dualfeasible )
12893 if( (fastmip > 0) && simplex )
12898 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12902 else if( (!primalfeasible && !tightprimfeastol) || (!dualfeasible && !tightdualfeastol) )
12909 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12910 tightprimfeastol = tightprimfeastol || !primalfeasible;
12911 tightdualfeastol = tightdualfeastol || !dualfeasible;
12914 else if( !fromscratch && !wasfromscratch && simplex )
12919 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12920 fromscratch =
TRUE;
12931 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
12941 farkasvalid =
TRUE;
12955 farkasvalid =
FALSE;
12960 farkasvalid =
TRUE;
12963 if( !farkasvalid && !(*
lperror) )
12967 if( (fastmip > 0) && simplex )
12978 else if( !tightdualfeastol )
12986 tightdualfeastol =
TRUE;
12989 else if( !fromscratch && simplex )
12997 fromscratch =
TRUE;
13015 if(
set->lp_checkprimfeas )
13027 primalfeasible =
TRUE;
13028 rayfeasible =
TRUE;
13035 SCIPsetDebugMsg(
set,
" -> LP has unbounded primal ray (primalfeas=%u, rayfeas=%u)\n",
13036 primalfeasible, rayfeasible);
13038 if( !primalfeasible || !rayfeasible )
13042 if( (fastmip > 0) && simplex )
13047 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
13051 else if( !tightprimfeastol )
13058 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
13059 tightprimfeastol =
TRUE;
13062 else if( !fromscratch && simplex )
13067 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
13068 fromscratch =
TRUE;
13071 else if( scaling > 0 )
13076 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
13122 char tmppricingchar;
13128 fromscratch =
FALSE;
13140 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
13162 if( !(*
lperror) && (fastmip > 0) && simplex )
13166 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
13181 SCIPsetDebugMsg(
set,
"unresolved error while resolving LP in order to exceed the objlimit\n");
13197 if(
set->lp_checkprimfeas )
13199 primalfeaspointer = &primalfeasible;
13205 primalfeasible =
TRUE;
13206 primalfeaspointer =
NULL;
13209 if(
set->lp_checkdualfeas )
13211 dualfeaspointer = &dualfeasible;
13217 dualfeasible =
TRUE;
13218 dualfeaspointer =
NULL;
13243 if( !primalfeasible || !dualfeasible
13253 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
13277 farkasvalid =
FALSE;
13282 farkasvalid =
TRUE;
13288 if( !tightprimfeastol )
13296 tightprimfeastol =
TRUE;
13307 fromscratch =
TRUE;
13325 if(
set->lp_checkprimfeas )
13337 primalfeasible =
TRUE;
13338 rayfeasible =
TRUE;
13347 if( !primalfeasible || !rayfeasible )
13385 SCIPmessagePrintWarning(messagehdlr,
"LP solver reached time limit, but SCIP time limit is not exceeded yet; "
13386 "you might consider switching the clock type of SCIP\n");
13412 SCIPsetDebugMsg(
set,
"resetting parameter SCIP_LPPARAM_FROMSCRATCH to FALSE %s\n", success ?
"" :
"failed");
13542 for( v = 0; v <
nvars; ++v )
13663 int pseudoobjvalinf;
13690 assert(pseudoobjvalinf >= 0);
13702 assert(pseudoobjvalinf >= 0);
13704 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13707 return pseudoobjval;
13722 int pseudoobjvalinf;
13725 if(
set->exact_enable )
13736 pseudoobjval -= oldbound *
obj;
13737 assert(pseudoobjvalinf >= 0);
13741 pseudoobjval += newbound *
obj;
13743 assert(pseudoobjvalinf >= 0);
13745 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13748 return pseudoobjval;
13790 (*deltaval) = ub *
newobj;
13799 (*deltaval) = -lb *
oldobj;
13814 (*deltaval) = -lb *
oldobj;
13835 (*deltaval) = lb *
newobj;
13844 (*deltaval) = -ub *
oldobj;
13859 (*deltaval) = -ub *
oldobj;
13870 (*deltaval) = ub *
newobj;
13877 (*deltaval) = lb *
newobj;
13904 *deltaval = -
obj * oldlb;
13911 *deltaval =
obj * newlb;
13916 *deltaval =
obj * (newlb - oldlb);
13942 *deltaval = -
obj * oldub;
13949 *deltaval =
obj * newub;
13954 *deltaval =
obj * (newub - oldub);
14075 SCIPerrorMessage(
"LP was informed of an objective change of a non-active variable\n");
14177 if(
set->exact_enable )
14237 if(
set->exact_enable )
14275 if(
set->exact_enable )
14316 if(
set->exact_enable )
14354 if(
set->exact_enable )
14513 else if(
obj < 0.0 )
14549 if(
set->exact_enable )
14673 if(
set->exact_enable )
14740 if( primalfeasible ==
NULL )
14741 stillprimalfeasible =
FALSE;
14744 *primalfeasible =
TRUE;
14745 stillprimalfeasible =
TRUE;
14747 if( dualfeasible ==
NULL )
14748 stilldualfeasible =
FALSE;
14751 *dualfeasible =
TRUE;
14752 stilldualfeasible =
TRUE;
14772#ifdef SCIP_USE_LPSOLVER_ACTIVITY
14794 for(
c = 0;
c < nlpicols; ++
c )
14796 assert( 0 <= cstat[
c] && cstat[
c] < 4 );
14804 stillprimalfeasible =
FALSE;
14805 stilldualfeasible =
FALSE;
14814 if( stillprimalfeasible )
14816 stillprimalfeasible =
14819 primalbound += (lpicols[
c]->
primsol * lpicols[
c]->
obj);
14829 if( stilldualfeasible )
14834 if( stilldualfeasible )
14840 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14844 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14847 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14861 if( stilldualfeasible
14864 if( stilldualfeasible
14868 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14872 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14875 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14882 if( stilldualfeasible )
14885 dualbound += (lpicols[
c]->
redcost * lpicols[
c]->
lb);
14887 dualbound += (lpicols[
c]->
redcost * lpicols[
c]->
ub);
14892 for(
r = 0;
r < nlpirows; ++
r )
14894 assert( 0 <= rstat[
r] && rstat[
r] < 4 );
14896#ifdef SCIP_USE_LPSOLVER_ACTIVITY
14900 if( lpirows[
r]->validactivitylp != stat->
lpcount )
14905 if( stillprimalfeasible )
14907 stillprimalfeasible =
14919 if( stilldualfeasible )
14921 compslack =
MIN((lpirows[
r]->activity - lpirows[
r]->lhs), 1.0) * lpirows[
r]->
dualsol;
14924 if( stilldualfeasible )
14926 compslack =
MIN((lpirows[
r]->rhs - lpirows[
r]->activity), 1.0) * lpirows[
r]->
dualsol;
14930 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g]: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14931 lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->activity, lpirows[
r]->dualsol,
14934 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14937 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14945 if( stilldualfeasible &&
14948 if( stilldualfeasible &&
14952 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g] + %.9g: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14953 lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, lpirows[
r]->activity, lpirows[
r]->dualsol,
14956 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14959 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14966 if( stilldualfeasible )
15000 if( primalfeasible !=
NULL )
15001 *primalfeasible = stillprimalfeasible;
15002 if( dualfeasible !=
NULL )
15003 *dualfeasible = stilldualfeasible;
15009#ifdef SCIP_USE_LPSOLVER_ACTIVITY
15050 if( primalfeasible !=
NULL )
15051 *primalfeasible =
TRUE;
15052 if( rayfeasible !=
NULL )
15053 *rayfeasible =
TRUE;
15063 SCIPerrorMessage(
"LP solver has no primal ray to prove unboundedness.\n");
15085 for(
c = 0;
c < nlpicols; ++
c )
15093 if( rayfeasible !=
NULL )
15095 *rayfeasible = *rayfeasible
15101 rayobjval += ray[
c] * col->
obj;
15124 for(
r = 0;
r < nlpirows; ++
r )
15135 col = row->
cols[
c];
15149 col = row->
cols[
c];
15152 if( col->
lppos >= 0 )
15170 if( primalfeasible !=
NULL )
15172 assert( *primalfeasible );
15173 for(
c = 0;
c < nlpicols; ++
c )
15183 *primalfeasible =
FALSE;
15191 for(
r = 0;
r < nlpirows; ++
r )
15204 col = row->
cols[
c];
15219 col = row->
cols[
c];
15222 if( col->
lppos >= 0 )
15231 if( primalfeasible !=
NULL && *primalfeasible )
15235 *primalfeasible =
FALSE;
15239 if( rayfeasible !=
NULL && *rayfeasible )
15243 *rayfeasible =
FALSE;
15247 activity[
r] = primact;
15250 if( primalfeasible !=
NULL && !(*primalfeasible) )
15255 else if( rayfeasible !=
NULL && !(*rayfeasible) )
15266 if( rayfeasible !=
NULL )
15267 *rayfeasible =
FALSE;
15273 assert(rayobjval != 0.0);
15280 for(
c = 0;
c < nlpicols; ++
c )
15285 rayscale =
MIN(rayscale, (lpicols[
c]->ub -
primsol[
c]) / ray[
c]);
15290 rayscale =
MIN(rayscale, 1.0 / ray[
c]);
15296 rayscale =
MIN(rayscale, (lpicols[
c]->lb -
primsol[
c]) / ray[
c]);
15301 rayscale =
MIN(rayscale, -1.0 / ray[
c]);
15309 SCIPsetDebugMsg(
set,
"unbounded LP solution: rayobjval=%f, rayscale=%f\n", rayobjval, rayscale);
15314 for(
c = 0;
c < nlpicols; ++
c )
15321 primsolval =
primsol[
c] + rayscale * ray[
c];
15329 for(
r = 0;
r < nlpirows; ++
r )
15386 for(
c = 0;
c < nlpicols;
c++ )
15442 farkascoefs =
NULL;
15466 for(
r = 0;
r < nlpirows; ++
r )
15475 if( checkfarkas && dualfarkas[
r] != 0.0 )
15488 SCIPsetDebugMsg(
set,
"farkas proof is invalid: row <%s>[lhs=%g,rhs=%g,c=%g] has multiplier %g\n",
15489 SCIProwGetName(lpirows[
r]), lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, dualfarkas[
r]);
15503 for(
c = 0;
c < lpirows[
r]->
len;
c++ )
15510 assert(pos >= 0 && pos < nlpicols);
15512 farkascoefs[pos] += dualfarkas[
r] * lpirows[
r]->
vals[
c];
15516 if( dualfarkas[
r] > 0.0 )
15520 farkaslhs += dualfarkas[
r] * lpirows[
r]->
lhs;
15523 else if( dualfarkas[
r] < 0.0 )
15527 farkaslhs += dualfarkas[
r] * lpirows[
r]->
rhs;
15530 maxactivity += dualfarkas[
r] * lpirows[
r]->
constant;
15535 for(
c = 0;
c < nlpicols; ++
c )
15553 if( farkascoefs[
c] > 0.0 )
15555 maxactivity += farkascoefs[
c] * lpicols[
c]->
ub;
15559 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15568 maxactivity += farkascoefs[
c] * lpicols[
c]->
lb;
15572 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15588 SCIPsetDebugMsg(
set,
"farkas proof is invalid: maxactivity=%.12f, lhs=%.12f\n", maxactivity, farkaslhs);
15649 for(
c = 0;
c < nlpicols; ++
c )
15655 lpicols[
c]->
age = 0;
15660 for(
r = 0;
r < nlpirows; ++
r )
15665 if( lpirows[
r]->dualsol == 0.0 )
15672 lpirows[
r]->
age = 0;
15705 for(
c = 0;
c < ncols; ++
c )
15711 col->
lppos = coldstat[
c];
15712 if( coldstat[
c] == -1 )
15730 else if( coldstat[
c] <
c )
15734 lp->
cols[coldstat[
c]] = col;
15757 if( lp->
ncols < ncols )
15806 for(
r = 0;
r < nrows; ++
r )
15812 row->
lppos = rowdstat[
r];
15813 if( rowdstat[
r] == -1 )
15842 else if( rowdstat[
r] <
r )
15846 lp->
rows[rowdstat[
r]] = row;
15856 if( lp->
nrows < nrows )
15918 for(
c = firstcol;
c < ncols; ++
c )
15923 if( cols[
c]->removable
15924 && cols[
c]->obsoletenode != stat->
nnodes
15925 && cols[
c]->
age >
set->lp_colagelimit
15997 for(
r = firstrow;
r < nrows; ++
r )
16002 if( rows[
r]->removable
16003 && rows[
r]->obsoletenode != stat->
nnodes
16004 && rows[
r]->
age >
set->lp_rowagelimit
16011 rows[
r]->name, rows[
r]->activity, rows[
r]->lhs, rows[
r]->rhs);
16046 SCIPsetDebugMsg(
set,
"removing obsolete columns starting with %d/%d, obsolete rows starting with %d/%d\n",
16079 if( 0 < lp->
ncols )
16083 if( 0 < lp->
nrows )
16113 assert(0 <= firstcol && firstcol < lp->ncols);
16128 for(
c = firstcol;
c < ncols; ++
c )
16133 if( lpicols[
c]->removable
16186 assert(0 <= firstrow && firstrow < lp->nrows);
16203 for(
r = firstrow;
r < nrows; ++
r )
16251 cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
16252 cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
16254 SCIPsetDebugMsg(
set,
"removing unused columns starting with %d/%d (%u), unused rows starting with %d/%d (%u), LP algo: %d, basic sol: %u\n",
16290 cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
16291 cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
16293 SCIPsetDebugMsg(
set,
"removing all unused columns (%u) and rows (%u), LP algo: %d, basic sol: %u\n",
16296 if( cleanupcols && 0 < lp->
ncols )
16300 if( cleanuprows && 0 < lp->
nrows )
16367 SCIPsetDebugMsg(
set,
"removing %d/%d redundant basic rows from LP\n", ndelrows, nrows);
16405 SCIPsetDebugMsg(
set,
"diving started (LP flushed: %u, LP solved: %u, solstat: %d)\n",
16431 if( !
set->lp_resolverestore && lp->
solved )
16513 for( v = 0; v <
nvars; ++v )
16581 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, prob, -1LL,
FALSE,
FALSE,
FALSE,
FALSE, &
lperror) );
16593 "LP was not resolved to a sufficient status after diving\n");
16672#define DIVESTACKGROWFACT 1.5
16797 for( j = 0; j < lp->
nrows; ++j )
16826 for( j = 0; j < lp->
ncols; ++j )
16834 c = usefarkas ? 0.0 : col->
obj;
16901 *proved = (
bound > 0.0);
16903 SCIPsetDebugMsg(
set,
"proved Farkas value of LP: %g -> infeasibility %sproved\n",
bound, *proved ?
"" :
"not ");
16949 file = fopen(fname,
"w");
16959 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Original Variable and Constraint Names have been replaced by generic names.\n");
16962 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Warning: Variable and Constraint Names should not contain special characters like '+', '=' etc.\n");
16966 if( origobj && objoffset != 0.0 )
16968 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ An artificial variable 'objoffset' has been added and fixed to 1.\n");
16969 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Switching this variable to 0 will disable the offset in the objective.\n\n");
17004 if( origobj && objoffset != 0.0 )
17042 if( strlen(rowname) > 0 )
17047 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
17068 if( (j+1) % 10 == 0 )
17133 if( strlen(rowname) > 0 )
17138 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
17159 if( (j+1) % 10 == 0 )
17210 if( origobj && objoffset != 0.0 )
17248#undef SCIPcolGetObj
17251#undef SCIPcolGetBestBound
17252#undef SCIPcolGetPrimsol
17253#undef SCIPcolGetMinPrimsol
17254#undef SCIPcolGetMaxPrimsol
17255#undef SCIPcolGetBasisStatus
17256#undef SCIPcolGetVar
17257#undef SCIPcolGetIndex
17258#undef SCIPcolGetVarProbindex
17259#undef SCIPcolIsIntegral
17260#undef SCIPcolIsRemovable
17261#undef SCIPcolGetLPPos
17262#undef SCIPcolGetLPDepth
17263#undef SCIPcolIsInLP
17264#undef SCIPcolGetNNonz
17265#undef SCIPcolGetNLPNonz
17266#undef SCIPcolGetRows
17267#undef SCIPcolGetVals
17268#undef SCIPcolGetStrongbranchNode
17269#undef SCIPcolGetNStrongbranchs
17270#undef SCIPcolGetAge
17271#undef SCIPboundtypeOpposite
17272#undef SCIProwGetNNonz
17273#undef SCIProwGetNLPNonz
17274#undef SCIProwGetCols
17275#undef SCIProwGetVals
17276#undef SCIProwGetConstant
17277#undef SCIProwGetNorm
17278#undef SCIProwGetSumNorm
17279#undef SCIProwGetLhs
17280#undef SCIProwGetRhs
17281#undef SCIProwGetDualsol
17282#undef SCIProwGetDualfarkas
17283#undef SCIProwGetBasisStatus
17284#undef SCIProwGetName
17285#undef SCIProwGetIndex
17286#undef SCIProwGetAge
17287#undef SCIProwGetRank
17288#undef SCIProwIsIntegral
17289#undef SCIProwIsLocal
17290#undef SCIProwIsModifiable
17291#undef SCIProwIsRemovable
17292#undef SCIProwGetOrigintype
17293#undef SCIProwGetOriginCons
17294#undef SCIProwGetOriginConshdlr
17295#undef SCIProwGetOriginSepa
17296#undef SCIProwIsInGlobalCutpool
17297#undef SCIProwGetLPPos
17298#undef SCIProwGetLPDepth
17299#undef SCIProwIsInLP
17300#undef SCIProwGetActiveLPCount
17301#undef SCIProwGetNLPsAfterCreation
17302#undef SCIProwChgRank
17303#undef SCIProwGetRowExact
17304#undef SCIPlpGetCols
17305#undef SCIPlpGetNCols
17306#undef SCIPlpGetRows
17307#undef SCIPlpGetNRows
17308#undef SCIPlpGetNewcols
17309#undef SCIPlpGetNNewcols
17310#undef SCIPlpGetNewrows
17311#undef SCIPlpGetNNewrows
17312#undef SCIPlpGetObjNorm
17313#undef SCIPlpGetRootObjval
17314#undef SCIPlpGetRootColumnObjval
17315#undef SCIPlpGetRootLooseObjval
17317#undef SCIPlpSetIsRelax
17318#undef SCIPlpIsRelax
17319#undef SCIPlpIsSolved
17320#undef SCIPlpIsSolBasic
17322#undef SCIPlpDivingObjChanged
17323#undef SCIPlpMarkDivingObjChanged
17324#undef SCIPlpUnmarkDivingObjChanged
17325#undef SCIPlpDivingRowsChanged
17326#undef SCIPlpIsFeasEQ
17327#undef SCIPlpIsFeasLT
17328#undef SCIPlpIsFeasLE
17329#undef SCIPlpIsFeasGT
17330#undef SCIPlpIsFeasGE
17331#undef SCIPlpIsFeasZero
17332#undef SCIPlpIsFeasPositive
17333#undef SCIPlpIsFeasNegative
17372 if( col->
obj >= 0.0 )
17385 if( col->
lppos >= 0 )
17516 return (col->
lppos >= 0);
17712 if( row->
lppos >= 0 )
17725 if( row->
lppos >= 0 )
17924 return (row->
lppos >= 0);
18003 nlpcols = lp->
ncols;
18006 for(
c = 0;
c < nlpcols; ++
c )
18008 if( lpcols[
c]->ub - lpcols[
c]->lb >
eps )
18012 return nunfixedcols;
18095 for(
c = lp->
ncols - 1;
c >= 0; --
c )
18349 SCIPmessagePrintWarning(messagehdlr,
"Could not set feasibility tolerance of LP solver for relative interior point computation.\n");
18357 SCIPmessagePrintWarning(messagehdlr,
"Could not set dual feasibility tolerance of LP solver for relative interior point computation.\n");
18362 nnewcols = 3*lp->
ncols + 2*lp->
nrows + (inclobjcutoff ? 1 : 0) + 1;
18368 for( j = 0; j < lp->
ncols; ++j )
18378 nnewcols = lp->
ncols;
18379 obj[nnewcols] = 0.0;
18380 lb[nnewcols] = 1.0;
18404 ntotnonz += row->
nlpcols + 1;
18414 lb[nnewcols] = 0.0;
18415 ub[nnewcols] = 1.0;
18416 obj[nnewcols++] = 1.0;
18417 ntotnonz += row->
nlpcols + 2;
18420 ntotnonz += row->
nlpcols + 1;
18427 lb[nnewcols] = 0.0;
18428 ub[nnewcols] = 1.0;
18429 obj[nnewcols++] = 1.0;
18430 ntotnonz += row->
nlpcols + 2;
18433 ntotnonz += row->
nlpcols + 1;
18440 if( inclobjcutoff && relaxrows )
18443 lb[nnewcols] = 0.0;
18444 ub[nnewcols] = 1.0;
18445 obj[nnewcols++] = 1.0;
18446 ntotnonz += lp->
ncols + 2;
18451 for( j = 0; j < lp->
ncols; ++j )
18469 lb[nnewcols] = 0.0;
18470 ub[nnewcols] = 1.0;
18471 obj[nnewcols++] = 1.0;
18477 lb[nnewcols] = 0.0;
18478 ub[nnewcols] = 1.0;
18479 obj[nnewcols++] = 1.0;
18486 nslacks = nnewcols - lp->
ncols - 1;
18488 assert( nnewcols <= 3*lp->ncols + 2*lp->
nrows + (inclobjcutoff ? 1 : 0) + 1 );
18530 assert( nnonz <= lp->ncols );
18531 rowcols = row->
cols;
18532 rowvals = row->
vals;
18538 matbeg[matrowidx] = matidx;
18539 for( j = 0; j < nnonz; ++j )
18542 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18545 matinds[matidx] = rowcols[j]->
lppos;
18546 matvals[matidx++] = rowvals[j];
18547 assert( matidx <= ntotnonz );
18553 matinds[matidx] = lp->
ncols;
18554 matvals[matidx++] = -rhs;
18555 assert( matidx <= ntotnonz );
18558 matlhs[matrowidx] = 0.0;
18559 matrhs[matrowidx++] = 0.0;
18560 assert( matrowidx <= ntotrows );
18573 matbeg[matrowidx] = matidx;
18574 for( j = 0; j < nnonz; ++j )
18577 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18580 matinds[matidx] = rowcols[j]->
lppos;
18581 matvals[matidx++] = rowvals[j];
18582 assert( matidx <= ntotnonz );
18588 matinds[matidx] = lp->
ncols;
18589 matvals[matidx++] = -lhs;
18590 assert( matidx <= ntotnonz );
18596 matvals[matidx] = -
MAX(1.0, lhs);
18597 matinds[matidx++] = lp->
ncols + 1 + cnt;
18598 assert( matidx <= ntotnonz );
18602 matlhs[matrowidx] = 0.0;
18604 assert( matrowidx <= ntotrows );
18611 matbeg[matrowidx] = matidx;
18612 for( j = 0; j < nnonz; ++j )
18615 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18618 matinds[matidx] = rowcols[j]->
lppos;
18619 matvals[matidx++] = rowvals[j];
18620 assert( matidx <= ntotnonz );
18626 matinds[matidx] = lp->
ncols;
18627 matvals[matidx++] = -rhs;
18628 assert( matidx <= ntotnonz );
18634 matvals[matidx] =
MAX(1.0, absrhs);
18635 matinds[matidx++] = lp->
ncols + 1 + cnt;
18640 matrhs[matrowidx++] = 0.0;
18641 assert( matrowidx <= ntotrows );
18647 if( inclobjcutoff )
18656 matbeg[matrowidx] = matidx;
18657 for( j = 0; j < lp->
ncols; ++j )
18666 matvals[matidx++] = lp->
cols[j]->
obj;
18667 assert( matidx <= ntotnonz );
18676 matinds[matidx] = lp->
ncols;
18677 matvals[matidx++] = -rhs;
18678 assert( matidx <= ntotnonz );
18686 matvals[matidx] =
MAX(1.0, absrhs);
18687 matinds[matidx++] = lp->
ncols + 1 + cnt;
18688 assert( matidx <= ntotnonz );
18692 matrhs[matrowidx++] = 0.0;
18693 assert( matrowidx <= ntotrows );
18697 for( j = 0; j < lp->
ncols; ++j )
18711 matbeg[matrowidx] = matidx;
18713 matinds[matidx] = j;
18714 matvals[matidx++] = 1.0;
18715 assert( matidx <= ntotnonz );
18720 matinds[matidx] = lp->
ncols;
18721 matvals[matidx++] = -col->
ub;
18722 assert( matidx <= ntotnonz );
18725 matlhs[matrowidx] = 0.0;
18726 matrhs[matrowidx++] = 0.0;
18727 assert( matrowidx <= ntotrows );
18739 matbeg[matrowidx] = matidx;
18741 matinds[matidx] = j;
18742 matvals[matidx++] = 1.0;
18743 assert( matidx <= ntotnonz );
18748 matinds[matidx] = lp->
ncols;
18749 matvals[matidx++] = -col->
lb;
18750 assert( matidx <= ntotnonz );
18754 matvals[matidx] = -
MAX(1.0, abscollb);
18755 matinds[matidx++] = lp->
ncols + 1 + cnt;
18756 assert( matidx <= ntotnonz );
18759 matlhs[matrowidx] = 0.0;
18761 assert( matrowidx <= ntotrows );
18768 matbeg[matrowidx] = matidx;
18770 matinds[matidx] = j;
18771 matvals[matidx++] = 1.0;
18772 assert( matidx <= ntotnonz );
18777 matinds[matidx] = lp->
ncols;
18778 matvals[matidx++] = -col->
ub;
18779 assert( matidx <= ntotnonz );
18783 matvals[matidx] =
MAX(1.0, abscolub);
18784 matinds[matidx++] = lp->
ncols + 1 + cnt;
18785 assert( matidx <= ntotnonz );
18789 matrhs[matrowidx++] = 0.0;
18790 assert( matrowidx <= ntotrows );
18793 assert( cnt == nslacks );
18794 assert( matrowidx == ntotrows );
18813 assert( ncols == nnewcols );
18824 SCIPmessagePrintWarning(messagehdlr,
"Could not set time limit of LP solver for relative interior point computation.\n");
18833 SCIPmessagePrintWarning(messagehdlr,
"Could not set iteration limit of LP solver for relative interior point computation.\n");
18859 for( j = 0; j < lp->
ncols; ++j )
18860 point[j] = primal[j]/
alpha;
18884 assert( nnonz <= lp->ncols );
18885 rowcols = row->
cols;
18886 rowvals = row->
vals;
18889 for( j = 0; j < nnonz; ++j )
18890 sum += rowvals[j] * primal[rowcols[j]->lppos];
18914 if( inclobjcutoff )
18923 for( j = 0; j < lp->
ncols; ++j )
18932 for( j = 0; j < lp->
ncols; ++j )
19031 if ( timelimit <= 0.0 || iterlimit <= 0 )
19037 if( lp->
ncols == 0 )
19042 inclobjcutoff =
FALSE;
19047 if( lp->
nrows == 0 && !inclobjcutoff )
19060 retcode =
computeRelIntPoint(lpi,
set, messagehdlr, lp, prob, relaxrows, inclobjcutoff, timelimit, iterlimit, point, success);
19103 int nfixedcols = 0;
19104 int nalreadyfixedcols = 0;
19105 int nfixedrows = 0;
19107 int nimplicitfixedrows = 0;
19112 int nbasicequalities = 0;
19120 for(
c = ncols - 1 ;
c >= 0; --
c )
19133 ++nalreadyfixedcols;
19138 for(
r = nrows - 1;
r >= 0; --
r )
19171 ++nimplicitfixedrows;
19177 ++nbasicequalities;
19179 assert(nfixedcols + nfixedrows <= ncols + nineq + nbasicequalities - nrows - nalreadyfixedcols - nimplicitfixedrows);
19181 if( ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols > 0 )
19182 lp->
degeneracy = 1.0 - 1.0 * (nfixedcols + nfixedrows) / (ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols);
19187 lp->
varconsratio = 1.0 * (ncols + nineq + nbasicequalities - nfixedcols - nfixedrows - nalreadyfixedcols) / nrows;
SCIP_RETCODE SCIPcertificateFreeRowInfo(SCIP *scip, SCIP_ROW *row)
methods for certificate output
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
internal methods for clocks and timing issues
void SCIPconsCapture(SCIP_CONS *cons)
SCIP_RETCODE SCIPconsRelease(SCIP_CONS **cons, BMS_BLKMEM *blkmem, SCIP_SET *set)
internal methods for constraints and constraint handlers
#define SCIP_DEFAULT_SUMEPSILON
#define SCIP_DEFAULT_EPSILON
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPeventCreateRowDeletedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
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)
SCIP_RETCODE SCIPeventfilterFree(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set)
SCIP_RETCODE SCIPeventCreateRowSideChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_SIDETYPE side, SCIP_Real oldval, SCIP_Real newval)
SCIP_RETCODE SCIPeventfilterDel(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_RETCODE SCIPeventfilterCreate(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPeventCreateRowConstChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_Real oldval, SCIP_Real newval)
SCIP_RETCODE SCIPeventfilterAdd(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPeventCreateRowCoefChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_COL *col, SCIP_Real oldval, SCIP_Real newval)
SCIP_RETCODE SCIPeventCreateRowAddedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
internal methods for managing events
SCIP_Bool SCIPlpiExactHasDualRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
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)
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
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)
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
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)
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
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)
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
const char * SCIPlpiGetSolverName(void)
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
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)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
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)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2)
SCIP_Bool SCIPrealIsExactlyIntegral(SCIP_Real val)
SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *numerator, SCIP_Longint *denominator)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
void SCIPswapPointers(void **pointer1, void **pointer2)
SCIP_Real SCIPcolGetMinPrimsol(SCIP_COL *col)
int SCIPcolGetLPPos(SCIP_COL *col)
int SCIPcolGetVarProbindex(SCIP_COL *col)
SCIP_Bool SCIPcolIsRemovable(SCIP_COL *col)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Bool SCIPcolIsIntegral(SCIP_COL *col)
SCIP_Bool SCIPcolIsImpliedIntegral(SCIP_COL *col)
SCIP_Real SCIPcolGetObj(SCIP_COL *col)
int SCIPcolGetNNonz(SCIP_COL *col)
SCIP_Real * SCIPcolGetVals(SCIP_COL *col)
SCIP_ROW ** SCIPcolGetRows(SCIP_COL *col)
void SCIPcolSort(SCIP_COL *col)
int SCIPcolGetIndex(SCIP_COL *col)
SCIP_Real SCIPcolGetBestBound(SCIP_COL *col)
SCIP_Real SCIPcolGetLb(SCIP_COL *col)
SCIP_Real SCIPcolGetPrimsol(SCIP_COL *col)
SCIP_Real SCIPcolGetUb(SCIP_COL *col)
SCIP_Longint SCIPcolGetStrongbranchNode(SCIP_COL *col)
int SCIPcolGetNLPNonz(SCIP_COL *col)
int SCIPcolGetNStrongbranchs(SCIP_COL *col)
int SCIPcolGetAge(SCIP_COL *col)
SCIP_Bool SCIPcolIsInLP(SCIP_COL *col)
int SCIPcolGetLPDepth(SCIP_COL *col)
SCIP_BASESTAT SCIPcolGetBasisStatus(SCIP_COL *col)
SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype)
SCIP_Real SCIPcolGetMaxPrimsol(SCIP_COL *col)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
void SCIPintervalSub(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
struct SCIP_Interval SCIP_INTERVAL
void SCIPintervalMul(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalAdd(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSetRational(SCIP_INTERVAL *resultant, SCIP_RATIONAL *value)
SCIP_Bool SCIPrationalIsFpRepresentable(SCIP_RATIONAL *rational)
SCIP_Bool SCIProwIsIntegral(SCIP_ROW *row)
void SCIProwSort(SCIP_ROW *row)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_Bool SCIProwIsModifiable(SCIP_ROW *row)
SCIP_Longint SCIProwGetActiveLPCount(SCIP_ROW *row)
SCIP_Real SCIProwGetOrthogonality(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc)
SCIP_Real SCIProwGetScalarProduct(SCIP_ROW *row1, SCIP_ROW *row2)
int SCIProwGetLPDepth(SCIP_ROW *row)
SCIP_Real SCIProwGetParallelism(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc)
SCIP_CONS * SCIProwGetOriginCons(SCIP_ROW *row)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Bool SCIProwIsInGlobalCutpool(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
int SCIProwGetAge(SCIP_ROW *row)
int SCIProwGetNLPNonz(SCIP_ROW *row)
SCIP_Real SCIProwGetNorm(SCIP_ROW *row)
int SCIProwGetLPPos(SCIP_ROW *row)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_CONSHDLR * SCIProwGetOriginConshdlr(SCIP_ROW *row)
SCIP_Longint SCIProwGetNLPsAfterCreation(SCIP_ROW *row)
void SCIProwLock(SCIP_ROW *row)
SCIP_Bool SCIProwIsRemovable(SCIP_ROW *row)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_SEPA * SCIProwGetOriginSepa(SCIP_ROW *row)
void SCIProwUnlock(SCIP_ROW *row)
SCIP_Real SCIProwGetSumNorm(SCIP_ROW *row)
int SCIProwGetRank(SCIP_ROW *row)
SCIP_Real SCIProwGetDualfarkas(SCIP_ROW *row)
int SCIProwGetIndex(SCIP_ROW *row)
void SCIProwChgRank(SCIP_ROW *row, int rank)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_ROWEXACT * SCIProwGetRowExact(SCIP_ROW *row)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_ROWORIGINTYPE SCIProwGetOrigintype(SCIP_ROW *row)
SCIP_BASESTAT SCIProwGetBasisStatus(SCIP_ROW *row)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_BOUNDTYPE SCIPvarGetBestBoundType(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLazy(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_Real SCIPvarGetNLPSol(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetObjExact(SCIP_VAR *var)
SCIP_Real SCIPvarGetUnchangedObj(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLazy(SCIP_VAR *var)
void SCIPsortPtrRealInt(void **ptrarray, SCIP_Real *realarray, int *intarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortIntPtrIntReal(int *intarray1, void **ptrarray, int *intarray2, SCIP_Real *realarray, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
void SCIPprintSysError(const char *message)
assert(minobj< SCIPgetCutoffbound(scip))
interval arithmetics for provable bounds
static SCIP_RETCODE lpFlushDelRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set)
static void rowCalcIdxsAndVals(SCIP_ROW *row, SCIP_SET *set)
SCIP_RETCODE SCIPlpCleanupNew(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Bool root)
SCIP_Bool SCIPlpIsSolBasic(SCIP_LP *lp)
#define debugColPrint(x, y)
static void getObjvalDeltaObj(SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj, SCIP_Real lb, SCIP_Real ub, SCIP_Real *deltaval, int *deltainf)
static SCIP_RETCODE lpSetObjlim(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real objlim, SCIP_Bool *success)
static SCIP_RETCODE insertColChgcols(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp)
SCIP_Real SCIProwGetMaxval(SCIP_ROW *row, SCIP_SET *set)
SCIP_Real SCIProwGetRelaxEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPcolChgUb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newub)
SCIP_Real SCIProwGetLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_Real SCIPcolCalcRedcost(SCIP_COL *col, SCIP_Real *dualsol)
SCIP_RETCODE SCIPlpGetBInvRow(SCIP_LP *lp, int r, SCIP_Real *coef, int *inds, int *ninds)
static SCIP_RETCODE lpSetRefactorInterval(SCIP_LP *lp, int refactor, SCIP_Bool *success)
SCIP_Real SCIProwGetNLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPcolFree(SCIP_COL **col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
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, int scaling, SCIP_Bool keepsol, SCIP_Bool *timelimit, SCIP_Bool *lperror)
void SCIProwCapture(SCIP_ROW *row)
SCIP_RETCODE SCIPlpFreeState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_Real SCIProwGetPseudoFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPlpUpdateAges(SCIP_LP *lp, SCIP_STAT *stat)
SCIP_RETCODE SCIPlpGetBInvCol(SCIP_LP *lp, int c, SCIP_Real *coef, int *inds, int *ninds)
SCIP_RETCODE SCIPcolChgLb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newlb)
#define DIVESTACKGROWFACT
static SCIP_RETCODE lpSetTiming(SCIP_LP *lp, SCIP_CLOCKTYPE timing, SCIP_Bool enabled, SCIP_Bool *success)
SCIP_RETCODE SCIPlpInterrupt(SCIP_LP *lp, SCIP_Bool interrupt)
static SCIP_RETCODE lpLexDualSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool *lperror)
static void rowDelNorms(SCIP_ROW *row, SCIP_SET *set, SCIP_COL *col, SCIP_Real val, SCIP_Bool forcenormupdate, SCIP_Bool updateindex, SCIP_Bool updateval)
SCIP_RETCODE SCIProwChgCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real val)
static SCIP_RETCODE lpSetFromscratch(SCIP_LP *lp, SCIP_Bool fromscratch, SCIP_Bool *success)
static void colSortNonLP(SCIP_COL *col)
static SCIP_RETCODE ensureLpicolsSize(SCIP_LP *lp, SCIP_SET *set, int num)
SCIP_Real SCIPcolCalcFarkasCoef(SCIP_COL *col, SCIP_Real *dualfarkas)
static void rowMoveCoef(SCIP_ROW *row, int oldpos, int newpos)
static SCIP_RETCODE lpSetFastmip(SCIP_LP *lp, int fastmip, SCIP_Bool *success)
SCIP_RETCODE SCIPlpGetNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
static SCIP_RETCODE lpSetRealpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Real value, SCIP_Bool *success)
static SCIP_RETCODE lpCopyIntegrality(SCIP_LP *lp, SCIP_SET *set)
static SCIP_RETCODE lpStoreSolVals(SCIP_LP *lp, SCIP_STAT *stat, BMS_BLKMEM *blkmem)
void SCIPlpMarkSize(SCIP_LP *lp)
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, SCIP_Bool global)
int SCIProwGetNumIntCols(SCIP_ROW *row, SCIP_SET *set)
static SCIP_RETCODE lpSetLPInfo(SCIP_LP *lp, SCIP_Bool lpinfo)
SCIP_RETCODE SCIPlpGetState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
void SCIPlpRecalculateObjSqrNorm(SCIP_SET *set, SCIP_LP *lp)
static void lpUpdateObjNorms(SCIP_LP *lp, SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj)
static SCIP_RETCODE lpRemoveObsoleteRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int firstrow)
int SCIPlpGetNNewcols(SCIP_LP *lp)
SCIP_Real SCIProwGetSolFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol)
void SCIProwRecalcPseudoActivity(SCIP_ROW *row, SCIP_STAT *stat)
SCIP_RETCODE SCIProwEnsureSize(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
SCIP_Bool SCIPlpIsFeasPositive(SCIP_LP *lp, SCIP_Real val)
SCIP_Bool SCIPlpIsFeasGT(SCIP_SET *set, SCIP_LP *lp, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPlpIsInfeasibilityProved(SCIP_LP *lp, SCIP_SET *set, SCIP_Bool *proved)
SCIP_Real SCIProwGetRelaxFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPlpAddCol(SCIP_LP *lp, SCIP_SET *set, SCIP_COL *col, int depth)
#define MAXNUMTROUBLELPMSGS
SCIP_Real SCIPlpGetLooseObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_RETCODE SCIPlpSetState(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, SCIP_LPISTATE *lpistate, SCIP_Bool wasprimfeas, SCIP_Bool wasprimchecked, SCIP_Bool wasdualfeas, SCIP_Bool wasdualchecked)
static SCIP_RETCODE colDelCoefPos(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, int pos)
static void colSwapCoefs(SCIP_COL *col, int pos1, int pos2)
static void rowCalcActivityBounds(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_Real SCIPlpGetObjNorm(SCIP_LP *lp)
SCIP_Real SCIProwGetMaxActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
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)
static SCIP_RETCODE lpSetPresolving(SCIP_LP *lp, SCIP_Bool presolving, SCIP_Bool *success)
SCIP_RETCODE SCIPlpRemoveNewObsoletes(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
SCIP_Bool SCIProwIsLPEfficacious(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool root)
SCIP_Real SCIProwGetSolEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol)
static int colSearchCoefPart(SCIP_COL *col, const SCIP_ROW *row, int minpos, int maxpos)
SCIP_RETCODE SCIPlpStartStrongbranch(SCIP_LP *lp)
static int rowSearchCoefPart(SCIP_ROW *row, const SCIP_COL *col, int minpos, int maxpos)
SCIP_Bool SCIPlpDivingObjChanged(SCIP_LP *lp)
#define checkRowSumnorm(row)
static int colSearchCoef(SCIP_COL *col, const SCIP_ROW *row)
SCIP_RETCODE SCIPlpFlush(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue)
static SCIP_RETCODE rowDelCoefPos(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, int pos)
SCIP_RETCODE SCIPlpUpdateVarLb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb)
void SCIPlpDecNLoosevars(SCIP_LP *lp)
static void rowSwapCoefs(SCIP_ROW *row, int pos1, int pos2)
SCIP_RETCODE SCIProwAddConstant(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real addval)
static SCIP_RETCODE rowChgCoefPos(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, int pos, SCIP_Real val)
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)
static SCIP_RETCODE lpAdjustObjlimForExactSolve(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_STAT *stat, SCIP_Bool *success)
static void recomputePseudoObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
void SCIPlpSetFeastol(SCIP_LP *lp, SCIP_SET *set, SCIP_Real newfeastol)
SCIP_RETCODE SCIPcolChgCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val)
SCIP_RETCODE rowUnlink(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp)
#define lpCutoffDisabled(set, prob, lp)
SCIP_RETCODE SCIPlpWrite(SCIP_LP *lp, const char *fname)
int SCIProwGetMaxidx(SCIP_ROW *row, SCIP_SET *set)
static void colSortLP(SCIP_COL *col)
static void adjustLPobjval(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
static SCIP_RETCODE lpFlushAddRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
SCIP_Real SCIPlpGetModifiedPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype)
static int rowSearchCoef(SCIP_ROW *row, const SCIP_COL *col)
SCIP_Real SCIProwGetLPActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
void SCIProwMarkNotRemovableLocal(SCIP_ROW *row, SCIP_STAT *stat)
static SCIP_RETCODE lpSetPricing(SCIP_LP *lp, SCIP_PRICING pricing)
SCIP_RETCODE SCIPlpUpdateVarLbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb)
static SCIP_RETCODE colRestoreSolVals(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer)
SCIP_LPSOLSTAT SCIPlpGetSolstat(SCIP_LP *lp)
SCIP_RETCODE SCIPlpShrinkCols(SCIP_LP *lp, SCIP_SET *set, int newncols)
void SCIPlpStoreRootObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE lpSetPricingChar(SCIP_LP *lp, char pricingchar)
SCIP_RETCODE SCIProwCreate(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, 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)
static SCIP_RETCODE colStoreSolVals(SCIP_COL *col, BMS_BLKMEM *blkmem)
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)
SCIP_ROW ** SCIPlpGetNewrows(SCIP_LP *lp)
static SCIP_RETCODE ensureSoldirectionSize(SCIP_LP *lp, int num)
void SCIPlpRecomputeLocalAndGlobalPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE lpSetMarkowitz(SCIP_LP *lp, SCIP_Real threshhold, SCIP_Bool *success)
static void rowUpdateAddLP(SCIP_ROW *row)
static SCIP_RETCODE lpCheckIntpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, int value)
SCIP_Real SCIPlpGetColumnObjval(SCIP_LP *lp)
SCIP_RETCODE SCIPlpUpdateAddVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_RETCODE SCIPlpClear(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
SCIP_Bool SCIPlpIsPrimalReliable(SCIP_LP *lp)
static SCIP_RETCODE colEnsureSize(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
static void rowSortNonLP(SCIP_ROW *row)
void SCIPlpSetIsRelax(SCIP_LP *lp, SCIP_Bool relax)
static SCIP_RETCODE ensureChgcolsSize(SCIP_LP *lp, SCIP_SET *set, int num)
SCIP_RETCODE SCIProwDelCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col)
SCIP_RETCODE SCIPlpGetBase(SCIP_LP *lp, int *cstat, int *rstat)
SCIP_Bool SCIPlpIsRelax(SCIP_LP *lp)
static SCIP_RETCODE rowEventConstantChanged(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_Real oldval, SCIP_Real newval)
void SCIPcolInvalidateStrongbranchData(SCIP_COL *col, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
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, int scaling, SCIP_Bool keepsol, SCIP_Bool *lperror)
static int lpGetResolveItlim(SCIP_SET *set, SCIP_STAT *stat, int itlim)
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 forcedlpsolve, SCIP_Bool *lperror)
SCIP_RETCODE SCIPcolGetStrongbranch(SCIP_COL *col, SCIP_Bool integral, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp, int itlim, SCIP_Bool updatecol, SCIP_Bool updatestat, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *lperror)
static SCIP_RETCODE lpCheckRealpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Real value)
SCIP_RETCODE SCIPcolDelCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row)
static void rowMerge(SCIP_ROW *row, SCIP_SET *set)
static void colMoveCoef(SCIP_COL *col, int oldpos, int newpos)
static SCIP_Bool isIntegralScalar(SCIP_Real val, SCIP_Real scalar, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Real *intval)
SCIP_Real SCIPlpGetObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static void computeLPBounds(SCIP_LP *lp, SCIP_SET *set, SCIP_COL *col, SCIP_Real lpiinf, SCIP_Real *lb, SCIP_Real *ub)
SCIP_RETCODE SCIPlpCleanupAll(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Bool root)
void SCIProwRecalcLPActivity(SCIP_ROW *row, SCIP_STAT *stat)
static SCIP_Bool isNewValueUnreliable(SCIP_SET *set, SCIP_Real newvalue, SCIP_Real oldvalue)
static SCIP_RETCODE provedBound(SCIP_LP *lp, SCIP_SET *set, SCIP_Bool usefarkas, SCIP_Real *bound)
SCIP_Real SCIProwGetMinval(SCIP_ROW *row, SCIP_SET *set)
SCIP_RETCODE SCIPlpEndStrongbranch(SCIP_LP *lp)
SCIP_Longint SCIPcolGetStrongbranchLPAge(SCIP_COL *col, SCIP_STAT *stat)
static SCIP_RETCODE lpDelColset(SCIP_LP *lp, SCIP_SET *set, int *coldstat)
static SCIP_RETCODE lpRemoveObsoleteCols(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, int firstcol)
SCIP_Real SCIPlpGetRootObjval(SCIP_LP *lp)
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)
static SCIP_RETCODE ensureLazycolsSize(SCIP_LP *lp, SCIP_SET *set, int num)
SCIP_Bool SCIPlpIsFeasGE(SCIP_SET *set, SCIP_LP *lp, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE ignoreInstability(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_LPALGO lpalgo, SCIP_Bool *success)
SCIP_RETCODE SCIPlpGetProvedLowerbound(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *bound)
static void checkLazyColArray(SCIP_LP *lp, SCIP_SET *set)
SCIP_RETCODE SCIPcolChgObj(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newobj)
static void colUpdateAddLP(SCIP_COL *col, SCIP_SET *set)
SCIP_Real SCIProwGetLPSolCutoffDistance(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_LP *lp)
static SCIP_RETCODE lpSetRandomseed(SCIP_LP *lp, int randomseed, SCIP_Bool *success)
static SCIP_RETCODE rowRestoreSolVals(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_Longint validlp, SCIP_Bool freebuffer, SCIP_Bool infeasible)
static SCIP_RETCODE ensureChgrowsSize(SCIP_LP *lp, SCIP_SET *set, int num)
SCIP_Real SCIProwGetSolActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol)
static SCIP_RETCODE lpSetScaling(SCIP_LP *lp, int scaling, SCIP_Bool *success)
static SCIP_RETCODE colChgCoefPos(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, int pos, SCIP_Real val)
SCIP_RETCODE SCIPlpFree(SCIP_LP **lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
static SCIP_RETCODE lpSetIntpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, int value, SCIP_Bool *success)
void SCIPlpMarkDivingObjChanged(SCIP_LP *lp)
SCIP_COL ** SCIPlpGetNewcols(SCIP_LP *lp)
SCIP_RETCODE SCIPlpFreeNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
static SCIP_RETCODE lpBarrier(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool crossover, SCIP_Bool keepsol, SCIP_Bool *lperror)
SCIP_RETCODE SCIProwAddCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real val)
static void freeDiveChgSideArrays(SCIP_LP *lp)
SCIP_RETCODE SCIPlpGetBInvARow(SCIP_LP *lp, int r, SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
SCIP_LPI * SCIPlpGetLPI(SCIP_LP *lp)
SCIP_Bool SCIPlpIsFeasLT(SCIP_SET *set, SCIP_LP *lp, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE rowStoreSolVals(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_Bool infeasible)
SCIP_RETCODE SCIProwIncCoef(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_COL *col, SCIP_Real incval)
static SCIP_RETCODE lpUpdateVarColumnProved(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
#define debugRowPrint(x, y)
SCIP_RETCODE SCIPlpRemoveRedundantRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
SCIP_Bool SCIPlpDiving(SCIP_LP *lp)
static void rowUpdateDelLP(SCIP_ROW *row)
void SCIPlpUnmarkDivingObjChanged(SCIP_LP *lp)
SCIP_RETCODE SCIPlpGetBasisInd(SCIP_LP *lp, int *basisind)
SCIP_Real SCIProwGetNLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPlpSetNorms(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_LPINORMS *lpinorms)
SCIP_RETCODE SCIProwChgLocal(SCIP_ROW *row, SCIP_Bool local)
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)
#define DIVESTACKINITSIZE
SCIP_RETCODE SCIPlpGetDualDegeneracy(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real *degeneracy, SCIP_Real *varconsratio)
static SCIP_RETCODE lpSetBoolpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Bool value, SCIP_Bool *success)
static SCIP_RETCODE ensureColsSize(SCIP_LP *lp, SCIP_SET *set, int num)
static void rowCalcNorms(SCIP_ROW *row, SCIP_SET *set)
SCIP_Real SCIProwGetLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_RETCODE SCIPlpGetSol(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
static void markRowDeleted(SCIP_ROW *row)
void SCIProwRecalcNorms(SCIP_ROW *row, SCIP_SET *set)
static void rowAddNorms(SCIP_ROW *row, SCIP_SET *set, SCIP_COL *col, SCIP_Real val, SCIP_Bool updateidxvals)
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)
static const int nscalars
void SCIPcolGetStrongbranchLast(SCIP_COL *col, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Real *solval, SCIP_Real *lpobjval)
SCIP_RETCODE SCIPcolAddCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val)
static SCIP_RETCODE computeRelIntPoint(SCIP_LPI *lpi, 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)
SCIP_RETCODE SCIPcolIncCoef(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real incval)
SCIP_Real SCIPlpGetRootLooseObjval(SCIP_LP *lp)
SCIP_RETCODE SCIPlpGetDualfarkas(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool forcedlpsolve, SCIP_Bool *valid)
void SCIProwPrint(SCIP_ROW *row, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
SCIP_RETCODE SCIPlpSetCutoffbound(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real cutoffbound)
SCIP_RETCODE SCIPlpRecordOldRowSideDive(SCIP_LP *lp, SCIP_ROW *row, SCIP_SIDETYPE sidetype)
static SCIP_RETCODE lpCleanupCols(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, int firstcol)
SCIP_RETCODE SCIPlpMarkFlushed(SCIP_LP *lp, SCIP_SET *set)
static SCIP_RETCODE lpAlgorithm(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_LPALGO lpalgo, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool instable, SCIP_Bool *timelimit, SCIP_Bool *lperror)
SCIP_Real SCIPcolGetFeasibility(SCIP_COL *col, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
#define checkRowSqrnorm(row)
SCIP_RETCODE SCIPlpShrinkRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int newnrows)
SCIP_Bool SCIProwIsRedundant(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
void SCIPlpStartStrongbranchProbing(SCIP_LP *lp)
static SCIP_RETCODE lpFlushDelCols(SCIP_LP *lp)
static SCIP_RETCODE lpSetRowrepswitch(SCIP_LP *lp, SCIP_Real rowrepswitch, SCIP_Bool *success)
SCIP_RETCODE SCIPlpGetIterations(SCIP_LP *lp, int *iterations)
static void recomputeLooseObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static void colUpdateDelLP(SCIP_COL *col, SCIP_SET *set)
SCIP_RETCODE SCIProwChgConstant(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real constant)
SCIP_RETCODE SCIPlpStartProbing(SCIP_LP *lp)
SCIP_Real SCIPlpGetFeastol(SCIP_LP *lp)
static SCIP_RETCODE lpSetFeastol(SCIP_LP *lp, SCIP_Real feastol, SCIP_Bool *success)
SCIP_Bool SCIProwIsSolEfficacious(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_Bool root)
static SCIP_RETCODE lpUpdateVarColumn(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_RETCODE SCIPlpUpdateDelVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
void SCIPlpEndStrongbranchProbing(SCIP_LP *lp)
SCIP_RETCODE SCIPlpGetBInvACol(SCIP_LP *lp, int c, SCIP_Real *coef, int *inds, int *ninds)
SCIP_Bool SCIPlpIsFeasZero(SCIP_LP *lp, SCIP_Real val)
static SCIP_RETCODE lpSetThreads(SCIP_LP *lp, int threads, SCIP_Bool *success)
SCIP_RETCODE SCIPlpRemoveAllObsoletes(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
static SCIP_RETCODE lpFlushChgCols(SCIP_LP *lp, SCIP_SET *set)
static SCIP_RETCODE lpUpdateVarLooseProved(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_RETCODE SCIProwCatchEvent(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE colLink(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
SCIP_RETCODE SCIProwFree(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
static SCIP_Real getFiniteLooseObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_Real SCIPcolGetFarkasValue(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp)
static SCIP_RETCODE lpDualSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool instable, SCIP_Bool *lperror)
static const char * lpalgoName(SCIP_LPALGO lpalgo)
static void coefChanged(SCIP_ROW *row, SCIP_COL *col, SCIP_LP *lp)
static SCIP_RETCODE lpUpdateVarLoose(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
static void getObjvalDeltaUb(SCIP_SET *set, SCIP_Real obj, SCIP_Real oldub, SCIP_Real newub, SCIP_Real *deltaval, int *deltainf)
static SCIP_RETCODE lpRestoreSolVals(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_Longint validlp)
static SCIP_RETCODE rowSideChanged(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp, SCIP_SIDETYPE sidetype)
static void rowSortLP(SCIP_ROW *row)
static SCIP_Real colCalcInternalFarkasCoef(SCIP_COL *col)
SCIP_RETCODE colUnlink(SCIP_COL *col, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
SCIP_RETCODE SCIPlpCreate(SCIP_LP **lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, const char *name)
SCIP_Bool SCIPlpDivingRowsChanged(SCIP_LP *lp)
SCIP_RETCODE SCIPlpUpdateVarUbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub)
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, int scaling, SCIP_Bool keepsol, SCIP_Bool *lperror)
SCIP_RETCODE SCIPlpReset(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
static void recomputeSafeLooseObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE lpCheckBoolpar(SCIP_LP *lp, SCIP_LPPARAM lpparam, SCIP_Bool value)
SCIP_Real SCIPcolGetRedcost(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_RETCODE SCIPlpEndProbing(SCIP_LP *lp)
SCIP_RETCODE SCIProwDropEvent(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
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)
static SCIP_Real lpGetModifiedPseudoObjvalExact(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype)
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)
SCIP_Bool SCIPlpIsRootLPRelax(SCIP_LP *lp)
SCIP_Bool SCIPlpIsSolved(SCIP_LP *lp)
SCIP_RETCODE SCIPlpUpdateVarUb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub)
static SCIP_RETCODE lpSetConditionLimit(SCIP_LP *lp, SCIP_Real condlimit, SCIP_Bool *success)
SCIP_RETCODE SCIPlpUpdateVarObj(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
static void lpNumericalTroubleMessage(SCIP_MESSAGEHDLR *messagehdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_VERBLEVEL verblevel, const char *formatstr,...)
SCIP_Real SCIPcolGetFarkasCoef(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_RETCODE SCIPlpUpdateVarLoose(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_Real SCIPlpGetGlobalPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE reallocDiveChgSideArrays(SCIP_LP *lp, int minsize, SCIP_Real growfact)
SCIP_Bool SCIPlpIsDualReliable(SCIP_LP *lp)
SCIP_RETCODE SCIPlpAddRow(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_ROW *row, int depth)
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)
static void getObjvalDeltaLb(SCIP_SET *set, SCIP_Real obj, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real *deltaval, int *deltainf)
int SCIProwGetMinidx(SCIP_ROW *row, SCIP_SET *set)
static SCIP_Real colCalcInternalRedcost(SCIP_COL *col)
static void recomputeSafePseudoObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_RETCODE SCIPlpStartDive(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_Bool SCIPlpIsFeasNegative(SCIP_LP *lp, SCIP_Real val)
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)
SCIP_COL ** SCIPlpGetCols(SCIP_LP *lp)
int SCIPlpGetNCols(SCIP_LP *lp)
static SCIP_RETCODE lpSetBarrierconvtol(SCIP_LP *lp, SCIP_Real barrierconvtol, SCIP_Bool *success)
SCIP_RETCODE SCIProwChgRhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real rhs)
SCIP_Real SCIPlpGetRootColumnObjval(SCIP_LP *lp)
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)
SCIP_RETCODE SCIPlpGetUnboundedSol(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool *primalfeasible, SCIP_Bool *rayfeasible)
static SCIP_RETCODE lpSetDualfeastol(SCIP_LP *lp, SCIP_Real dualfeastol, SCIP_Bool *success)
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)
SCIP_Real SCIPlpGetCutoffbound(SCIP_LP *lp)
SCIP_Bool SCIPlpIsFeasEQ(SCIP_SET *set, SCIP_LP *lp, SCIP_Real val1, SCIP_Real val2)
static void markColDeleted(SCIP_COL *col)
SCIP_Real SCIProwGetPseudoActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
static void checkLazyBounds(SCIP_LP *lp, SCIP_SET *set)
static SCIP_RETCODE lpSetIterationLimit(SCIP_LP *lp, int itlim)
static SCIP_RETCODE ensureRowsSize(SCIP_LP *lp, SCIP_SET *set, int num)
static SCIP_Real getFinitePseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE allocDiveChgSideArrays(SCIP_LP *lp, int initsize)
SCIP_ROW ** SCIPlpGetRows(SCIP_LP *lp)
void SCIPlpSetRootLPIsRelax(SCIP_LP *lp, SCIP_Bool isrelax)
static SCIP_RETCODE ensureLpirowsSize(SCIP_LP *lp, SCIP_SET *set, int num)
SCIP_RETCODE SCIProwChgLhs(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real lhs)
void SCIProwForceSort(SCIP_ROW *row, SCIP_SET *set)
void SCIPcolMarkNotRemovableLocal(SCIP_COL *col, SCIP_STAT *stat)
static SCIP_RETCODE updateLazyBounds(SCIP_LP *lp, SCIP_SET *set)
SCIP_RETCODE rowLink(SCIP_ROW *row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
int SCIPlpGetNUnfixedCols(SCIP_LP *lp, SCIP_Real eps)
SCIP_Real SCIProwGetMinActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
#define checkRowObjprod(row)
static const SCIP_Real scalars[]
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)
SCIP_Bool SCIPlpIsFeasLE(SCIP_SET *set, SCIP_LP *lp, SCIP_Real val1, SCIP_Real val2)
int SCIPlpGetNNewrows(SCIP_LP *lp)
void SCIPlpResetFeastol(SCIP_LP *lp, SCIP_SET *set)
SCIP_RETCODE SCIPlpGetPrimalRay(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *ray)
int SCIProwGetNumImpliedIntCols(SCIP_ROW *row, SCIP_SET *set)
void SCIProwDelaySort(SCIP_ROW *row)
static SCIP_RETCODE lpSetSolutionPolishing(SCIP_LP *lp, SCIP_Bool polishing, SCIP_Bool *success)
void SCIPlpInvalidateRootObjval(SCIP_LP *lp)
int SCIPlpGetNRows(SCIP_LP *lp)
static SCIP_RETCODE lpFlushChgRows(SCIP_LP *lp, SCIP_SET *set)
static SCIP_RETCODE lpPrimalSimplex(SCIP_LP *lp, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool resolve, SCIP_Bool keepsol, SCIP_Bool instable, SCIP_Bool *lperror)
SCIP_Real SCIProwGetObjParallelism(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp)
static void recomputeGlbPseudoObjectiveValue(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_RETCODE SCIPlpSumRows(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real *weights, SCIP_REALARRAY *sumcoef, SCIP_Real *sumlhs, SCIP_Real *sumrhs)
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)
static SCIP_RETCODE lpCleanupRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int firstrow)
SCIP_Real SCIPlpGetPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE lpDelRowset(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int *rowdstat)
void SCIPlpSetSizeMark(SCIP_LP *lp, int nrows, int ncols)
static int SCIProwGetDiscreteScalarProduct(SCIP_ROW *row1, SCIP_ROW *row2)
SCIP_RETCODE SCIPlpUpdateVarColumn(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_RETCODE SCIProwRelease(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
static SCIP_RETCODE lpFlushAddCols(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
void SCIPcolPrint(SCIP_COL *col, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
internal methods for LP management
SCIP_RETCODE SCIProwExactRelease(SCIP_ROWEXACT **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LPEXACT *lpexact)
SCIP_Bool SCIPlpExactDiving(SCIP_LPEXACT *lpexact)
SCIP_RETCODE SCIPlpExactSetCutoffbound(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_Real cutoffbound)
void SCIPlpExactForceSafeBound(SCIP_LPEXACT *lpexact, SCIP_SET *set)
SCIP_RETCODE SCIPlpExactComputeSafeBound(SCIP_LP *lp, SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_Bool *lperror, SCIP_Bool usefarkas, SCIP_Real *safebound, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
safe exact rational bounding methods
interface methods for specific LP solvers
interface methods for specific exact LP solvers
#define BMSduplicateBlockMemoryArray(mem, ptr, source, num)
#define BMSfreeMemory(ptr)
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
#define BMSfreeMemoryNull(ptr)
#define BMSallocMemoryArray(ptr, num)
#define BMSallocBlockMemoryArray(mem, ptr, num)
#define BMSfreeBlockMemoryNull(mem, ptr)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
void SCIPmessageVFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr, va_list ap)
void SCIPmessagePrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...)
SCIP_RETCODE SCIPrealarrayExtend(SCIP_REALARRAY *realarray, int arraygrowinit, SCIP_Real arraygrowfac, int minidx, int maxidx)
SCIP_RETCODE SCIPrealarrayIncVal(SCIP_REALARRAY *realarray, int arraygrowinit, SCIP_Real arraygrowfac, int idx, SCIP_Real incval)
SCIP_RETCODE SCIPrealarrayClear(SCIP_REALARRAY *realarray)
internal miscellaneous methods
SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp)
internal methods for storing and manipulating the main problem
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 problem variables
SCIP_Bool SCIPsetIsDualfeasZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsEfficacious(SCIP_SET *set, SCIP_Bool root, SCIP_Real efficacy)
SCIP_Bool SCIPsetIsFeasPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPsetGetCharParam(SCIP_SET *set, const char *name, char *value)
SCIP_Real SCIPsetSumFloor(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasNegative(SCIP_SET *set, SCIP_Real val)
SCIP_Real SCIPsetFeastol(SCIP_SET *set)
SCIP_Bool SCIPsetIsDualfeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetRelaxfeastol(SCIP_SET *set)
SCIP_Bool SCIPsetIsSumLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsDualfeasNegative(SCIP_SET *set, SCIP_Real val)
SCIP_Real SCIPsetDualfeastol(SCIP_SET *set)
SCIP_Bool SCIPsetIsSumGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPsetSetCharParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, char value)
SCIP_Real SCIPsetLPFeastolFactor(SCIP_SET *set)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_Real SCIPsetSumepsilon(SCIP_SET *set)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsSumZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsRelGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsDualfeasPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsDualfeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsSumEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsIntegral(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsUpdateUnreliable(SCIP_SET *set, SCIP_Real newvalue, SCIP_Real oldvalue)
SCIP_Real SCIPsetSumCeil(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetBarrierconvtol(SCIP_SET *set)
SCIP_Real SCIPsetRound(SCIP_SET *set, SCIP_Real val)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_Bool SCIPsetIsFeasIntegral(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsNegative(SCIP_SET *set, SCIP_Real val)
unsigned int SCIPsetInitializeRandomSeed(SCIP_SET *set, unsigned int initialseedvalue)
internal methods for global SCIP settings
#define SCIPsetFreeBufferArray(set, ptr)
#define SCIPsetDebugMsgPrint
#define SCIPsetAllocBufferArray(set, ptr, num)
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
internal methods for storing primal CIP solutions
SCIP_Bool SCIPsolveIsStopped(SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool checknodelimits)
internal methods for main solving loop and node processing
internal methods for problem statistics
#define SCIPstatAdd(stat, set, field, val)
#define SCIPstatIncrement(stat, set, field)
#define SCIPstatUpdate(stat, set, field, val)
SCIP_COLSOLVALS * storedsolvals
unsigned int impliedintegral
SCIP_Longint obsoletenode
unsigned int lprowssorted
SCIP_Longint validredcostlp
unsigned int nonlprowssorted
SCIP_Longint validfarkaslp
SCIP_Bool wasforcedsafebound
SCIP_Bool hasprovedboundexact
SCIP_Bool glbpseudoobjvalid
SCIP_Real lpirowrepswitch
SCIP_Longint validsoldirlp
SCIP_Real relglbpseudoobjval
SCIP_SIDETYPE * divechgsidetypes
SCIP_Bool strongbranching
SCIP_Bool updateintegrality
SCIP_Bool objsqrnormunreliable
SCIP_Real lpiconditionlimit
SCIP_Bool strongbranchprobing
SCIP_Real rootlooseobjval
SCIP_Bool divelpwasdualfeas
SCIP_Bool lpisolutionpolishing
SCIP_Bool divelpwasprimchecked
SCIP_LPSOLVALS * storedsolvals
SCIP_LPISTATE * divelpistate
SCIP_SOL * validsoldirsol
SCIP_Real relpseudoobjval
SCIP_Real lpibarrierconvtol
SCIP_Longint validdegeneracylp
SCIP_Longint divenolddomchgs
SCIP_Bool divinglazyapplied
SCIP_Bool divelpwasdualchecked
SCIP_Longint validfarkaslp
SCIP_Real glbpseudoobjval
SCIP_Bool lpihaspolishing
SCIP_Bool flushdeletedrows
SCIP_Bool divelpwasprimfeas
SCIP_Bool flushdeletedcols
SCIP_Longint nlpsaftercreation
SCIP_Longint activeinlpcounter
unsigned int lpcolssorted
unsigned int inglobalcutpool
SCIP_Longint obsoletenode
unsigned int nonlpcolssorted
unsigned int validminmaxidx
SCIP_Longint validpsactivitydomchg
SCIP_Longint validactivitybdsdomchg
SCIP_ROWSOLVALS * storedsolvals
SCIP_EVENTFILTER * eventfilter
SCIP_Longint validactivitylp
SCIP_Longint ndualresolvelpiterations
SCIP_Longint nprimalresolvelpiterations
SCIP_Real boundingerrorps
SCIP_CLOCK * strongbranchtime
SCIP_CLOCK * barrierlptime
SCIP_Longint nduallpiterations
SCIP_Longint ndualresolvelps
SCIP_CLOCK * divinglptime
SCIP_Longint nlpiterations
SCIP_Longint nprimalresolvelps
SCIP_Longint nrootlpiterations
SCIP_Longint nnumtroublelpmsgs
SCIP_CLOCK * resolveinstablelptime
SCIP_Real boundingerrorbs
SCIP_Real boundingerrorexlp
SCIP_CLOCK * primallptime
SCIP_Longint nprimallpiterations
SCIP_CLOCK * lexduallptime
datastructures for managing events
data structures for LP management
data structures for exact LP management
datastructures for storing and manipulating the main problem
SCIP main data structure.
datastructures for global SCIP settings
datastructures for problem statistics
datastructures for problem variables
enum SCIP_ClockType SCIP_CLOCKTYPE
struct SCIP_Cons SCIP_CONS
struct SCIP_Conshdlr SCIP_CONSHDLR
struct SCIP_Eventhdlr SCIP_EVENTHDLR
#define SCIP_EVENTTYPE_ROWSIDECHANGED
#define SCIP_EVENTTYPE_ROWADDEDLP
struct SCIP_EventData SCIP_EVENTDATA
struct SCIP_EventFilter SCIP_EVENTFILTER
#define SCIP_EVENTTYPE_ROWCHANGED
struct SCIP_EventQueue SCIP_EVENTQUEUE
#define SCIP_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_ROWDELETEDLP
#define SCIP_EVENTTYPE_ROWCOEFCHANGED
struct SCIP_Event SCIP_EVENT
#define SCIP_EVENTTYPE_ROWCONSTCHANGED
enum SCIP_RowOriginType SCIP_ROWORIGINTYPE
@ SCIP_LPALGO_PRIMALSIMPLEX
@ SCIP_LPALGO_BARRIERCROSSOVER
@ SCIP_LPALGO_DUALSIMPLEX
enum SCIP_LPSolStat SCIP_LPSOLSTAT
@ SCIP_ROWORIGINTYPE_CONSHDLR
@ SCIP_ROWORIGINTYPE_SEPA
@ SCIP_ROWORIGINTYPE_CONS
struct SCIP_LpSolVals SCIP_LPSOLVALS
struct SCIP_ColSolVals SCIP_COLSOLVALS
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_RowSolVals SCIP_ROWSOLVALS
@ SCIP_LPSOLSTAT_NOTSOLVED
@ SCIP_LPSOLSTAT_TIMELIMIT
@ SCIP_LPSOLSTAT_UNBOUNDEDRAY
@ SCIP_LPSOLSTAT_INFEASIBLE
@ SCIP_LPSOLSTAT_OBJLIMIT
@ SCIP_LPSOLSTAT_ITERLIMIT
enum SCIP_LPAlgo SCIP_LPALGO
enum SCIP_SideType SCIP_SIDETYPE
struct SCIP_RowExact SCIP_ROWEXACT
@ SCIP_PRICING_STEEPQSTART
@ SCIP_PRICING_LPIDEFAULT
enum SCIP_Pricing SCIP_PRICING
enum SCIP_LPParam SCIP_LPPARAM
struct SCIP_LPiState SCIP_LPISTATE
struct SCIP_LPiNorms SCIP_LPINORMS
@ SCIP_LPPAR_BARRIERCONVTOL
@ SCIP_LPPAR_CONDITIONLIMIT
@ SCIP_LPPAR_ROWREPSWITCH
enum SCIP_BaseStat SCIP_BASESTAT
enum SCIP_VerbLevel SCIP_VERBLEVEL
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
struct SCIP_RealArray SCIP_REALARRAY
#define SCIP_DECL_SORTPTRCOMP(x)
struct SCIP_Prob SCIP_PROB
enum SCIP_Objsense SCIP_OBJSENSE
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_Sepa SCIP_SEPA
struct SCIP_Stat SCIP_STAT
SCIP_Real SCIPvarGetRelaxSol(SCIP_VAR *var, SCIP_SET *set)
internal methods for problem variables