108 for(
i = 0;
i < row->
len; ++
i )
127#define debugRowPrint(x,y)
151 for(
r = 0;
r < col->
len; ++
r )
160#define debugColPrint(x,y)
185 assert(num <= lp->chgcolssize);
208 assert(num <= lp->chgrowssize);
231 assert(num <= lp->lpicolssize);
254 assert(num <= lp->lpirowssize);
277 assert(num <= lp->colssize);
297 assert(num <= lp->soldirectionsize);
320 assert(num <= lp->lazycolssize);
343 assert(num <= lp->rowssize);
360 if( num > col->
size )
424 if( storedsolvals !=
NULL )
512 if( storedsolvals !=
NULL )
597 if( storedsolvals !=
NULL )
640 if( num > row->
size )
657#ifdef SCIP_MORE_DEBUG
667 if( !msgdisp_checkrow )
669 printf(
"LP ROW CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
670 msgdisp_checkrow =
TRUE;
699#ifdef SCIP_MORE_DEBUG
714 for(
c = row->
len - 1;
c >= 0; --
c )
716 if( cols[
c]->lppos >= 0 )
737 for(
c = row->
len - 1;
c >= 0; --
c )
739 if( cols[
c]->lppos >= 0 )
760 for(
c = row->
len - 1;
c >= 0; --
c )
762 if( cols[
c]->lppos >= 0 )
769#define checkRowSqrnorm(row)
770#define checkRowSumnorm(row)
771#define checkRowObjprod(row)
801 for( v = 0; v <
nvars; ++v )
842 for( v = 0; v <
nvars; ++v )
884 for( v = 0; v <
nvars; ++v )
1117 searchidx = row->
index;
1118 while(minpos <= maxpos)
1120 pos = (minpos + maxpos)/2;
1121 assert(0 <= pos && pos < col->len);
1125 if( searchidx == idx )
1127 else if( searchidx < idx )
1151 if( row->
lppos >= 0 )
1192 searchidx = col->
index;
1193 while(minpos <= maxpos)
1195 pos = (minpos + maxpos)/2;
1196 assert(0 <= pos && pos < row->len);
1201 if( searchidx == idx )
1203 else if( searchidx < idx )
1232 if( col->
lppos >= 0 )
1253 assert(-1 <= pos && pos < row->len);
1259 for(
i = 0;
i < row->
len; ++
i )
1276 assert(0 <= oldpos && oldpos < col->len);
1277 assert(0 <= newpos && newpos < col->len);
1280 if( oldpos == newpos )
1283 col->
rows[newpos] = col->
rows[oldpos];
1284 col->
vals[newpos] = col->
vals[oldpos];
1288 if( col->
linkpos[newpos] >= 0 )
1316 assert(0 <= pos1 && pos1 < col->len);
1317 assert(0 <= pos2 && pos2 < col->len);
1324 tmprow = col->
rows[pos2];
1325 tmpval = col->
vals[pos2];
1326 tmplinkpos = col->
linkpos[pos2];
1332 col->
rows[pos1] = tmprow;
1333 col->
vals[pos1] = tmpval;
1334 col->
linkpos[pos1] = tmplinkpos;
1372 assert(0 <= oldpos && oldpos < row->len);
1373 assert(0 <= newpos && newpos < row->len);
1376 if( oldpos == newpos )
1379 row->
cols[newpos] = row->
cols[oldpos];
1381 row->
vals[newpos] = row->
vals[oldpos];
1385 if( row->
linkpos[newpos] >= 0 )
1414 assert(0 <= pos1 && pos1 < row->len);
1415 assert(0 <= pos2 && pos2 < row->len);
1423 tmpcol = row->
cols[pos2];
1425 tmpval = row->
vals[pos2];
1426 tmplinkpos = row->
linkpos[pos2];
1433 row->
cols[pos1] = tmpcol;
1435 row->
vals[pos1] = tmpval;
1436 row->
linkpos[pos1] = tmplinkpos;
1552#ifdef SCIP_MORE_DEBUG
1555#define ASSERT(x) do { if( !(x) ) abort(); } while( FALSE )
1557#define ASSERT(x) assert(x)
1575 if( !msgdisp_checklinks )
1577 printf(
"LP LINK CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
1578 msgdisp_checklinks =
TRUE;
1584 ASSERT(col !=
NULL);
1590 for( j = 0; j < col->
len; ++j )
1593 ASSERT(row !=
NULL);
1604 ASSERT(row !=
NULL);
1610 for( j = 0; j < row->
len; ++j )
1613 ASSERT(col !=
NULL);
1617 ASSERT((j < row->nlpcols) == (row->
linkpos[j] >= 0 && col->
lppos >= 0));
1625#define checkLinks(lp)
1731 if( row->
lppos >= 0 && linkpos >= 0 )
1746 col->
rows[pos] = row;
1747 col->
vals[pos] = val;
1756 if( col->
lppos >= 0 )
1762 if( row->
lppos >= 0 )
1766 assert(0 <= linkpos && linkpos < row->len);
1783 if( col->
lppos >= 0 )
1789 if( linkpos == row->
nlpcols-1 )
1795 if( row->
lppos >= 0 && linkpos >= 0 )
1812 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to column <%s> (nunlinked=%d)\n",
1832 assert(0 <= pos && pos < col->len);
1837 row = col->
rows[pos];
1875 assert(0 <= pos && pos < col->len);
1893 col->
vals[pos] = val;
1929 if( col->
lppos >= 0 )
2014 if( forcenormupdate || col->
lppos >= 0 )
2082 if( col->
lppos >= 0 && linkpos >= 0 )
2097 row->
cols[pos] = col;
2099 row->
vals[pos] = val;
2109 if( row->
lppos >= 0 )
2115 if( col->
lppos >= 0 )
2119 assert(0 <= linkpos && linkpos < col->len);
2136 if( row->
lppos >= 0 )
2142 if( linkpos == col->
nlprows-1 )
2148 if( col->
lppos >= 0 && linkpos >= 0 )
2174 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to row <%s> (nunlinked=%d)\n",
2199 assert(0 <= pos && pos < row->len);
2203 col = row->
cols[pos];
2204 val = row->
vals[pos];
2212 SCIPerrorMessage(
"cannot delete a coefficient from the locked unmodifiable row <%s>\n", row->
name);
2220 if( pos < row->nlpcols )
2258 assert(0 <= pos && pos < row->len);
2265 SCIPerrorMessage(
"cannot change a coefficient of the locked unmodifiable row <%s>\n", row->
name);
2271 col = row->
cols[pos];
2283 oldval = row->
vals[pos];
2287 row->
vals[pos] = val;
2415 for(
i = 0;
i < col->
len; ++
i )
2491 for(
i = 0;
i < row->
len; ++
i )
2549 return lpSetIntpar(lp, lpparam, (
int)value, success);
2600 assert(lpivalue == value);
2636 assert(lpivalue == value);
2641#define lpCheckIntpar(lp, lpparam, value) SCIP_OKAY
2642#define lpCheckBoolpar(lp, lpparam, value) SCIP_OKAY
2643#define lpCheckRealpar(lp, lpparam, value) SCIP_OKAY
2647#define lpCutoffDisabled(set, prob, lp) (set->lp_disablecutoff == 1 || (set->lp_disablecutoff == 2 && !SCIPprobAllColsInLP(prob, set, lp)) || set->misc_exactsolve)
2724 if( lp->
nrows > 0 && actualfeastol < lp->lpifeastol )
2753 assert(dualfeastol >= 0.0);
2767 if( lp->
nrows > 0 && actualdualfeastol < lp->lpidualfeastol )
2796 assert(barrierconvtol >= 0.0);
2810 if( lp->
nrows > 0 && actualbarrierconvtol < lp->lpibarrierconvtol
2866 assert(0 <= fastmip && fastmip <= 1);
3055 switch( pricingchar )
3181 lptiming = (int) timing;
3208 if( randomseed == 0 )
3307 for(
i = 0;
i < len; ++
i )
3311 (*col)->linkpos[
i] = -1;
3316 (*col)->rows =
NULL;
3317 (*col)->vals =
NULL;
3318 (*col)->linkpos =
NULL;
3326 (*col)->flushedobj = 0.0;
3327 (*col)->flushedlb = 0.0;
3328 (*col)->flushedub = 0.0;
3329 (*col)->index = stat->
ncolidx;
3333 (*col)->nlprows = 0;
3334 (*col)->nunlinked = len;
3336 (*col)->lpipos = -1;
3337 (*col)->lpdepth = -1;
3338 (*col)->primsol = 0.0;
3341 (*col)->minprimsol = (*col)->ub;
3342 (*col)->maxprimsol = (*col)->lb;
3347 (*col)->sbnode = -1;
3348 (*col)->validredcostlp = -1;
3349 (*col)->validfarkaslp = -1;
3350 (*col)->validsblp = -1;
3351 (*col)->sbitlim = -1;
3352 (*col)->nsbcalls = 0;
3354 (*col)->obsoletenode = -1;
3357 (*col)->lprowssorted =
TRUE;
3358 (*col)->nonlprowssorted = (len <= 1);
3359 (*col)->objchanged =
FALSE;
3360 (*col)->lbchanged =
FALSE;
3361 (*col)->ubchanged =
FALSE;
3362 (*col)->coefchanged =
FALSE;
3364 (*col)->removable = removable;
3365 (*col)->sbdownvalid =
FALSE;
3366 (*col)->sbupvalid =
FALSE;
3369 (*col)->storedsolvals =
NULL;
3388 assert(&(*col)->var->data.col == col);
3389 assert((*col)->lppos == -1);
3390 assert((*col)->lpipos == -1);
3422 for(
r = 0;
r < col->
len; ++
r )
3490 assert(0 <= pos && pos < col->len);
3540 assert(0 <= pos && pos < col->len);
3594 assert(0 <= pos && pos < col->len);
3865 redcost -= col->
vals[
i] * dualsol[row->
lppos];
3875 if( row->
lppos >= 0 )
3876 redcost -= col->
vals[
i] * dualsol[row->
lppos];
3928 if( row->
lppos >= 0 )
4048 farkas += col->
vals[
i] * dualfarkas[row->
lppos];
4058 if( row->
lppos >= 0 )
4059 farkas += col->
vals[
i] * dualfarkas[row->
lppos];
4111 if( row->
lppos >= 0 )
4171 if( farkascoef > 0.0 )
4172 return col->
ub * farkascoef;
4174 return col->
lb * farkascoef;
4357 validsblp = stat->
nlps;
4368 sbdownvalid =
FALSE;
4376 SCIPsetDebugMsg(
set,
"performing strong branching on variable <%s>(%g) with %d iterations\n",
4405 sbdownvalid =
FALSE;
4434 if( iter/2 >= itlim )
4457 if( downvalid !=
NULL )
4458 *downvalid = sbdownvalid;
4459 if( upvalid !=
NULL )
4460 *upvalid = sbupvalid;
4543 for( j = 0; j < ncols; ++j )
4574 if( downvalid !=
NULL )
4576 if( upvalid !=
NULL )
4584 lpipos[nsubcols] = col->
lpipos;
4585 primsols[nsubcols] = col->
primsol;
4587 subidx[nsubcols] = j;
4588 subcols[nsubcols++] = col;
4592 SCIPsetDebugMsg(
set,
"performing strong branching on %d variables with %d iterations\n", ncols, itlim);
4605 for( j = 0; j < nsubcols; ++j )
4623 up[idx] = col->
sbup;
4624 if( downvalid !=
NULL )
4626 if( upvalid !=
NULL )
4639 for( j = 0; j < nsubcols; ++j )
4656 up[idx] = col->
sbup;
4657 if( downvalid !=
NULL )
4659 if( upvalid !=
NULL )
4672 if( iter/2 >= itlim )
4721 if( downvalid !=
NULL )
4723 if( upvalid !=
NULL )
4725 if( solval !=
NULL )
4727 if( lpobjval !=
NULL )
4848 for(
i = 0;
i < row->
len; ++
i )
4911 sval = val * scalar;
4912 downval = floor(sval);
4917 if( intval !=
NULL )
4923 if( intval !=
NULL )
4969 assert(-1.0 < minrounddelta && minrounddelta <= 0.0);
4970 assert(0.0 <= maxrounddelta && maxrounddelta < 1.0);
4972 SCIPsetDebugMsg(
set,
"scale row <%s> with %g (tolerance=[%g,%g])\n", row->
name, scaleval, minrounddelta, maxrounddelta);
4976 mindeltainf =
FALSE;
4977 maxdeltainf =
FALSE;
5006 newval = val * scaleval;
5008 &&
isIntegralScalar(val, scaleval, minrounddelta, maxrounddelta, &intval) )
5012 if( intval < newval )
5014 mindelta += (intval - newval)*ub;
5015 maxdelta += (intval - newval)*lb;
5021 mindelta += (intval - newval)*lb;
5022 maxdelta += (intval - newval)*ub;
5044 if( oldlen != row->
len )
5067 newval = (row->
lhs - row->
constant) * scaleval + mindelta;
5079 newval = (row->
rhs - row->
constant) * scaleval + maxdelta;
5137 (*row)->integral =
TRUE;
5148 for(
i = 0;
i < len; ++
i )
5154 (*row)->cols_index[
i] = cols[
i]->
index;
5155 (*row)->linkpos[
i] = -1;
5163 (*row)->integral =
FALSE;
5169 (*row)->cols =
NULL;
5170 (*row)->cols_index =
NULL;
5171 (*row)->vals =
NULL;
5172 (*row)->linkpos =
NULL;
5176 (*row)->constant = 0.0;
5181 (*row)->sqrnorm = 0.0;
5182 (*row)->sumnorm = 0.0;
5183 (*row)->objprod = 0.0;
5184 (*row)->maxval = 0.0;
5186 (*row)->dualsol = 0.0;
5188 (*row)->dualfarkas = 0.0;
5192 (*row)->origin = origin;
5193 (*row)->eventfilter =
NULL;
5194 (*row)->index = stat->
nrowidx;
5198 (*row)->nlpcols = 0;
5199 (*row)->nunlinked = len;
5202 (*row)->lpipos = -1;
5203 (*row)->lpdepth = -1;
5204 (*row)->minidx = INT_MAX;
5205 (*row)->maxidx = INT_MIN;
5206 (*row)->nummaxval = 0;
5207 (*row)->numminval = 0;
5208 (*row)->numintcols = -1;
5209 (*row)->validactivitylp = -1;
5210 (*row)->validpsactivitydomchg = -1;
5211 (*row)->validactivitybdsdomchg = -1;
5212 (*row)->nlpsaftercreation = 0L;
5213 (*row)->activeinlpcounter = 0L;
5216 (*row)->obsoletenode = -1;
5217 (*row)->fromcutpool =
FALSE;
5219 (*row)->lpcolssorted =
TRUE;
5220 (*row)->nonlpcolssorted = (len <= 1);
5221 (*row)->delaysort =
FALSE;
5222 (*row)->validminmaxidx =
FALSE;
5223 (*row)->lhschanged =
FALSE;
5224 (*row)->rhschanged =
FALSE;
5225 (*row)->coefchanged =
FALSE;
5226 (*row)->local = local;
5227 (*row)->modifiable = modifiable;
5229 (*row)->origintype = origintype;
5230 (*row)->removable = removable;
5231 (*row)->inglobalcutpool =
FALSE;
5232 (*row)->storedsolvals =
NULL;
5265 assert((*row)->nuses == 0);
5266 assert((*row)->lppos == -1);
5317 for(
i = 0;
i < row->
len; ++
i )
5358 assert((*row)->nuses >= 1);
5359 assert((*row)->nlocks < (
unsigned int)((*row)->nuses));
5361 SCIPsetDebugMsg(
set,
"release row <%s> with nuses=%d and nlocks=%u\n", (*row)->name, (*row)->nuses, (*row)->nlocks);
5363 if( (*row)->nuses == 0 )
5451 assert(0 <= pos && pos < row->len);
5502 assert(0 <= pos && pos < row->len);
5556 assert(0 <= pos && pos < row->len);
5786 if( intscalar !=
NULL )
5792 for(
c = 0;
c < row->
len; ++
c )
5804 if( val < mindelta || val > maxdelta )
5807 minval =
MIN(minval, absval);
5813 if( intscalar !=
NULL )
5820 assert(minval >
MIN(-mindelta, maxdelta));
5827 scaleval = 1.0/minval;
5828 scalable = (scaleval <= maxscale);
5829 for(
c = 0;
c < row->
len && scalable; ++
c )
5838 while( scaleval <= maxscale
5852 scalable = (scaleval <= maxscale);
5853 SCIPsetDebugMsg(
set,
" -> val=%g, scaleval=%g, val*scaleval=%g, scalable=%u\n", val, scaleval, val*scaleval, scalable);
5860 assert(scaleval <= maxscale);
5861 if( intscalar !=
NULL )
5862 *intscalar = scaleval;
5864 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (minval=%g)\n", scaleval, minval);
5871 twomult = (twomultval <= maxscale);
5872 for(
c = 0;
c < row->
len && twomult; ++
c )
5881 while( twomultval <= maxscale
5882 && (absval * twomultval < 0.5 || !
isIntegralScalar(val, twomultval, mindelta, maxdelta,
NULL)) )
5895 twomult = (twomultval <= maxscale);
5897 val, twomultval, val*twomultval, twomult);
5902 assert(twomultval <= maxscale);
5903 if( intscalar !=
NULL )
5904 *intscalar = twomultval;
5906 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (power of 2)\n", twomultval);
5916 rational = (maxdnom > 1);
5919 for(
c = 0;
c < row->
len && rational; ++
c )
5924 rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
5925 if( rational && numerator != 0 )
5928 gcd =
ABS(numerator);
5932 val, numerator, denominator, gcd, scm, rational);
5939 for( ++
c;
c < row->
len && rational; ++
c )
5944 rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
5945 if( rational && numerator != 0 )
5952 val, numerator, denominator, gcd, scm, rational);
5961 if( intscalar !=
NULL )
5998 &intscalar, success) );
6003 SCIP_CALL(
rowScale(row, blkmem,
set, eventqueue, stat, lp, intscalar, usecontvars, mindelta, maxdelta) );
6024#ifdef SCIP_MORE_DEBUG
6084 for( s = 1; s < row->
len; ++s )
6089 if( cols[s] == cols[t] )
6106 cols_index[t] = cols_index[s];
6132 for(
i = 0;
i < row->
len; ++
i )
6136 for( j =
i+1; j < row->
len; ++j )
6198 if( col->
lppos >= 0 )
6243 activity =
MAX(activity, -inf);
6244 activity =
MIN(activity, +inf);
6263 return MIN(row->
rhs - activity, activity - row->
lhs);
6302 if ( col->
lppos >= 0 )
6322 activity =
MAX(activity, -inf);
6323 activity =
MIN(activity, +inf);
6325 return MIN(row->
rhs - activity, activity - row->
lhs);
6364 if ( col->
lppos >= 0 )
6384 activity =
MAX(activity, -inf);
6385 activity =
MIN(activity, +inf);
6387 return MIN(row->
rhs - activity, activity - row->
lhs);
6403 for(
i = 0;
i < row->
len; ++
i )
6439 activity =
MAX(activity, -inf);
6440 activity =
MIN(activity, +inf);
6458 return MIN(row->
rhs - pseudoactivity, pseudoactivity - row->
lhs);
6478 for(
i = 0;
i < row->
len; ++
i )
6487 solval = (row->
vals[
i] >= 0.0 ? col->
lb : col->
ub);
6489 solval = (row->
vals[
i] >= 0.0 ? col->
ub : col->
lb);
6491 solval = (col->
lb + col->
ub)/2.0;
6493 activity += row->
vals[
i] * solval;
6497 activity =
MAX(activity, -inf);
6498 activity =
MIN(activity, +inf);
6517 return MIN(row->
rhs - activity, activity - row->
lhs);
6539 mininfinite =
FALSE;
6540 maxinfinite =
FALSE;
6543 for(
i = 0;
i < row->
len && (!mininfinite || !maxinfinite); ++
i )
6769 for( k = 0; k < lp->
ncols; ++k )
6778 scale = 1.0 / sqrt(scale);
6780 for( k = 0; k < lp->
ncols; ++k )
6785 solcutoffdist = 0.0;
6786 for( k = 0; k < row->
nlpcols; ++k )
6789 for( k = row->
nlpcols; k < row->len; ++k )
6796 solcutoffdist =
set->num_sumepsilon;
6800 return solcutoffdist;
6817 switch(
set->sepa_efficacynorm )
6829 norm = (row->
len == 0 ? 0.0 : 1.0);
6841 return -feasibility / norm;
6874 switch(
set->sepa_efficacynorm )
6886 norm = (row->
len == 0 ? 0.0 : 1.0);
6898 return -feasibility / norm;
6932 switch(
set->sepa_efficacynorm )
6944 norm = (row->
len == 0 ? 0.0 : 1.0);
6956 return -feasibility / norm;
6972 switch(
set->sepa_efficacynorm )
6984 norm = (row->
len == 0 ? 0.0 : 1.0);
6996 return -feasibility / norm;
7070 while( i1 < row1->nlpcols && i2 < row2->len )
7085 while( i1 < row1->len && i2 < row2->nlpcols )
7117 while( i1 >= 0 && i2 >= 0 )
7121 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7122 if( row1colsidx[i1] < row2colsidx[i2] )
7124 else if( row1colsidx[i1] > row2colsidx[i2] )
7128 scalarprod += row1->
vals[i1] * row2->
vals[i2];
7156 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7162 assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7163 assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7164 assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7165 assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7168 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7170 scalarprod += row1->
vals[ilp1] * row2->
vals[ilp2];
7175 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7177 scalarprod += row1->
vals[ilp1] * row2->
vals[inlp2];
7182 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7184 scalarprod += row1->
vals[inlp1] * row2->
vals[ilp2];
7189 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos >= 0 )
7191 scalarprod += row1->
vals[inlp1] * row2->
vals[inlp2];
7196 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7198 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7200 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7207 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7215 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7217 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7224 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7236 if( ilp1 != row1->
nlpcols && inlp1 != row1->
len )
7274 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7279 assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7280 assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7283 if( row1colsidx[i1] == row2colsidx[ilp2] )
7285 scalarprod += row1->
vals[i1] * row2->
vals[ilp2];
7290 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7292 scalarprod += row1->
vals[i1] * row2->
vals[inlp2];
7297 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7299 if( row1colsidx[i1] < row2colsidx[ilp2] )
7306 if( row1colsidx[i1] < row2colsidx[inlp2] )
7334 while( i1 < end1 && i2 < end2 )
7338 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7341 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7343 scalarprod += row1->
vals[i1] * row2->
vals[i2];
7348 else if( row1colsidx[i1] < row2colsidx[i2] )
7427 while( i1 < row1->nlpcols && i2 < row2->len )
7442 while( i1 < row1->len && i2 < row2->nlpcols )
7474 while( i1 >= 0 && i2 >= 0 )
7478 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7479 if( row1colsidx[i1] < row2colsidx[i2] )
7481 else if( row1colsidx[i1] > row2colsidx[i2] )
7513 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7519 assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7520 assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7521 assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7522 assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7525 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7532 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7539 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7546 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos >= 0 )
7553 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7555 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7557 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7564 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7572 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7574 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7581 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7593 if( ilp1 != row1->
nlpcols && inlp1 != row1->
len )
7631 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7636 assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7637 assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7640 if( row1colsidx[i1] == row2colsidx[ilp2] )
7647 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7654 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7656 if( row1colsidx[i1] < row2colsidx[ilp2] )
7663 if( row1colsidx[i1] < row2colsidx[inlp2] )
7691 while( i1 < end1 && i2 < end2 )
7695 assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7698 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos >= 0) )
7705 else if( row1colsidx[i1] < row2colsidx[i2] )
7733 if( scalarprod == 0.0 )
7747 for(
i = 0;
i < row1->
len; ++
i )
7757 for(
i = 0;
i < row2->
len; ++
i )
7772 SCIPerrorMessage(
"invalid orthogonality function parameter '%c'\n", orthofunc);
7822 parallelism =
MIN(parallelism, 1.0);
7823 parallelism =
MAX(parallelism, 0.0);
7845 eventtype, row->
name, (
void*)eventhdlr, (
void*)eventdata);
7866 SCIPsetDebugMsg(
set,
"drop event of row <%s> with handler %p and data %p\n", row->
name, (
void*)eventhdlr, (
void*)eventdata);
8113 assert(lpipos < lp->nrows);
8114 assert(nnonz < naddcoefs);
8115 ind[nnonz] = lpipos;
8116 val[nnonz] = col->
vals[
i];
8314 name[pos] = row->
name;
8326 assert(lpipos < lp->ncols);
8327 assert(nnonz < naddcoefs);
8329 ind[nnonz] = lpipos;
8330 val[nnonz] = row->
vals[
i];
8444 assert(nobjchg < lp->ncols);
8445 objind[nobjchg] = col->
lpipos;
8463 assert(nbdchg < lp->ncols);
8464 bdind[nbdchg] = col->
lpipos;
8481 SCIPsetDebugMsg(
set,
"flushing objective changes: change %d objective values of %d changed columns\n", nobjchg, lp->
nchgcols);
8579 assert(nchg < lp->nrows);
8678 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",
8872 for(
i = 0;
i < col->
len; ++
i )
8911 for(
i = 0;
i < row->
len; ++
i )
8947 for(
i = 0;
i < col->
len; ++
i )
8956 assert(0 <= pos && pos < row->nlpcols);
8985 for(
i = 0;
i < row->
len; ++
i )
9043 if( minsize <= lp->divechgsidessize )
9072#define DIVESTACKINITSIZE 100
9095 (*lp)->lpicols =
NULL;
9096 (*lp)->lpirows =
NULL;
9097 (*lp)->chgcols =
NULL;
9098 (*lp)->chgrows =
NULL;
9100 (*lp)->soldirection =
NULL;
9101 (*lp)->lazycols =
NULL;
9103 (*lp)->lpobjval = 0.0;
9104 (*lp)->glbpseudoobjval = 0.0;
9105 (*lp)->relglbpseudoobjval = 0.0;
9106 (*lp)->glbpseudoobjvalid =
TRUE;
9107 (*lp)->glbpseudoobjvalinf = 0;
9108 (*lp)->pseudoobjval = 0.0;
9109 (*lp)->relpseudoobjval = 0.0;
9110 (*lp)->pseudoobjvalid =
TRUE;
9111 (*lp)->pseudoobjvalinf = 0;
9112 (*lp)->looseobjval = 0.0;
9113 (*lp)->rellooseobjval = 0.0;
9114 (*lp)->looseobjvalid =
TRUE;
9115 (*lp)->looseobjvalinf = 0;
9116 (*lp)->nloosevars = 0;
9122 (*lp)->validdegeneracylp = -1;
9123 (*lp)->objsqrnorm = 0.0;
9124 (*lp)->objsumnorm = 0.0;
9125 (*lp)->lpicolssize = 0;
9126 (*lp)->nlpicols = 0;
9127 (*lp)->lpirowssize = 0;
9128 (*lp)->nlpirows = 0;
9129 (*lp)->lpifirstchgcol = 0;
9130 (*lp)->lpifirstchgrow = 0;
9131 (*lp)->colssize = 0;
9132 (*lp)->soldirectionsize = 0;
9134 (*lp)->lazycolssize = 0;
9135 (*lp)->nlazycols = 0;
9136 (*lp)->rowssize = 0;
9138 (*lp)->chgcolssize = 0;
9139 (*lp)->nchgcols = 0;
9140 (*lp)->chgrowssize = 0;
9141 (*lp)->nchgrows = 0;
9142 (*lp)->firstnewcol = 0;
9143 (*lp)->firstnewrow = 0;
9144 (*lp)->nremovablecols = 0;
9145 (*lp)->nremovablerows = 0;
9146 (*lp)->validsollp = stat->
lpcount;
9147 (*lp)->validfarkaslp = -1;
9148 (*lp)->validsoldirlp = -1;
9149 (*lp)->validsoldirsol =
NULL;
9150 (*lp)->objsqrnormunreliable =
FALSE;
9151 (*lp)->flushdeletedcols =
FALSE;
9152 (*lp)->flushaddedcols =
FALSE;
9153 (*lp)->flushdeletedrows =
FALSE;
9154 (*lp)->flushaddedrows =
FALSE;
9155 (*lp)->updateintegrality =
TRUE;
9156 (*lp)->flushed =
TRUE;
9158 (*lp)->solved =
TRUE;
9159 (*lp)->primalfeasible =
TRUE;
9160 (*lp)->primalchecked =
TRUE;
9161 (*lp)->dualfeasible =
TRUE;
9162 (*lp)->dualchecked =
TRUE;
9163 (*lp)->solisbasic =
FALSE;
9164 (*lp)->rootlpisrelax =
TRUE;
9165 (*lp)->isrelax =
TRUE;
9166 (*lp)->installing =
FALSE;
9167 (*lp)->strongbranching =
FALSE;
9168 (*lp)->strongbranchprobing =
FALSE;
9169 (*lp)->probing =
FALSE;
9170 (*lp)->diving =
FALSE;
9171 (*lp)->divingobjchg =
FALSE;
9172 (*lp)->divinglazyapplied =
FALSE;
9173 (*lp)->divelpistate =
NULL;
9174 (*lp)->divelpwasprimfeas =
TRUE;
9175 (*lp)->divelpwasprimchecked =
TRUE;
9176 (*lp)->divelpwasdualfeas =
TRUE;
9177 (*lp)->divelpwasdualchecked =
TRUE;
9178 (*lp)->divechgsides =
NULL;
9179 (*lp)->divechgsidetypes =
NULL;
9180 (*lp)->divechgrows =
NULL;
9181 (*lp)->ndivechgsides = 0;
9182 (*lp)->divechgsidessize = 0;
9183 (*lp)->ndivingrows = 0;
9184 (*lp)->divinglpiitlim = INT_MAX;
9185 (*lp)->resolvelperror =
FALSE;
9186 (*lp)->divenolddomchgs = 0;
9187 (*lp)->adjustlpval =
FALSE;
9189 (*lp)->lpifeastol = (*lp)->feastol;
9192 (*lp)->lpifromscratch =
FALSE;
9193 (*lp)->lpifastmip =
set->lp_fastmip;
9194 (*lp)->lpiscaling =
set->lp_scaling;
9195 (*lp)->lpipresolving =
set->lp_presolving;
9196 (*lp)->lpilpinfo =
set->disp_lpinfo;
9197 (*lp)->lpirowrepswitch =
set->lp_rowrepswitch;
9198 (*lp)->lpisolutionpolishing = (
set->lp_solutionpolishing > 0);
9199 (*lp)->lpirefactorinterval =
set->lp_refactorinterval;
9200 (*lp)->lpiconditionlimit =
set->lp_conditionlimit;
9201 (*lp)->lpimarkowitz =
set->lp_markowitz;
9202 (*lp)->lpiitlim = INT_MAX;
9205 (*lp)->lpithreads =
set->lp_threads;
9206 (*lp)->lpitiming = (int)
set->time_clocktype;
9207 (*lp)->lpirandomseed =
set->random_randomseed;
9208 (*lp)->storedsolvals =
NULL;
9218 "LP Solver <%s>: objective limit cannot be set -- can lead to unnecessary simplex iterations\n",
9222 (*lp)->lpihasfeastol = success;
9226 "LP Solver <%s>: primal feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9230 (*lp)->lpihasdualfeastol = success;
9234 "LP Solver <%s>: dual feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9238 (*lp)->lpihasbarrierconvtol = success;
9242 "LP Solver <%s>: barrier convergence tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9247 (*lp)->lpihasfastmip = success;
9251 "LP Solver <%s>: fastmip setting not available -- SCIP parameter has no effect\n",
9255 (*lp)->lpihasscaling = success;
9259 "LP Solver <%s>: scaling not available -- SCIP parameter has no effect\n",
9263 (*lp)->lpihaspresolving = success;
9267 "LP Solver <%s>: presolving not available -- SCIP parameter has no effect\n",
9274 "LP Solver <%s>: clock type cannot be set\n",
9281 "LP Solver <%s>: iteration limit cannot be set -- can lead to unnecessary simplex iterations\n",
9288 "LP Solver <%s>: pricing strategy cannot be set -- SCIP parameter has no effect\n",
9295 "LP Solver <%s>: lpinfo setting not available -- SCIP parameter has no effect\n",
9299 (*lp)->lpihasrowrep = success;
9303 "LP Solver <%s>: row representation of the basis not available -- SCIP parameter lp/rowrepswitch has no effect\n",
9307 (*lp)->lpihaspolishing = success;
9311 "LP Solver <%s>: solution polishing not available -- SCIP parameter lp/solutionpolishing has no effect\n",
9315 (*lp)->lpihasrefactor = success;
9319 "LP Solver <%s>: refactorization interval not available -- SCIP parameter lp/refactorinterval has no effect\n",
9326 "LP Solver <%s>: condition number limit for the basis not available -- SCIP parameter lp/conditionlimit has no effect\n",
9333 "LP Solver <%s>: markowitz threshhold not available -- SCIP parameter lp/minmarkowitz has no effect\n",
9340 "LP Solver <%s>: number of threads settings not available -- SCIP parameter has no effect\n",
9344 if( (*lp)->lpirandomseed != 0 )
9350 "LP Solver <%s>: random seed parameter not available -- SCIP parameter has no effect\n",
9359 SCIPerrorMessage(
"The infinity value of the LP solver has to be at least as large as the one of SCIP.\n");
9385 for(
i = 0;
i < (*lp)->nlpirows; ++
i )
9390 if( (*lp)->lpi !=
NULL )
9469 for(
i = 0;
i < col->
len; ++
i )
9529 for(
i = 0;
i < row->
len; ++
i )
9626#define checkLazyColArray(lp, set)
9643 assert(newncols <= lp->ncols);
9645 if( newncols < lp->ncols )
9649 for(
c = lp->
ncols-1;
c >= newncols; --
c )
9715 assert(0 <= newnrows && newnrows <= lp->nrows);
9718 if( newnrows < lp->nrows )
9720 for(
r = lp->
nrows-1;
r >= newnrows; --
r )
9974 lhsinfinite =
FALSE;
9975 rhsinfinite =
FALSE;
9987 for(
i = 0;
i < row->
len; ++
i )
10000 if( weights[
r] > 0.0 )
10078 if( lpistate ==
NULL )
10105 if( *lpistate !=
NULL )
10165 if( lpinorms !=
NULL )
10260 assert(newfeastol > 0.0);
10265 if( newfeastol < lp->feastol )
10302 return "primal simplex";
10304 return "dual simplex";
10308 return "barrier/crossover";
10343#ifdef SCIP_MORE_DEBUG
10349 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (primal simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10413 if( iterations > 0 )
10458 if ( keepsol && !(*
lperror) )
10501#ifdef SCIP_MORE_DEBUG
10507 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (dual simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10571 if( iterations > 0 )
10678 int totalIterations;
10722 totalIterations = iterations;
10740 if( iterations > 0 )
10814 chooseBasic =
set->lp_lexdualbasic;
10880#ifdef DEBUG_LEXDUAL
10893 for( j = 0; j < lp->
nlpicols; ++j )
10972 if( pos == -1 &&
c > oldpos )
10985 if( pos == -1 &&
c > oldpos )
10990 newlb[cntcol] = oldlb[
c];
10991 newub[cntcol] = oldlb[
c];
10992 indcol[cntcol++] =
c;
11007 newlb[cntcol] = oldlb[
c];
11008 newub[cntcol] = oldlb[
c];
11014 newlb[cntcol] = oldub[
c];
11015 newub[cntcol] = oldub[
c];
11020 newlb[cntcol] = 0.0;
11021 newub[cntcol] = 0.0;
11024 indcol[cntcol++] =
c;
11048 newlhs[cntrow] = oldlhs[
r];
11049 newrhs[cntrow] = oldlhs[
r];
11054 newlhs[cntrow] = oldrhs[
r];
11055 newrhs[cntrow] = oldrhs[
r];
11057 indrow[cntrow++] =
r;
11064 if( nDualDeg > 0 && pos >= 0 )
11066 assert(0 <= pos && pos < lp->nlpicols && pos > oldpos);
11098 lexIterations += iterations;
11100 if( iterations > 0 )
11102#ifdef DEBUG_LEXDUAL
11113 for( j = 0; j < lp->
nlpicols; ++j )
11169 while( pos >= 0 && nDualDeg > 0 && (
set->lp_lexdualmaxrounds == -1 || rounds < set->lp_lexdualmaxrounds) );
11195 lexIterations += iterations;
11203 if( lexIterations > 0 )
11209 SCIPstatAdd(stat,
set, nlexdualresolvelpiterations, lexIterations);
11214 totalIterations += lexIterations;
11301#ifdef SCIP_MORE_DEBUG
11307 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (barrier, objlim=%.15g, feastol=%.15g/%.15g, convtol=%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
11360 if( iterations > 0 )
11434 if(
set->istimelimitfinite )
11438 if( lptimelimit > 0.0 )
11441 if( lptimelimit <= 0.0 || !success )
11496#define MAXNUMTROUBLELPMSGS 10
11510 const char* formatstr,
11533 if( verblevel >
set->disp_verblevel )
11543 va_start(ap, formatstr);
11550 SCIPmessagePrintInfo(messagehdlr,
" -- further messages will be suppressed (use display/verblevel=5 to see all)");
11575 if( !
set->lp_checkdualfeas )
11577 if( !
set->lp_checkprimfeas )
11584#define FEASTOLTIGHTFAC 0.001
11630 SCIPerrorMessage(
"cannot solve LP when loose variable with infinite best bound is present\n");
11638 itlimishard = (itlim == harditlim);
11644 usepolishing =
TRUE;
11651 usepolishing =
FALSE;
11693 if( !
set->lp_checkstability )
11720 if( !
set->lp_checkstability )
11740 lpalgoName(lpalgo), (scaling == 0) ?
"with" :
"without");
11747 if( !
set->lp_checkstability )
11770 lpalgoName(lpalgo), !
set->lp_presolving ?
"with" :
"without");
11777 if( !
set->lp_checkstability )
11794 if( ((simplex && (!tightprimfeastol || !tightdualfeastol)) || (!tightprimfeastol && !tightdualfeastol)) &&
11798 if( !tightprimfeastol )
11804 if( !tightdualfeastol )
11810 if( !simplex && !tightprimfeastol && !tightdualfeastol )
11816 if( success || success2 || success3 )
11826 if( !
set->lp_checkstability )
11835 if( !tightprimfeastol )
11839 if( !tightdualfeastol )
11843 if( !simplex && !tightprimfeastol && !tightdualfeastol )
11855 if( !fromscratch && simplex )
11867 if( !
set->lp_checkstability )
11888 if( !
set->lp_checkstability )
11901 lpalgoName(lpalgo), (scaling == 0) ?
"with" :
"without");
11908 if( !
set->lp_checkstability )
11926 lpalgoName(lpalgo), !
set->lp_presolving ?
"with" :
"without");
11933 if( !
set->lp_checkstability )
11947 if( !tightprimfeastol || !tightdualfeastol )
11950 if( !tightprimfeastol )
11956 if( !tightdualfeastol )
11962 if( success || success2 )
11972 if( !
set->lp_checkstability )
11981 if( !tightprimfeastol )
11985 if( !tightdualfeastol )
12068 solvedprimal =
FALSE;
12069 solveddual =
FALSE;
12073 itlim = ( resolve ? resolveitlim : harditlim );
12077 SCIP_CALL(
lpSolveStable(lp,
set, messagehdlr, stat, prob, lpalgo, itlim, harditlim, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch,
12078 scaling, keepsol, &timelimit,
lperror) );
12214 SCIPsetDebugMsg(
set,
"solving LP with %s returned solstat=%d (internal status: %d, primalfeasible=%u, dualfeasible=%u)\n",
12257 algo = resolve ?
set->lp_resolvealgorithm :
set->lp_initalgorithm;
12267 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12273 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12280 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12286 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12292 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12298 needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12302 SCIPerrorMessage(
"invalid parameter setting <%c> for LP algorithm\n", algo);
12333#define checkLazyBounds(lp, set)
12356 SCIPsetDebugMsg(
set,
"mark all lazy columns as changed in order to reload bounds (diving=%u, applied=%u)\n",
12409 if( (
set->lp_resolveiterfac == -1) || stat->
nlps - stat->
nrootlps < 5 )
12415 return (
int)
MIN(itlim,
MAX(
set->lp_resolveitermin, \
12460 SCIPsetDebugMsg(
set,
"solving LP: %d rows, %d cols, primalfeasible=%u, dualfeasible=%u, solved=%u, diving=%u, probing=%u, cutoffbnd=%g\n",
12464 needprimalray =
TRUE;
12466 || (
set->conf_enable &&
set->conf_useinflp !=
'o'));
12469 harditlim = (int)
MIN(itlim, INT_MAX);
12471 assert(harditlim == -1 || (resolveitlim <= harditlim));
12510 tightprimfeastol =
FALSE;
12511 tightdualfeastol =
FALSE;
12512 fromscratch =
FALSE;
12513 primalfeasible =
FALSE;
12514 dualfeasible =
FALSE;
12515 wasfromscratch = (stat->
nlps == 0);
12516 scaling =
set->lp_scaling;
12520 oldnlps = stat->
nlps;
12521 SCIP_CALL(
lpFlushAndSolve(lp, blkmem,
set, messagehdlr, stat, prob, eventqueue, resolveitlim, harditlim, needprimalray,
12522 needdualray, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12538 if(
set->lp_checkprimfeas )
12540 primalfeaspointer = &primalfeasible;
12546 primalfeasible =
TRUE;
12547 primalfeaspointer =
NULL;
12550 if(
set->lp_checkdualfeas )
12552 dualfeaspointer = &dualfeasible;
12558 dualfeasible =
TRUE;
12559 dualfeaspointer =
NULL;
12568 if( primalfeasible && dualfeasible && aging && !lp->
diving && stat->
nlps > oldnlps )
12572 if( stat->
nlps % ((
set->lp_rowagelimit+1)/2 + 1) == 0 )
12585 if( !primalfeasible || !dualfeasible )
12589 if( (fastmip > 0) && simplex )
12594 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12598 else if( (!primalfeasible && !tightprimfeastol) || (!dualfeasible && !tightdualfeastol) )
12605 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12606 tightprimfeastol = tightprimfeastol || !primalfeasible;
12607 tightdualfeastol = tightdualfeastol || !dualfeasible;
12610 else if( !fromscratch && !wasfromscratch && simplex )
12615 stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12616 fromscratch =
TRUE;
12627 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
12649 farkasvalid =
FALSE;
12654 farkasvalid =
TRUE;
12657 if( !farkasvalid && !(*
lperror) )
12661 if( (fastmip > 0) && simplex )
12672 else if( !tightdualfeastol )
12680 tightdualfeastol =
TRUE;
12683 else if( !fromscratch && simplex )
12691 fromscratch =
TRUE;
12709 if(
set->lp_checkprimfeas )
12721 primalfeasible =
TRUE;
12722 rayfeasible =
TRUE;
12729 SCIPsetDebugMsg(
set,
" -> LP has unbounded primal ray (primalfeas=%u, rayfeas=%u)\n",
12730 primalfeasible, rayfeasible);
12732 if( !primalfeasible || !rayfeasible )
12736 if( (fastmip > 0) && simplex )
12741 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12745 else if( !tightprimfeastol )
12752 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12753 tightprimfeastol =
TRUE;
12756 else if( !fromscratch && simplex )
12761 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12762 fromscratch =
TRUE;
12765 else if( scaling > 0 )
12770 stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12816 char tmppricingchar;
12822 fromscratch =
FALSE;
12834 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12856 if( !(*
lperror) && (fastmip > 0) && simplex )
12860 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol,
lperror) );
12875 SCIPsetDebugMsg(
set,
"unresolved error while resolving LP in order to exceed the objlimit\n");
12891 if(
set->lp_checkprimfeas )
12893 primalfeaspointer = &primalfeasible;
12899 primalfeasible =
TRUE;
12900 primalfeaspointer =
NULL;
12903 if(
set->lp_checkdualfeas )
12905 dualfeaspointer = &dualfeasible;
12911 dualfeasible =
TRUE;
12912 dualfeaspointer =
NULL;
12937 if( !primalfeasible || !dualfeasible
12947 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
12971 farkasvalid =
FALSE;
12976 farkasvalid =
TRUE;
12982 if( !tightprimfeastol )
12990 tightprimfeastol =
TRUE;
13001 fromscratch =
TRUE;
13019 if(
set->lp_checkprimfeas )
13031 primalfeasible =
TRUE;
13032 rayfeasible =
TRUE;
13041 if( !primalfeasible || !rayfeasible )
13079 SCIPmessagePrintWarning(messagehdlr,
"LP solver reached time limit, but SCIP time limit is not exceeded yet; "
13080 "you might consider switching the clock type of SCIP\n");
13106 SCIPsetDebugMsg(
set,
"resetting parameter SCIP_LPPARAM_FROMSCRATCH to FALSE %s\n", success ?
"" :
"failed");
13236 for( v = 0; v <
nvars; ++v )
13354 int pseudoobjvalinf;
13365 pseudoobjval -= oldbound *
obj;
13366 assert(pseudoobjvalinf >= 0);
13370 pseudoobjval += newbound *
obj;
13372 assert(pseudoobjvalinf >= 0);
13374 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13377 return pseudoobjval;
13393 int pseudoobjvalinf;
13419 assert(pseudoobjvalinf >= 0);
13431 assert(pseudoobjvalinf >= 0);
13433 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13436 return pseudoobjval;
13478 (*deltaval) = ub *
newobj;
13487 (*deltaval) = -lb *
oldobj;
13502 (*deltaval) = -lb *
oldobj;
13523 (*deltaval) = lb *
newobj;
13532 (*deltaval) = -ub *
oldobj;
13547 (*deltaval) = -ub *
oldobj;
13558 (*deltaval) = ub *
newobj;
13565 (*deltaval) = lb *
newobj;
13592 *deltaval = -
obj * oldlb;
13599 *deltaval =
obj * newlb;
13604 *deltaval =
obj * (newlb - oldlb);
13630 *deltaval = -
obj * oldub;
13637 *deltaval =
obj * newub;
13642 *deltaval =
obj * (newub - oldub);
13762 SCIPerrorMessage(
"LP was informed of an objective change of a non-active variable\n");
13854 if(
set->misc_exactsolve )
13935 if(
set->misc_exactsolve )
14003 if(
set->misc_exactsolve )
14198 if(
set->misc_exactsolve )
14322 if(
set->misc_exactsolve )
14391 if( primalfeasible ==
NULL )
14392 stillprimalfeasible =
FALSE;
14395 *primalfeasible =
TRUE;
14396 stillprimalfeasible =
TRUE;
14398 if( dualfeasible ==
NULL )
14399 stilldualfeasible =
FALSE;
14402 *dualfeasible =
TRUE;
14403 stilldualfeasible =
TRUE;
14423#ifdef SCIP_USE_LPSOLVER_ACTIVITY
14445 for(
c = 0;
c < nlpicols; ++
c )
14447 assert( 0 <= cstat[
c] && cstat[
c] < 4 );
14455 stillprimalfeasible =
FALSE;
14456 stilldualfeasible =
FALSE;
14465 if( stillprimalfeasible )
14467 stillprimalfeasible =
14470 primalbound += (lpicols[
c]->
primsol * lpicols[
c]->
obj);
14480 if( stilldualfeasible )
14485 if( stilldualfeasible )
14491 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14495 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14498 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14512 if( stilldualfeasible
14515 if( stilldualfeasible
14519 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14523 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14526 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14533 if( stilldualfeasible )
14536 dualbound += (lpicols[
c]->
redcost * lpicols[
c]->
lb);
14538 dualbound += (lpicols[
c]->
redcost * lpicols[
c]->
ub);
14543 for(
r = 0;
r < nlpirows; ++
r )
14545 assert( 0 <= rstat[
r] && rstat[
r] < 4 );
14547#ifdef SCIP_USE_LPSOLVER_ACTIVITY
14551 if( lpirows[
r]->validactivitylp != stat->
lpcount )
14556 if( stillprimalfeasible )
14558 stillprimalfeasible =
14570 if( stilldualfeasible )
14572 compslack =
MIN((lpirows[
r]->activity - lpirows[
r]->lhs), 1.0) * lpirows[
r]->
dualsol;
14575 if( stilldualfeasible )
14577 compslack =
MIN((lpirows[
r]->rhs - lpirows[
r]->activity), 1.0) * lpirows[
r]->
dualsol;
14581 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g]: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14582 lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->activity, lpirows[
r]->dualsol,
14585 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14588 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14596 if( stilldualfeasible &&
14599 if( stilldualfeasible &&
14603 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g] + %.9g: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14604 lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, lpirows[
r]->activity, lpirows[
r]->dualsol,
14607 primalfeasible !=
NULL ? stillprimalfeasible :
TRUE,
14610 dualfeasible !=
NULL ? stilldualfeasible :
TRUE);
14617 if( stilldualfeasible )
14651 if( primalfeasible !=
NULL )
14652 *primalfeasible = stillprimalfeasible;
14653 if( dualfeasible !=
NULL )
14654 *dualfeasible = stilldualfeasible;
14660#ifdef SCIP_USE_LPSOLVER_ACTIVITY
14701 if( primalfeasible !=
NULL )
14702 *primalfeasible =
TRUE;
14703 if( rayfeasible !=
NULL )
14704 *rayfeasible =
TRUE;
14714 SCIPerrorMessage(
"LP solver has no primal ray to prove unboundedness.\n");
14736 for(
c = 0;
c < nlpicols; ++
c )
14744 if( rayfeasible !=
NULL )
14746 *rayfeasible = *rayfeasible
14752 rayobjval += ray[
c] * col->
obj;
14775 for(
r = 0;
r < nlpirows; ++
r )
14786 col = row->
cols[
c];
14800 col = row->
cols[
c];
14803 if( col->
lppos >= 0 )
14821 if( primalfeasible !=
NULL )
14823 assert( *primalfeasible );
14824 for(
c = 0;
c < nlpicols; ++
c )
14834 *primalfeasible =
FALSE;
14842 for(
r = 0;
r < nlpirows; ++
r )
14855 col = row->
cols[
c];
14870 col = row->
cols[
c];
14873 if( col->
lppos >= 0 )
14882 if( primalfeasible !=
NULL && *primalfeasible )
14886 *primalfeasible =
FALSE;
14890 if( rayfeasible !=
NULL && *rayfeasible )
14894 *rayfeasible =
FALSE;
14898 activity[
r] = primact;
14901 if( primalfeasible !=
NULL && !(*primalfeasible) )
14906 else if( rayfeasible !=
NULL && !(*rayfeasible) )
14917 if( rayfeasible !=
NULL )
14918 *rayfeasible =
FALSE;
14924 assert(rayobjval != 0.0);
14931 for(
c = 0;
c < nlpicols; ++
c )
14936 rayscale =
MIN(rayscale, (lpicols[
c]->ub -
primsol[
c]) / ray[
c]);
14941 rayscale =
MIN(rayscale, 1.0 / ray[
c]);
14947 rayscale =
MIN(rayscale, (lpicols[
c]->lb -
primsol[
c]) / ray[
c]);
14952 rayscale =
MIN(rayscale, -1.0 / ray[
c]);
14960 SCIPsetDebugMsg(
set,
"unbounded LP solution: rayobjval=%f, rayscale=%f\n", rayobjval, rayscale);
14965 for(
c = 0;
c < nlpicols; ++
c )
14972 primsolval =
primsol[
c] + rayscale * ray[
c];
14980 for(
r = 0;
r < nlpirows; ++
r )
15037 for(
c = 0;
c < nlpicols;
c++ )
15093 farkascoefs =
NULL;
15117 for(
r = 0;
r < nlpirows; ++
r )
15126 if( checkfarkas && dualfarkas[
r] != 0.0 )
15139 SCIPsetDebugMsg(
set,
"farkas proof is invalid: row <%s>[lhs=%g,rhs=%g,c=%g] has multiplier %g\n",
15140 SCIProwGetName(lpirows[
r]), lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, dualfarkas[
r]);
15154 for(
c = 0;
c < lpirows[
r]->
len;
c++ )
15161 assert(pos >= 0 && pos < nlpicols);
15163 farkascoefs[pos] += dualfarkas[
r] * lpirows[
r]->
vals[
c];
15167 if( dualfarkas[
r] > 0.0 )
15171 farkaslhs += dualfarkas[
r] * lpirows[
r]->
lhs;
15174 else if( dualfarkas[
r] < 0.0 )
15178 farkaslhs += dualfarkas[
r] * lpirows[
r]->
rhs;
15181 maxactivity += dualfarkas[
r] * lpirows[
r]->
constant;
15186 for(
c = 0;
c < nlpicols; ++
c )
15204 if( farkascoefs[
c] > 0.0 )
15206 maxactivity += farkascoefs[
c] * lpicols[
c]->
ub;
15210 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15219 maxactivity += farkascoefs[
c] * lpicols[
c]->
lb;
15223 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15239 SCIPsetDebugMsg(
set,
"farkas proof is invalid: maxactivity=%.12f, lhs=%.12f\n", maxactivity, farkaslhs);
15300 for(
c = 0;
c < nlpicols; ++
c )
15306 lpicols[
c]->
age = 0;
15311 for(
r = 0;
r < nlpirows; ++
r )
15316 if( lpirows[
r]->dualsol == 0.0 )
15323 lpirows[
r]->
age = 0;
15356 for(
c = 0;
c < ncols; ++
c )
15362 col->
lppos = coldstat[
c];
15363 if( coldstat[
c] == -1 )
15381 else if( coldstat[
c] <
c )
15385 lp->
cols[coldstat[
c]] = col;
15408 if( lp->
ncols < ncols )
15457 for(
r = 0;
r < nrows; ++
r )
15463 row->
lppos = rowdstat[
r];
15464 if( rowdstat[
r] == -1 )
15493 else if( rowdstat[
r] <
r )
15497 lp->
rows[rowdstat[
r]] = row;
15507 if( lp->
nrows < nrows )
15569 for(
c = firstcol;
c < ncols; ++
c )
15574 if( cols[
c]->removable
15575 && cols[
c]->obsoletenode != stat->
nnodes
15576 && cols[
c]->
age >
set->lp_colagelimit
15648 for(
r = firstrow;
r < nrows; ++
r )
15653 if( rows[
r]->removable
15654 && rows[
r]->obsoletenode != stat->
nnodes
15655 && rows[
r]->
age >
set->lp_rowagelimit
15662 rows[
r]->name, rows[
r]->activity, rows[
r]->lhs, rows[
r]->rhs);
15697 SCIPsetDebugMsg(
set,
"removing obsolete columns starting with %d/%d, obsolete rows starting with %d/%d\n",
15730 if( 0 < lp->
ncols )
15734 if( 0 < lp->
nrows )
15764 assert(0 <= firstcol && firstcol < lp->ncols);
15779 for(
c = firstcol;
c < ncols; ++
c )
15784 if( lpicols[
c]->removable
15837 assert(0 <= firstrow && firstrow < lp->nrows);
15854 for(
r = firstrow;
r < nrows; ++
r )
15902 cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
15903 cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
15905 SCIPsetDebugMsg(
set,
"removing unused columns starting with %d/%d (%u), unused rows starting with %d/%d (%u), LP algo: %d, basic sol: %u\n",
15941 cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
15942 cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
15944 SCIPsetDebugMsg(
set,
"removing all unused columns (%u) and rows (%u), LP algo: %d, basic sol: %u\n",
15947 if( cleanupcols && 0 < lp->
ncols )
15951 if( cleanuprows && 0 < lp->
nrows )
16018 SCIPsetDebugMsg(
set,
"removing %d/%d redundant basic rows from LP\n", ndelrows, nrows);
16056 SCIPsetDebugMsg(
set,
"diving started (LP flushed: %u, LP solved: %u, solstat: %d)\n",
16082 if( !
set->lp_resolverestore && lp->
solved )
16164 for( v = 0; v <
nvars; ++v )
16232 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, prob, -1LL,
FALSE,
FALSE,
FALSE,
FALSE, &
lperror) );
16244 "LP was not resolved to a sufficient status after diving\n");
16319#define DIVESTACKGROWFACT 1.5
16444 for( j = 0; j < lp->
nrows; ++j )
16473 for( j = 0; j < lp->
ncols; ++j )
16481 c = usefarkas ? 0.0 : col->
obj;
16548 *proved = (
bound > 0.0);
16550 SCIPsetDebugMsg(
set,
"proved Farkas value of LP: %g -> infeasibility %sproved\n",
bound, *proved ?
"" :
"not ");
16596 file = fopen(fname,
"w");
16606 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Original Variable and Constraint Names have been replaced by generic names.\n");
16609 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Warning: Variable and Constraint Names should not contain special characters like '+', '=' etc.\n");
16613 if( origobj && objoffset != 0.0 )
16615 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ An artificial variable 'objoffset' has been added and fixed to 1.\n");
16616 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Switching this variable to 0 will disable the offset in the objective.\n\n");
16651 if( origobj && objoffset != 0.0 )
16689 if( strlen(rowname) > 0 )
16694 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
16715 if( (j+1) % 10 == 0 )
16780 if( strlen(rowname) > 0 )
16785 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
16806 if( (j+1) % 10 == 0 )
16857 if( origobj && objoffset != 0.0 )
16895#undef SCIPcolGetObj
16898#undef SCIPcolGetBestBound
16899#undef SCIPcolGetPrimsol
16900#undef SCIPcolGetMinPrimsol
16901#undef SCIPcolGetMaxPrimsol
16902#undef SCIPcolGetBasisStatus
16903#undef SCIPcolGetVar
16904#undef SCIPcolGetIndex
16905#undef SCIPcolGetVarProbindex
16906#undef SCIPcolIsIntegral
16907#undef SCIPcolIsRemovable
16908#undef SCIPcolGetLPPos
16909#undef SCIPcolGetLPDepth
16910#undef SCIPcolIsInLP
16911#undef SCIPcolGetNNonz
16912#undef SCIPcolGetNLPNonz
16913#undef SCIPcolGetRows
16914#undef SCIPcolGetVals
16915#undef SCIPcolGetStrongbranchNode
16916#undef SCIPcolGetNStrongbranchs
16917#undef SCIPcolGetAge
16918#undef SCIPboundtypeOpposite
16919#undef SCIProwGetNNonz
16920#undef SCIProwGetNLPNonz
16921#undef SCIProwGetCols
16922#undef SCIProwGetVals
16923#undef SCIProwGetConstant
16924#undef SCIProwGetNorm
16925#undef SCIProwGetSumNorm
16926#undef SCIProwGetLhs
16927#undef SCIProwGetRhs
16928#undef SCIProwGetDualsol
16929#undef SCIProwGetDualfarkas
16930#undef SCIProwGetBasisStatus
16931#undef SCIProwGetName
16932#undef SCIProwGetIndex
16933#undef SCIProwGetAge
16934#undef SCIProwGetRank
16935#undef SCIProwIsIntegral
16936#undef SCIProwIsLocal
16937#undef SCIProwIsModifiable
16938#undef SCIProwIsRemovable
16939#undef SCIProwGetOrigintype
16940#undef SCIProwGetOriginCons
16941#undef SCIProwGetOriginConshdlr
16942#undef SCIProwGetOriginSepa
16943#undef SCIProwIsInGlobalCutpool
16944#undef SCIProwGetLPPos
16945#undef SCIProwGetLPDepth
16946#undef SCIProwIsInLP
16947#undef SCIProwGetActiveLPCount
16948#undef SCIProwGetNLPsAfterCreation
16949#undef SCIProwChgRank
16950#undef SCIPlpGetCols
16951#undef SCIPlpGetNCols
16952#undef SCIPlpGetRows
16953#undef SCIPlpGetNRows
16954#undef SCIPlpGetNewcols
16955#undef SCIPlpGetNNewcols
16956#undef SCIPlpGetNewrows
16957#undef SCIPlpGetNNewrows
16958#undef SCIPlpGetObjNorm
16959#undef SCIPlpGetRootObjval
16960#undef SCIPlpGetRootColumnObjval
16961#undef SCIPlpGetRootLooseObjval
16963#undef SCIPlpSetIsRelax
16964#undef SCIPlpIsRelax
16965#undef SCIPlpIsSolved
16966#undef SCIPlpIsSolBasic
16968#undef SCIPlpDivingObjChanged
16969#undef SCIPlpMarkDivingObjChanged
16970#undef SCIPlpUnmarkDivingObjChanged
16971#undef SCIPlpDivingRowsChanged
16972#undef SCIPlpIsFeasEQ
16973#undef SCIPlpIsFeasLT
16974#undef SCIPlpIsFeasLE
16975#undef SCIPlpIsFeasGT
16976#undef SCIPlpIsFeasGE
16977#undef SCIPlpIsFeasZero
16978#undef SCIPlpIsFeasPositive
16979#undef SCIPlpIsFeasNegative
17018 if( col->
obj >= 0.0 )
17031 if( col->
lppos >= 0 )
17151 return (col->
lppos >= 0);
17347 if( row->
lppos >= 0 )
17360 if( row->
lppos >= 0 )
17559 return (row->
lppos >= 0);
17628 nlpcols = lp->
ncols;
17631 for(
c = 0;
c < nlpcols; ++
c )
17633 if( lpcols[
c]->ub - lpcols[
c]->lb >
eps )
17637 return nunfixedcols;
17720 for(
c = lp->
ncols - 1;
c >= 0; --
c )
17974 SCIPmessagePrintWarning(messagehdlr,
"Could not set feasibility tolerance of LP solver for relative interior point computation.\n");
17982 SCIPmessagePrintWarning(messagehdlr,
"Could not set dual feasibility tolerance of LP solver for relative interior point computation.\n");
17987 nnewcols = 3*lp->
ncols + 2*lp->
nrows + (inclobjcutoff ? 1 : 0) + 1;
17993 for( j = 0; j < lp->
ncols; ++j )
18003 nnewcols = lp->
ncols;
18004 obj[nnewcols] = 0.0;
18005 lb[nnewcols] = 1.0;
18029 ntotnonz += row->
nlpcols + 1;
18039 lb[nnewcols] = 0.0;
18040 ub[nnewcols] = 1.0;
18041 obj[nnewcols++] = 1.0;
18042 ntotnonz += row->
nlpcols + 2;
18045 ntotnonz += row->
nlpcols + 1;
18052 lb[nnewcols] = 0.0;
18053 ub[nnewcols] = 1.0;
18054 obj[nnewcols++] = 1.0;
18055 ntotnonz += row->
nlpcols + 2;
18058 ntotnonz += row->
nlpcols + 1;
18065 if( inclobjcutoff && relaxrows )
18068 lb[nnewcols] = 0.0;
18069 ub[nnewcols] = 1.0;
18070 obj[nnewcols++] = 1.0;
18071 ntotnonz += lp->
ncols + 2;
18076 for( j = 0; j < lp->
ncols; ++j )
18094 lb[nnewcols] = 0.0;
18095 ub[nnewcols] = 1.0;
18096 obj[nnewcols++] = 1.0;
18102 lb[nnewcols] = 0.0;
18103 ub[nnewcols] = 1.0;
18104 obj[nnewcols++] = 1.0;
18111 nslacks = nnewcols - lp->
ncols - 1;
18113 assert( nnewcols <= 3*lp->ncols + 2*lp->
nrows + (inclobjcutoff ? 1 : 0) + 1 );
18155 assert( nnonz <= lp->ncols );
18156 rowcols = row->
cols;
18157 rowvals = row->
vals;
18163 matbeg[matrowidx] = matidx;
18164 for( j = 0; j < nnonz; ++j )
18167 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18170 matinds[matidx] = rowcols[j]->
lppos;
18171 matvals[matidx++] = rowvals[j];
18172 assert( matidx <= ntotnonz );
18178 matinds[matidx] = lp->
ncols;
18179 matvals[matidx++] = -rhs;
18180 assert( matidx <= ntotnonz );
18183 matlhs[matrowidx] = 0.0;
18184 matrhs[matrowidx++] = 0.0;
18185 assert( matrowidx <= ntotrows );
18198 matbeg[matrowidx] = matidx;
18199 for( j = 0; j < nnonz; ++j )
18202 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18205 matinds[matidx] = rowcols[j]->
lppos;
18206 matvals[matidx++] = rowvals[j];
18207 assert( matidx <= ntotnonz );
18213 matinds[matidx] = lp->
ncols;
18214 matvals[matidx++] = -lhs;
18215 assert( matidx <= ntotnonz );
18221 matvals[matidx] = -
MAX(1.0, lhs);
18222 matinds[matidx++] = lp->
ncols + 1 + cnt;
18223 assert( matidx <= ntotnonz );
18227 matlhs[matrowidx] = 0.0;
18229 assert( matrowidx <= ntotrows );
18236 matbeg[matrowidx] = matidx;
18237 for( j = 0; j < nnonz; ++j )
18240 assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18243 matinds[matidx] = rowcols[j]->
lppos;
18244 matvals[matidx++] = rowvals[j];
18245 assert( matidx <= ntotnonz );
18251 matinds[matidx] = lp->
ncols;
18252 matvals[matidx++] = -rhs;
18253 assert( matidx <= ntotnonz );
18259 matvals[matidx] =
MAX(1.0, absrhs);
18260 matinds[matidx++] = lp->
ncols + 1 + cnt;
18265 matrhs[matrowidx++] = 0.0;
18266 assert( matrowidx <= ntotrows );
18272 if( inclobjcutoff )
18281 matbeg[matrowidx] = matidx;
18282 for( j = 0; j < lp->
ncols; ++j )
18291 matvals[matidx++] = lp->
cols[j]->
obj;
18292 assert( matidx <= ntotnonz );
18301 matinds[matidx] = lp->
ncols;
18302 matvals[matidx++] = -rhs;
18303 assert( matidx <= ntotnonz );
18311 matvals[matidx] =
MAX(1.0, absrhs);
18312 matinds[matidx++] = lp->
ncols + 1 + cnt;
18313 assert( matidx <= ntotnonz );
18317 matrhs[matrowidx++] = 0.0;
18318 assert( matrowidx <= ntotrows );
18322 for( j = 0; j < lp->
ncols; ++j )
18336 matbeg[matrowidx] = matidx;
18338 matinds[matidx] = j;
18339 matvals[matidx++] = 1.0;
18340 assert( matidx <= ntotnonz );
18345 matinds[matidx] = lp->
ncols;
18346 matvals[matidx++] = -col->
ub;
18347 assert( matidx <= ntotnonz );
18350 matlhs[matrowidx] = 0.0;
18351 matrhs[matrowidx++] = 0.0;
18352 assert( matrowidx <= ntotrows );
18364 matbeg[matrowidx] = matidx;
18366 matinds[matidx] = j;
18367 matvals[matidx++] = 1.0;
18368 assert( matidx <= ntotnonz );
18373 matinds[matidx] = lp->
ncols;
18374 matvals[matidx++] = -col->
lb;
18375 assert( matidx <= ntotnonz );
18379 matvals[matidx] = -
MAX(1.0, abscollb);
18380 matinds[matidx++] = lp->
ncols + 1 + cnt;
18381 assert( matidx <= ntotnonz );
18384 matlhs[matrowidx] = 0.0;
18386 assert( matrowidx <= ntotrows );
18393 matbeg[matrowidx] = matidx;
18395 matinds[matidx] = j;
18396 matvals[matidx++] = 1.0;
18397 assert( matidx <= ntotnonz );
18402 matinds[matidx] = lp->
ncols;
18403 matvals[matidx++] = -col->
ub;
18404 assert( matidx <= ntotnonz );
18408 matvals[matidx] =
MAX(1.0, abscolub);
18409 matinds[matidx++] = lp->
ncols + 1 + cnt;
18410 assert( matidx <= ntotnonz );
18414 matrhs[matrowidx++] = 0.0;
18415 assert( matrowidx <= ntotrows );
18418 assert( cnt == nslacks );
18419 assert( matrowidx == ntotrows );
18438 assert( ncols == nnewcols );
18449 SCIPmessagePrintWarning(messagehdlr,
"Could not set time limit of LP solver for relative interior point computation.\n");
18458 SCIPmessagePrintWarning(messagehdlr,
"Could not set iteration limit of LP solver for relative interior point computation.\n");
18484 for( j = 0; j < lp->
ncols; ++j )
18485 point[j] = primal[j]/
alpha;
18509 assert( nnonz <= lp->ncols );
18510 rowcols = row->
cols;
18511 rowvals = row->
vals;
18514 for( j = 0; j < nnonz; ++j )
18515 sum += rowvals[j] * primal[rowcols[j]->lppos];
18539 if( inclobjcutoff )
18548 for( j = 0; j < lp->
ncols; ++j )
18557 for( j = 0; j < lp->
ncols; ++j )
18656 if ( timelimit <= 0.0 || iterlimit <= 0 )
18662 if( lp->
ncols == 0 )
18667 inclobjcutoff =
FALSE;
18672 if( lp->
nrows == 0 && !inclobjcutoff )
18685 retcode =
computeRelIntPoint(lpi,
set, messagehdlr, lp, prob, relaxrows, inclobjcutoff, timelimit, iterlimit, point, success);
18728 int nfixedcols = 0;
18729 int nalreadyfixedcols = 0;
18730 int nfixedrows = 0;
18732 int nimplicitfixedrows = 0;
18737 int nbasicequalities = 0;
18745 for(
c = ncols - 1 ;
c >= 0; --
c )
18758 ++nalreadyfixedcols;
18763 for(
r = nrows - 1;
r >= 0; --
r )
18796 ++nimplicitfixedrows;
18802 ++nbasicequalities;
18804 assert(nfixedcols + nfixedrows <= ncols + nineq + nbasicequalities - nrows - nalreadyfixedcols - nimplicitfixedrows);
18806 if( ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols > 0 )
18807 lp->
degeneracy = 1.0 - 1.0 * (nfixedcols + nfixedrows) / (ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols);
18812 lp->
varconsratio = 1.0 * (ncols + nineq + nbasicequalities - nfixedcols - nfixedrows - nalreadyfixedcols) / nrows;
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_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 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_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)
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_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_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_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)
SCIP_Real SCIPlpGetModifiedProvedPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype)
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)
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)
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_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 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)
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 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)
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)
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)
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
interface methods for specific 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 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
SCIP_Longint obsoletenode
unsigned int lprowssorted
SCIP_Longint validredcostlp
unsigned int nonlprowssorted
SCIP_Longint validfarkaslp
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_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_CLOCK * primallptime
SCIP_Longint nprimallpiterations
SCIP_CLOCK * lexduallptime
datastructures for managing events
data structures for 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
@ 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