( row->
len== 0 )
108 for( i = 0; i < row->
len; ++i )
127#define debugRowPrint(x,y) 140assert(col !=
NULL);
147 if( col->
len== 0 )
151 for(
r= 0;
r< col->
len; ++
r)
160#define debugColPrint(x,y) 185assert(num <= lp->chgcolssize);
208assert(num <= lp->chgrowssize);
231assert(num <= lp->lpicolssize);
254assert(num <= lp->lpirowssize);
277assert(num <= lp->colssize);
297assert(num <= lp->soldirectionsize);
320assert(num <= lp->lazycolssize);
343assert(num <= lp->rowssize);
357assert(col !=
NULL);
358assert(col->
len<= col->
size);
360 if( num > col->
size)
368col->
size= newsize;
370assert(num <= col->size);
386assert(stat !=
NULL);
387assert(blkmem !=
NULL);
420assert(blkmem !=
NULL);
424 if( storedsolvals !=
NULL)
478assert(col !=
NULL);
479assert(blkmem !=
NULL);
507assert(col !=
NULL);
508assert(blkmem !=
NULL);
512 if( storedsolvals !=
NULL)
553assert(row !=
NULL);
554assert(blkmem !=
NULL);
592assert(row !=
NULL);
593assert(blkmem !=
NULL);
597 if( storedsolvals !=
NULL)
637assert(row !=
NULL);
638assert(row->
len<= row->
size);
640 if( num > row->
size)
649row->
size= newsize;
651assert(num <= row->size);
657#ifdef SCIP_MORE_DEBUG 667 if( !msgdisp_checkrow )
669printf(
"LP ROW CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
670msgdisp_checkrow =
TRUE;
677 for( i = 1; i < row->
nlpcols; ++i )
688 for( i = row->
nlpcols+ 1; i < row->len; ++i )
699#ifdef SCIP_MORE_DEBUG 710assert(cols !=
NULL|| row->
len== 0);
714 for( c = row->
len- 1; c >= 0; --c )
716 if( cols[c]->lppos >= 0 )
717sqrnorm +=
SQR(row->
vals[c]);
720assert(
ABS(sqrnorm - row->
sqrnorm) < 1e-06 *
MAX(1.0,sqrnorm));
733assert(cols !=
NULL|| row->
len== 0);
737 for( c = row->
len- 1; c >= 0; --c )
739 if( cols[c]->lppos >= 0 )
743assert(
ABS(sumnorm - row->
sumnorm) < 1e-06 *
MAX(1.0,sumnorm));
756assert(cols !=
NULL|| row->
len== 0);
760 for( c = row->
len- 1; c >= 0; --c )
762 if( cols[c]->lppos >= 0 )
766assert(
ABS(objprod - row->
objprod) < 1e-06 *
MAX(1.0,objprod));
769#define checkRowSqrnorm(row) 770#define checkRowSumnorm(row) 771#define checkRowObjprod(row) 793assert(prob !=
NULL);
797nvars = prob->
nvars;
801 for( v = 0; v < nvars; ++v )
834assert(prob !=
NULL);
838nvars = prob->
nvars;
842 for( v = 0; v < nvars; ++v )
876assert(prob !=
NULL);
880nvars = prob->
nvars;
884 for( v = 0; v < nvars; ++v )
914assert(prob !=
NULL);
936assert(prob !=
NULL);
953assert(elem1 !=
NULL);
954assert(elem2 !=
NULL);
976assert(col !=
NULL);
986 for( i = 0; i < col->
nlprows; ++i )
1009assert(col !=
NULL);
1019 for( i = col->
nlprows; i < col->len; ++i )
1040assert(row !=
NULL);
1050 for( i = 0; i < row->
nlpcols; ++i )
1073assert(row !=
NULL);
1085 for( i = row->
nlpcols; i < row->len; ++i )
1113assert(col !=
NULL);
1114assert(row !=
NULL);
1117searchidx = row->
index;
1118 while(minpos <= maxpos)
1120pos = (minpos + maxpos)/2;
1121assert(0 <= pos && pos < col->len);
1123assert((pos < col->nlprows) == (col->
rows[pos]->
lppos>= 0 && col->
linkpos[pos] >= 0));
1125 if( searchidx == idx )
1127 else if( searchidx < idx )
1145assert(col !=
NULL);
1146assert(row !=
NULL);
1151 if( row->
lppos>= 0 )
1188assert(row !=
NULL);
1189assert(col !=
NULL);
1192searchidx = col->
index;
1193 while(minpos <= maxpos)
1195pos = (minpos + maxpos)/2;
1196assert(0 <= pos && pos < row->len);
1198assert((pos < row->nlpcols) == (row->
cols[pos]->
lppos>= 0 && row->
linkpos[pos] >= 0));
1201 if( searchidx == idx )
1203 else if( searchidx < idx )
1223assert(row !=
NULL);
1224assert(col !=
NULL);
1232 if( col->
lppos>= 0 )
1253assert(-1 <= pos && pos < row->len);
1255assert(row->
cols[pos] == col);
1259 for( i = 0; i < row->
len; ++i )
1260assert(row->
cols[i] != col);
1275assert(col !=
NULL);
1276assert(0 <= oldpos && oldpos < col->len);
1277assert(0 <= newpos && newpos < col->len);
1278assert(col->
rows[oldpos] !=
NULL);
1280 if( oldpos == newpos )
1283col->
rows[newpos] = col->
rows[oldpos];
1284col->
vals[newpos] = col->
vals[oldpos];
1288 if( col->
linkpos[newpos] >= 0 )
1315assert(col !=
NULL);
1316assert(0 <= pos1 && pos1 < col->len);
1317assert(0 <= pos2 && pos2 < col->len);
1318assert(col->
rows[pos1] !=
NULL);
1324tmprow = col->
rows[pos2];
1325tmpval = col->
vals[pos2];
1326tmplinkpos = col->
linkpos[pos2];
1328col->
rows[pos2] = col->
rows[pos1];
1329col->
vals[pos2] = col->
vals[pos1];
1332col->
rows[pos1] = tmprow;
1333col->
vals[pos1] = tmpval;
1334col->
linkpos[pos1] = tmplinkpos;
1337 if( col->
linkpos[pos1] >= 0 )
1344 if( col->
linkpos[pos2] >= 0 )
1371assert(row !=
NULL);
1372assert(0 <= oldpos && oldpos < row->len);
1373assert(0 <= newpos && newpos < row->len);
1374assert(row->
cols[oldpos] !=
NULL);
1376 if( oldpos == newpos )
1379row->
cols[newpos] = row->
cols[oldpos];
1381row->
vals[newpos] = row->
vals[oldpos];
1385 if( row->
linkpos[newpos] >= 0 )
1413assert(row !=
NULL);
1414assert(0 <= pos1 && pos1 < row->len);
1415assert(0 <= pos2 && pos2 < row->len);
1416assert(row->
cols[pos1] !=
NULL);
1423tmpcol = row->
cols[pos2];
1425tmpval = row->
vals[pos2];
1426tmplinkpos = row->
linkpos[pos2];
1428row->
cols[pos2] = row->
cols[pos1];
1430row->
vals[pos2] = row->
vals[pos1];
1433row->
cols[pos1] = tmpcol;
1435row->
vals[pos1] = tmpval;
1436row->
linkpos[pos1] = tmplinkpos;
1439 if( row->
linkpos[pos1] >= 0 )
1446 if( row->
linkpos[pos2] >= 0 )
1477assert(row !=
NULL);
1479assert(col !=
NULL);
1506assert(row !=
NULL);
1535assert(row !=
NULL);
1552#ifdef SCIP_MORE_DEBUG 1555#define ASSERT(x) do { if( !(x) ) abort(); } while( FALSE ) 1557#define ASSERT(x) assert(x) 1573ASSERT(lp !=
NULL);
1575 if( !msgdisp_checklinks )
1577printf(
"LP LINK CHECKING ACTIVATED! THIS IS VERY SLOW!\n");
1578msgdisp_checklinks =
TRUE;
1581 for( i = 0; i < lp->
ncols; ++i )
1583col = lp->
cols[i];
1584ASSERT(col !=
NULL);
1590 for( j = 0; j < col->
len; ++j )
1592row = col->
rows[j];
1593ASSERT(row !=
NULL);
1597ASSERT((j < col->nlprows) == (col->
linkpos[j] >= 0 && row->
lppos>= 0));
1601 for( i = 0; i < lp->
nrows; ++i )
1603row = lp->
rows[i];
1604ASSERT(row !=
NULL);
1610 for( j = 0; j < row->
len; ++j )
1612col = row->
cols[j];
1613ASSERT(col !=
NULL);
1617ASSERT((j < row->nlpcols) == (row->
linkpos[j] >= 0 && col->
lppos>= 0));
1625#define checkLinks(lp) 1640assert(row !=
NULL);
1641assert(col !=
NULL);
1642assert(lp !=
NULL);
1712assert(blkmem !=
NULL);
1713assert(col !=
NULL);
1716assert(row !=
NULL);
1731 if( row->
lppos>= 0 && linkpos >= 0 )
1746col->
rows[pos] = row;
1747col->
vals[pos] = val;
1748col->
linkpos[pos] = linkpos;
1749 if( linkpos == -1 )
1756 if( col->
lppos>= 0 )
1762 if( row->
lppos>= 0 )
1764linkpos = col->
linkpos[pos];
1766assert(0 <= linkpos && linkpos < row->len);
1767assert(row->
cols[linkpos] == col);
1768assert(col->
rows[pos] == row);
1775assert(row->
linkpos[linkpos] == -1);
1777row->
linkpos[linkpos] = pos;
1783 if( col->
lppos>= 0 )
1789 if( linkpos == row->
nlpcols-1 )
1795 if( row->
lppos>= 0 && linkpos >= 0 )
1805assert(col->
rows[col->
len-1] == row);
1812 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to column <%s> (nunlinked=%d)\n",
1829assert(col !=
NULL);
1832assert(0 <= pos && pos < col->len);
1835assert((pos < col->nlprows) == (col->
linkpos[pos] >= 0 && col->
rows[pos]->
lppos>= 0));
1837row = col->
rows[pos];
1838assert((row->
lppos>= 0) == (pos < col->nlprows));
1843 if( col->
linkpos[pos] == -1 )
1847 if( pos < col->nlprows )
1873assert(col !=
NULL);
1875assert(0 <= pos && pos < col->len);
1893col->
vals[pos] = val;
1919assert(row !=
NULL);
1923assert(col !=
NULL);
1929 if( col->
lppos>= 0 )
1939 if( updateidxvals )
1980assert(row->
nummaxval<= 0 || absval <= row->maxval);
1998assert(row !=
NULL);
2002assert(col !=
NULL);
2014 if( forcenormupdate || col->
lppos>= 0 )
2057assert(row !=
NULL);
2059assert(blkmem !=
NULL);
2060assert(col !=
NULL);
2068 SCIPerrorMessage(
"cannot add a coefficient to the locked unmodifiable row <%s>\n", row->
name);
2082 if( col->
lppos>= 0 && linkpos >= 0 )
2097row->
cols[pos] = col;
2099row->
vals[pos] = val;
2100row->
linkpos[pos] = linkpos;
2102 if( linkpos == -1 )
2109 if( row->
lppos>= 0 )
2115 if( col->
lppos>= 0 )
2117linkpos = row->
linkpos[pos];
2119assert(0 <= linkpos && linkpos < col->len);
2120assert(col->
rows[linkpos] == row);
2121assert(row->
cols[pos] == col);
2128assert(col->
linkpos[linkpos] == -1);
2130col->
linkpos[linkpos] = pos;
2136 if( row->
lppos>= 0 )
2142 if( linkpos == col->
nlprows-1 )
2148 if( col->
lppos>= 0 && linkpos >= 0 )
2161assert(row->
cols[row->
len-1] == col);
2174 SCIPsetDebugMsg(
set,
"added coefficient %g * <%s> at position %d (%d/%d) to row <%s> (nunlinked=%d)\n",
2197assert(row !=
NULL);
2199assert(0 <= pos && pos < row->len);
2201assert((pos < row->nlpcols) == (row->
linkpos[pos] >= 0 && row->
cols[pos]->
lppos>= 0));
2203col = row->
cols[pos];
2204val = row->
vals[pos];
2205assert((pos < row->nlpcols) == (col->
lppos>= 0 && row->
linkpos[pos] >= 0));
2212 SCIPerrorMessage(
"cannot delete a coefficient from the locked unmodifiable row <%s>\n", row->
name);
2216 if( row->
linkpos[pos] == -1 )
2220 if( pos < row->nlpcols )
2257assert(row !=
NULL);
2258assert(0 <= pos && pos < row->len);
2265 SCIPerrorMessage(
"cannot change a coefficient of the locked unmodifiable row <%s>\n", row->
name);
2271col = row->
cols[pos];
2283oldval = row->
vals[pos];
2287row->
vals[pos] = val;
2308assert(row !=
NULL);
2309assert(lp !=
NULL);
2363assert(col !=
NULL);
2365assert(blkmem !=
NULL);
2367assert(lp !=
NULL);
2374 for( i = col->
nlprows; i < col->len; ++i )
2377 if( col->
linkpos[i] == -1 )
2406assert(col !=
NULL);
2408assert(blkmem !=
NULL);
2410assert(lp !=
NULL);
2415 for( i = 0; i < col->
len; ++i )
2444assert(row !=
NULL);
2445assert(blkmem !=
NULL);
2447assert(lp !=
NULL);
2454 for( i = row->
nlpcols; i < row->len; ++i )
2457 if( row->
linkpos[i] == -1 )
2484assert(row !=
NULL);
2486assert(lp !=
NULL);
2491 for( i = 0; i < row->
len; ++i )
2524assert(lp !=
NULL);
2525assert(success !=
NULL);
2549 return lpSetIntpar(lp, lpparam, (
int)value, success);
2563assert(lp !=
NULL);
2564assert(success !=
NULL);
2591assert(lp !=
NULL);
2600assert(lpivalue == value);
2627assert(lp !=
NULL);
2636assert(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) 2662assert(lp !=
NULL);
2664assert(success !=
NULL);
2709assert(lp !=
NULL);
2710assert(feastol >= 0.0);
2711assert(success !=
NULL);
2724 if( lp->
nrows> 0 && actualfeastol < lp->lpifeastol )
2752assert(lp !=
NULL);
2753assert(dualfeastol >= 0.0);
2754assert(success !=
NULL);
2767 if( lp->
nrows> 0 && actualdualfeastol < lp->lpidualfeastol )
2795assert(lp !=
NULL);
2796assert(barrierconvtol >= 0.0);
2797assert(success !=
NULL);
2810 if( lp->
nrows> 0 && actualbarrierconvtol < lp->lpibarrierconvtol
2839assert(lp !=
NULL);
2840assert(success !=
NULL);
2864assert(lp !=
NULL);
2865assert(success !=
NULL);
2866assert(0 <= fastmip && fastmip <= 1);
2895assert(lp !=
NULL);
2896assert(success !=
NULL);
2920assert(lp !=
NULL);
2921assert(success !=
NULL);
2945assert(lp !=
NULL);
2946assert(success !=
NULL);
2970assert(lp !=
NULL);
2971assert(success !=
NULL);
2996assert(lp !=
NULL);
2997assert(itlim >= -1);
3032assert(lp !=
NULL);
3055 switch( pricingchar )
3097assert(lp !=
NULL);
3119assert(lp !=
NULL);
3120assert(success !=
NULL);
3144assert(lp !=
NULL);
3145assert(success !=
NULL);
3172assert(lp !=
NULL);
3173assert(success !=
NULL);
3181lptiming = (int) timing;
3203assert(lp !=
NULL);
3204assert(success !=
NULL);
3208 if( randomseed == 0 )
3233assert(lp !=
NULL);
3234assert(success !=
NULL);
3256assert(lp !=
NULL);
3257assert(success !=
NULL);
3291assert(col !=
NULL);
3292assert(blkmem !=
NULL);
3294assert(stat !=
NULL);
3295assert(var !=
NULL);
3297assert(len == 0 || (rows !=
NULL&& vals !=
NULL));
3307 for( i = 0; i < len; ++i )
3309assert(rows[i] !=
NULL);
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;
3383assert(blkmem !=
NULL);
3384assert(col !=
NULL);
3385assert(*col !=
NULL);
3386assert((*col)->var !=
NULL);
3388assert(&(*col)->var->data.col == col);
3389assert((*col)->lppos == -1);
3390assert((*col)->lpipos == -1);
3413assert(col !=
NULL);
3420 if( col->
len== 0 )
3422 for(
r= 0;
r< col->
len; ++
r)
3455assert(lp !=
NULL);
3477assert(col !=
NULL);
3479assert(lp !=
NULL);
3481assert(row !=
NULL);
3490assert(0 <= pos && pos < col->len);
3491assert(col->
rows[pos] == row);
3494 if( col->
linkpos[pos] >= 0 )
3523assert(col !=
NULL);
3524assert(lp !=
NULL);
3526assert(row !=
NULL);
3540assert(0 <= pos && pos < col->len);
3541assert(col->
rows[pos] == row);
3544 if( col->
linkpos[pos] >= 0 )
3574assert(col !=
NULL);
3575assert(lp !=
NULL);
3577assert(row !=
NULL);
3594assert(0 <= pos && pos < col->len);
3595assert(col->
rows[pos] == row);
3598 if( col->
linkpos[pos] >= 0 )
3653quotient = (
REALABS(newvalue)+1.0) / (
REALABS(oldvalue) + 1.0);
3703assert(col !=
NULL);
3707assert(lp !=
NULL);
3762assert(col !=
NULL);
3766assert(lp !=
NULL);
3807assert(col !=
NULL);
3811assert(lp !=
NULL);
3854assert(col !=
NULL);
3857assert(dualsol !=
NULL);
3859redcost = col->
obj;
3860 for( i = 0; i < col->
nlprows; ++i )
3862row = col->
rows[i];
3863assert(row !=
NULL);
3864assert(row->
lppos>= 0);
3865redcost -= col->
vals[i] * dualsol[row->
lppos];
3870 for( i = col->
nlprows; i < col->len; ++i )
3872row = col->
rows[i];
3873assert(row !=
NULL);
3875 if( row->
lppos>= 0 )
3876redcost -= col->
vals[i] * dualsol[row->
lppos];
3882 for( i = col->
nlprows; i < col->len; ++i )
3884row = col->
rows[i];
3885assert(row !=
NULL);
3886assert(row->
lppos== -1);
3887assert(col->
linkpos[i] >= 0);
3905assert(col !=
NULL);
3909redcost = col->
obj;
3910 for( i = 0; i < col->
nlprows; ++i )
3912row = col->
rows[i];
3913assert(row !=
NULL);
3915assert(row->
lppos>= 0);
3916assert(col->
linkpos[i] >= 0);
3922 for( i = col->
nlprows; i < col->len; ++i )
3924row = col->
rows[i];
3925assert(row !=
NULL);
3928 if( row->
lppos>= 0 )
3935 for( i = col->
nlprows; i < col->len; ++i )
3937row = col->
rows[i];
3938assert(row !=
NULL);
3940assert(row->
lppos== -1);
3941assert(col->
linkpos[i] >= 0);
3956assert(col !=
NULL);
3957assert(stat !=
NULL);
3958assert(lp !=
NULL);
3981assert(col !=
NULL);
3983assert(stat !=
NULL);
3984assert(lp !=
NULL);
4037assert(col !=
NULL);
4040assert(dualfarkas !=
NULL);
4043 for( i = 0; i < col->
nlprows; ++i )
4045row = col->
rows[i];
4046assert(row !=
NULL);
4047assert(row->
lppos>= 0);
4048farkas += col->
vals[i] * dualfarkas[row->
lppos];
4053 for( i = col->
nlprows; i < col->len; ++i )
4055row = col->
rows[i];
4056assert(row !=
NULL);
4058 if( row->
lppos>= 0 )
4059farkas += col->
vals[i] * dualfarkas[row->
lppos];
4065 for( i = col->
nlprows; i < col->len; ++i )
4067row = col->
rows[i];
4068assert(row !=
NULL);
4069assert(row->
lppos== -1);
4070assert(col->
linkpos[i] >= 0);
4088assert(col !=
NULL);
4093 for( i = 0; i < col->
nlprows; ++i )
4095row = col->
rows[i];
4096assert(row !=
NULL);
4098assert(row->
lppos>= 0);
4099assert(col->
linkpos[i] >= 0);
4105 for( i = col->
nlprows; i < col->len; ++i )
4107row = col->
rows[i];
4108assert(row !=
NULL);
4111 if( row->
lppos>= 0 )
4118 for( i = col->
nlprows; i < col->len; ++i )
4120row = col->
rows[i];
4121assert(row !=
NULL);
4123assert(row->
lppos== -1);
4124assert(col->
linkpos[i] >= 0);
4139assert(col !=
NULL);
4140assert(stat !=
NULL);
4141assert(lp !=
NULL);
4167assert(col !=
NULL);
4171 if( farkascoef > 0.0 )
4172 returncol->
ub* farkascoef;
4174 returncol->
lb* farkascoef;
4182assert(lp !=
NULL);
4197assert(lp !=
NULL);
4223assert(col !=
NULL);
4229assert(col->
lpipos>= 0);
4230assert(col->
lppos>= 0);
4232assert(stat !=
NULL);
4233assert(lp !=
NULL);
4236assert(lp->
cols[col->
lppos] == col);
4254 if( stat->
nnodes== 1 )
4269assert(col !=
NULL);
4275assert(col->
lpipos>= 0);
4276assert(col->
lppos>= 0);
4278assert(stat !=
NULL);
4279assert(lp !=
NULL);
4282assert(lp->
cols[col->
lppos] == col);
4327assert(col !=
NULL);
4334assert(col->
lpipos>= 0);
4335assert(col->
lppos>= 0);
4337assert(stat !=
NULL);
4338assert(lp !=
NULL);
4345assert(lp->
cols[col->
lppos] == col);
4350assert(lperror !=
NULL);
4361validsblp = stat->
nlps;
4372sbdownvalid =
FALSE;
4380 SCIPsetDebugMsg(
set,
"performing strong branching on variable <%s>(%g) with %d iterations\n",
4407sbdownvalid =
FALSE;
4436 if( iter/2 >= itlim )
4441 if( stat->
nnodes== 1 )
4459 if( downvalid !=
NULL)
4460*downvalid = sbdownvalid;
4461 if( upvalid !=
NULL)
4462*upvalid = sbupvalid;
4513assert(cols !=
NULL);
4515assert(stat !=
NULL);
4516assert(lp !=
NULL);
4522assert(down !=
NULL);
4523assert(up !=
NULL);
4524assert(lperror !=
NULL);
4545 for( j = 0; j < ncols; ++j )
4551assert(lp->
cols[col->
lppos] == col);
4557assert(col->
lpipos>= 0);
4558assert(col->
lppos>= 0);
4575up[j] = col->
sbup;
4576 if( downvalid !=
NULL)
4578 if( upvalid !=
NULL)
4586lpipos[nsubcols] = col->
lpipos;
4587primsols[nsubcols] = col->
primsol;
4589subidx[nsubcols] = j;
4590subcols[nsubcols++] = col;
4594 SCIPsetDebugMsg(
set,
"performing strong branching on %d variables with %d iterations\n", ncols, itlim);
4607 for( j = 0; j < nsubcols; ++j )
4624down[idx] = col->
sbdown;
4625up[idx] = col->
sbup;
4626 if( downvalid !=
NULL)
4628 if( upvalid !=
NULL)
4641 for( j = 0; j < nsubcols; ++j )
4657down[idx] = col->
sbdown;
4658up[idx] = col->
sbup;
4659 if( downvalid !=
NULL)
4661 if( upvalid !=
NULL)
4674 if( iter/2 >= itlim )
4679 if( stat->
nnodes== 1 )
4717assert(col !=
NULL);
4723 if( downvalid !=
NULL)
4725 if( upvalid !=
NULL)
4727 if( solval !=
NULL)
4729 if( lpobjval !=
NULL)
4742assert(col !=
NULL);
4743assert(stat !=
NULL);
4754assert(col !=
NULL);
4755assert(stat !=
NULL);
4756assert(stat->
nnodes> 0);
4776assert(row !=
NULL);
4795 for( i = 0; i < row->
nlpcols; ++i )
4800assert(row->
linkpos[i] >= 0);
4810 for( i = row->
nlpcols; i < row->len; ++i )
4837assert(row !=
NULL);
4850 for( i = 0; i < row->
len; ++i )
4852col = row->
cols[i];
4853assert(col !=
NULL);
4910assert(mindelta <= 0.0);
4911assert(maxdelta >= 0.0);
4913sval = val * scalar;
4914downval = floor(sval);
4919 if( intval !=
NULL)
4925 if( intval !=
NULL)
4967assert(row !=
NULL);
4971assert(-1.0 < minrounddelta && minrounddelta <= 0.0);
4972assert(0.0 <= maxrounddelta && maxrounddelta < 1.0);
4974 SCIPsetDebugMsg(
set,
"scale row <%s> with %g (tolerance=[%g,%g])\n", row->
name, scaleval, minrounddelta, maxrounddelta);
4978mindeltainf =
FALSE;
4979maxdeltainf =
FALSE;
4980oldlen = row->
len;
4989 while( c < row->len )
4991col = row->
cols[c];
4992val = row->
vals[c];
5008newval = val * scaleval;
5010&&
isIntegralScalar(val, scaleval, minrounddelta, maxrounddelta, &intval) )
5014 if( intval < newval )
5016mindelta += (intval - newval)*ub;
5017maxdelta += (intval - newval)*lb;
5023mindelta += (intval - newval)*lb;
5024maxdelta += (intval - newval)*ub;
5046 if( oldlen != row->
len)
5048assert(row->
len== oldlen - 1);
5050oldlen = row->
len;
5069newval = (row->
lhs- row->
constant) * scaleval + mindelta;
5081newval = (row->
rhs- row->
constant) * scaleval + maxdelta;
5126assert(row !=
NULL);
5127assert(blkmem !=
NULL);
5128assert(stat !=
NULL);
5130assert(len == 0 || (cols !=
NULL&& vals !=
NULL));
5139(*row)->integral =
TRUE;
5150 for( i = 0; i < len; ++i )
5152assert(cols[i] !=
NULL);
5155var = cols[i]->
var;
5156(*row)->cols_index[i] = cols[i]->
index;
5157(*row)->linkpos[i] = -1;
5165(*row)->integral =
FALSE;
5171(*row)->cols =
NULL;
5172(*row)->cols_index =
NULL;
5173(*row)->vals =
NULL;
5174(*row)->linkpos =
NULL;
5178(*row)->constant = 0.0;
5183(*row)->sqrnorm = 0.0;
5184(*row)->sumnorm = 0.0;
5185(*row)->objprod = 0.0;
5186(*row)->maxval = 0.0;
5188(*row)->dualsol = 0.0;
5190(*row)->dualfarkas = 0.0;
5194(*row)->origin = origin;
5195(*row)->eventfilter =
NULL;
5196(*row)->index = stat->
nrowidx;
5200(*row)->nlpcols = 0;
5201(*row)->nunlinked = len;
5204(*row)->lpipos = -1;
5205(*row)->lpdepth = -1;
5206(*row)->minidx = INT_MAX;
5207(*row)->maxidx = INT_MIN;
5208(*row)->nummaxval = 0;
5209(*row)->numminval = 0;
5210(*row)->numintcols = -1;
5211(*row)->validactivitylp = -1;
5212(*row)->validpsactivitydomchg = -1;
5213(*row)->validactivitybdsdomchg = -1;
5214(*row)->nlpsaftercreation = 0L;
5215(*row)->activeinlpcounter = 0L;
5218(*row)->obsoletenode = -1;
5219(*row)->fromcutpool =
FALSE;
5221(*row)->lpcolssorted =
TRUE;
5222(*row)->nonlpcolssorted = (len <= 1);
5223(*row)->delaysort =
FALSE;
5224(*row)->validminmaxidx =
FALSE;
5225(*row)->lhschanged =
FALSE;
5226(*row)->rhschanged =
FALSE;
5227(*row)->coefchanged =
FALSE;
5228(*row)->local = local;
5229(*row)->modifiable = modifiable;
5231(*row)->origintype = origintype;
5232(*row)->removable = removable;
5233(*row)->inglobalcutpool =
FALSE;
5234(*row)->storedsolvals =
NULL;
5249assert(cons !=
NULL);
5264assert(blkmem !=
NULL);
5265assert(row !=
NULL);
5266assert(*row !=
NULL);
5267assert((*row)->nuses == 0);
5268assert((*row)->lppos == -1);
5269assert((*row)->eventfilter !=
NULL);
5275assert(cons !=
NULL);
5305assert(row !=
NULL);
5317 if( row->
len== 0 )
5319 for( i = 0; i < row->
len; ++i )
5341assert(row !=
NULL);
5342assert(row->
nuses>= 0);
5343assert(row->
nlocks<= (
unsigned int)(row->
nuses));
5357assert(blkmem !=
NULL);
5358assert(row !=
NULL);
5359assert(*row !=
NULL);
5360assert((*row)->nuses >= 1);
5361assert((*row)->nlocks < (
unsigned int)((*row)->nuses));
5363 SCIPsetDebugMsg(
set,
"release row <%s> with nuses=%d and nlocks=%u\n", (*row)->name, (*row)->nuses, (*row)->nlocks);
5365 if( (*row)->nuses == 0 )
5380assert(row !=
NULL);
5395assert(row !=
NULL);
5401assert(row->
nlocks> 0);
5417assert(lp !=
NULL);
5439assert(row !=
NULL);
5441assert(lp !=
NULL);
5443assert(col !=
NULL);
5453assert(0 <= pos && pos < row->len);
5454assert(row->
cols[pos] == col);
5458 if( row->
linkpos[pos] >= 0 )
5486assert(row !=
NULL);
5488assert(lp !=
NULL);
5490assert(col !=
NULL);
5504assert(0 <= pos && pos < row->len);
5505assert(row->
cols[pos] == col);
5509 if( row->
linkpos[pos] >= 0 )
5538assert(row !=
NULL);
5539assert(lp !=
NULL);
5541assert(col !=
NULL);
5558assert(0 <= pos && pos < row->len);
5559assert(row->
cols[pos] == col);
5563 if( row->
linkpos[pos] >= 0 )
5593assert(row !=
NULL);
5594assert(row->
lhs<= row->
rhs);
5596assert(stat !=
NULL);
5597assert(lp !=
NULL);
5648assert(row !=
NULL);
5649assert(row->
lhs<= row->
rhs);
5651assert(stat !=
NULL);
5652assert(lp !=
NULL);
5673assert(row !=
NULL);
5674assert(lp !=
NULL);
5680oldlhs = row->
lhs;
5705assert(row !=
NULL);
5706assert(lp !=
NULL);
5712oldrhs = row->
rhs;
5733assert(row !=
NULL);
5735row->
local= local;
5776assert(row !=
NULL);
5780assert(maxdnom >= 1);
5781assert(mindelta < 0.0);
5782assert(maxdelta > 0.0);
5783assert(success !=
NULL);
5788 if( intscalar !=
NULL)
5794 for( c = 0; c < row->
len; ++c )
5797col = row->
cols[c];
5798assert(col !=
NULL);
5803val = row->
vals[c];
5806 if( val < mindelta || val > maxdelta )
5809minval =
MIN(minval, absval);
5815 if( intscalar !=
NULL)
5822assert(minval >
MIN(-mindelta, maxdelta));
5829scaleval = 1.0/minval;
5830scalable = (scaleval <= maxscale);
5831 for( c = 0; c < row->
len&& scalable; ++c )
5838val = row->
vals[c];
5840 while( scaleval <= maxscale
5841&& (absval * scaleval < 0.5 || !
isIntegralScalar(val, scaleval, mindelta, maxdelta,
NULL)) )
5854scalable = (scaleval <= maxscale);
5855 SCIPsetDebugMsg(
set,
" -> val=%g, scaleval=%g, val*scaleval=%g, scalable=%u\n", val, scaleval, val*scaleval, scalable);
5862assert(scaleval <= maxscale);
5863 if( intscalar !=
NULL)
5864*intscalar = scaleval;
5866 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (minval=%g)\n", scaleval, minval);
5873twomult = (twomultval <= maxscale);
5874 for( c = 0; c < row->
len&& twomult; ++c )
5881val = row->
vals[c];
5883 while( twomultval <= maxscale
5884&& (absval * twomultval < 0.5 || !
isIntegralScalar(val, twomultval, mindelta, maxdelta,
NULL)) )
5897twomult = (twomultval <= maxscale);
5899val, twomultval, val*twomultval, twomult);
5904assert(twomultval <= maxscale);
5905 if( intscalar !=
NULL)
5906*intscalar = twomultval;
5908 SCIPsetDebugMsg(
set,
" -> integrality can be achieved by scaling with %g (power of 2)\n", twomultval);
5918rational = (maxdnom > 1);
5921 for( c = 0; c < row->
len&& rational; ++c )
5925val = row->
vals[c];
5926rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
5927 if( rational && numerator != 0 )
5929assert(denominator > 0);
5930gcd =
ABS(numerator);
5934val, numerator, denominator, gcd, scm, rational);
5941 for( ++c; c < row->
len&& rational; ++c )
5945val = row->
vals[c];
5946rational =
SCIPrealToRational(val, mindelta, maxdelta, maxdnom, &numerator, &denominator);
5947 if( rational && numerator != 0 )
5949assert(denominator > 0);
5954val, numerator, denominator, gcd, scm, rational);
5963 if( intscalar !=
NULL)
5971assert(!(*success));
5996assert(success !=
NULL);
6000&intscalar, success) );
6005 SCIP_CALL(
rowScale(row, blkmem,
set, eventqueue, stat, lp, intscalar, usecontvars, mindelta, maxdelta) );
6018assert(row !=
NULL);
6026#ifdef SCIP_MORE_DEBUG 6032 for( c = 1; c < row->
nlpcols; ++c )
6034 for( c = row->
nlpcols+ 1; c < row->len; ++c )
6052assert(row !=
NULL);
6077assert(cols !=
NULL);
6078assert(cols_index !=
NULL);
6079assert(vals !=
NULL);
6084assert(row->
linkpos[0] == -1);
6086 for( s = 1; s < row->
len; ++s )
6089assert(row->
linkpos[s] == -1);
6091 if( cols[s] == cols[t] )
6108cols_index[t] = cols_index[s];
6117assert(s == row->
len);
6118assert(t <= row->len);
6134 for( i = 0; i < row->
len; ++i )
6138 for( j = i+1; j < row->
len; ++j )
6139assert(row->
cols[i] != row->
cols[j]);
6150assert(row !=
NULL);
6162assert(row !=
NULL);
6178assert(row !=
NULL);
6179assert(stat !=
NULL);
6182 for( c = 0; c < row->
nlpcols; ++c )
6184col = row->
cols[c];
6185assert(col !=
NULL);
6187assert(col->
lppos>= 0);
6188assert(row->
linkpos[c] >= 0);
6194 for( c = row->
nlpcols; c < row->len; ++c )
6196col = row->
cols[c];
6197assert(col !=
NULL);
6200 if( col->
lppos>= 0 )
6207 for( c = row->
nlpcols; c < row->len; ++c )
6209col = row->
cols[c];
6210assert(col !=
NULL);
6212assert(col->
lppos== -1);
6213assert(row->
linkpos[c] >= 0);
6232assert(row !=
NULL);
6233assert(stat !=
NULL);
6234assert(lp !=
NULL);
6245activity =
MAX(activity, -inf);
6246activity =
MIN(activity, +inf);
6261assert(row !=
NULL);
6265 return MIN(row->
rhs- activity, activity - row->
lhs);
6283assert( row !=
NULL);
6284assert( stat !=
NULL);
6287 for(c = 0; c < row->
nlpcols; ++c)
6289col = row->
cols[c];
6290assert( col !=
NULL);
6291assert( col->
lppos>= 0 );
6293assert( row->
linkpos[c] >= 0 );
6299 for(c = row->
nlpcols; c < row->len; ++c)
6301col = row->
cols[c];
6302assert( col !=
NULL);
6303assert( col->
lppos== -1 || row->
linkpos[c] == -1 );
6304 if( col->
lppos>= 0 )
6314 for(c = row->
nlpcols; c < row->len; ++c)
6316col = row->
cols[c];
6317assert( col !=
NULL);
6318assert( col->
lppos== -1 );
6319assert( row->
linkpos[c] >= 0 );
6324activity =
MAX(activity, -inf);
6325activity =
MIN(activity, +inf);
6327 return MIN(row->
rhs- activity, activity - row->
lhs);
6345assert( row !=
NULL);
6346assert( stat !=
NULL);
6349 for(c = 0; c < row->
nlpcols; ++c)
6351col = row->
cols[c];
6352assert( col !=
NULL);
6353assert( col->
lppos>= 0 );
6355assert( row->
linkpos[c] >= 0 );
6361 for(c = row->
nlpcols; c < row->len; ++c)
6363col = row->
cols[c];
6364assert( col !=
NULL);
6365assert( col->
lppos== -1 || row->
linkpos[c] == -1 );
6366 if( col->
lppos>= 0 )
6376 for(c = row->
nlpcols; c < row->len; ++c)
6378col = row->
cols[c];
6379assert( col !=
NULL);
6380assert( col->
lppos== -1 );
6381assert( row->
linkpos[c] >= 0 );
6386activity =
MAX(activity, -inf);
6387activity =
MIN(activity, +inf);
6389 return MIN(row->
rhs- activity, activity - row->
lhs);
6401assert(row !=
NULL);
6402assert(stat !=
NULL);
6405 for( i = 0; i < row->
len; ++i )
6407col = row->
cols[i];
6408assert(col !=
NULL);
6409assert((i < row->nlpcols) == (row->
linkpos[i] >= 0 && col->
lppos>= 0));
6429assert(row !=
NULL);
6430assert(stat !=
NULL);
6441activity =
MAX(activity, -inf);
6442activity =
MIN(activity, +inf);
6456assert(row !=
NULL);
6460 return MIN(row->
rhs- pseudoactivity, pseudoactivity - row->
lhs);
6477assert(row !=
NULL);
6480 for( i = 0; i < row->
len; ++i )
6482col = row->
cols[i];
6483assert(col !=
NULL);
6484assert((i < row->nlpcols) == (row->
linkpos[i] >= 0 && col->
lppos>= 0));
6489solval = (row->
vals[i] >= 0.0 ? col->
lb: col->
ub);
6491solval = (row->
vals[i] >= 0.0 ? col->
ub: col->
lb);
6493solval = (col->
lb+ col->
ub)/2.0;
6495activity += row->
vals[i] * solval;
6499activity =
MAX(activity, -inf);
6500activity =
MIN(activity, +inf);
6515assert(row !=
NULL);
6519 return MIN(row->
rhs- activity, activity - row->
lhs);
6536assert(row !=
NULL);
6538assert(stat !=
NULL);
6541mininfinite =
FALSE;
6542maxinfinite =
FALSE;
6545 for( i = 0; i < row->
len&& (!mininfinite || !maxinfinite); ++i )
6547col = row->
cols[i];
6548assert(col !=
NULL);
6549assert((i < row->nlpcols) == (row->
linkpos[i] >= 0 && col->
lppos>= 0));
6550val = row->
vals[i];
6602assert(row !=
NULL);
6603assert(stat !=
NULL);
6623assert(row !=
NULL);
6624assert(stat !=
NULL);
6644assert(row !=
NULL);
6674assert(row !=
NULL);
6679assert(row->
maxval>= 0.0 || row->
len== 0);
6690assert(row !=
NULL);
6695assert(row->
minval>= 0.0 || row->
len== 0);
6706assert(row !=
NULL);
6710assert(row->
maxidx>= 0 || row->
len== 0);
6722assert(row !=
NULL);
6726assert(row->
minidx>= 0 || row->
len== 0);
6738assert(row !=
NULL);
6760assert(sol !=
NULL);
6771 for( k = 0; k < lp->
ncols; ++k )
6780scale = 1.0 / sqrt(scale);
6782 for( k = 0; k < lp->
ncols; ++k )
6787solcutoffdist = 0.0;
6788 for( k = 0; k < row->
nlpcols; ++k )
6791 for( k = row->
nlpcols; k < row->len; ++k )
6798solcutoffdist =
set->num_sumepsilon;
6802 returnsolcutoffdist;
6819 switch(
set->sepa_efficacynorm )
6831norm = (row->
len== 0 ? 0.0 : 1.0);
6843 return-feasibility / norm;
6876 switch(
set->sepa_efficacynorm )
6888norm = (row->
len== 0 ? 0.0 : 1.0);
6900 return-feasibility / norm;
6934 switch(
set->sepa_efficacynorm )
6946norm = (row->
len== 0 ? 0.0 : 1.0);
6958 return-feasibility / norm;
6974 switch(
set->sepa_efficacynorm )
6986norm = (row->
len== 0 ? 0.0 : 1.0);
6998 return-feasibility / norm;
7017assert(row1 !=
NULL);
7018assert(row2 !=
NULL);
7072 while( i1 < row1->nlpcols && i2 < row2->len )
7074assert(row1->
cols[i1] != row2->
cols[i2]);
7083assert(i1 == row1->
nlpcols|| i2 == row2->
len);
7087 while( i1 < row1->len && i2 < row2->nlpcols )
7089assert(row1->
cols[i1] != row2->
cols[i2]);
7098assert(i1 == row1->
len|| i2 == row2->
nlpcols);
7119 while( i1 >= 0 && i2 >= 0 )
7121assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7122assert(row2->
cols[i2]->
index== row2colsidx[i2]);
7123assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7124 if( row1colsidx[i1] < row2colsidx[i2] )
7126 else if( row1colsidx[i1] > row2colsidx[i2] )
7130scalarprod += row1->
vals[i1] * row2->
vals[i2];
7158 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7160assert(row1->
cols[ilp1]->
index== row1colsidx[ilp1]);
7161assert(row1->
cols[inlp1]->
index== row1colsidx[inlp1]);
7162assert(row2->
cols[ilp2]->
index== row2colsidx[ilp2]);
7163assert(row2->
cols[inlp2]->
index== row2colsidx[inlp2]);
7164assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7165assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7166assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7167assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7170 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7172scalarprod += row1->
vals[ilp1] * row2->
vals[ilp2];
7177 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7179scalarprod += row1->
vals[ilp1] * row2->
vals[inlp2];
7184 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7186scalarprod += row1->
vals[inlp1] * row2->
vals[ilp2];
7191 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos>= 0 )
7193scalarprod += row1->
vals[inlp1] * row2->
vals[inlp2];
7198 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7200 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7202 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7209 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7217 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7219 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7226 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7238 if( ilp1 != row1->
nlpcols&& inlp1 != row1->
len)
7243assert(ilp2 == row2->
nlpcols|| inlp2 == row2->
len);
7266assert(inlp1 == row1->
len);
7276 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7278assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7279assert(row2->
cols[ilp2]->
index== row2colsidx[ilp2]);
7280assert(row2->
cols[inlp2]->
index== row2colsidx[inlp2]);
7281assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7282assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7285 if( row1colsidx[i1] == row2colsidx[ilp2] )
7287scalarprod += row1->
vals[i1] * row2->
vals[ilp2];
7292 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos>= 0) )
7294scalarprod += row1->
vals[i1] * row2->
vals[inlp2];
7299 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7301 if( row1colsidx[i1] < row2colsidx[ilp2] )
7308 if( row1colsidx[i1] < row2colsidx[inlp2] )
7329assert(inlp2 == row2->
len);
7336 while( i1 < end1 && i2 < end2 )
7338assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7339assert(row2->
cols[i2]->
index== row2colsidx[i2]);
7340assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7343 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos>= 0) )
7345scalarprod += row1->
vals[i1] * row2->
vals[i2];
7350 else if( row1colsidx[i1] < row2colsidx[i2] )
7374assert(row1 !=
NULL);
7375assert(row2 !=
NULL);
7429 while( i1 < row1->nlpcols && i2 < row2->len )
7431assert(row1->
cols[i1] != row2->
cols[i2]);
7440assert(i1 == row1->
nlpcols|| i2 == row2->
len);
7444 while( i1 < row1->len && i2 < row2->nlpcols )
7446assert(row1->
cols[i1] != row2->
cols[i2]);
7455assert(i1 == row1->
len|| i2 == row2->
nlpcols);
7476 while( i1 >= 0 && i2 >= 0 )
7478assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7479assert(row2->
cols[i2]->
index== row2colsidx[i2]);
7480assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7481 if( row1colsidx[i1] < row2colsidx[i2] )
7483 else if( row1colsidx[i1] > row2colsidx[i2] )
7515 while( ilp1 < row1->nlpcols && inlp1 < row1->len && ilp2 < row2->nlpcols && inlp2 < row2->len )
7517assert(row1->
cols[ilp1]->
index== row1colsidx[ilp1]);
7518assert(row1->
cols[inlp1]->
index== row1colsidx[inlp1]);
7519assert(row2->
cols[ilp2]->
index== row2colsidx[ilp2]);
7520assert(row2->
cols[inlp2]->
index== row2colsidx[inlp2]);
7521assert((row1->
cols[ilp1] == row2->
cols[ilp2]) == (row1colsidx[ilp1] == row2colsidx[ilp2]));
7522assert((row1->
cols[ilp1] == row2->
cols[inlp2]) == (row1colsidx[ilp1] == row2colsidx[inlp2]));
7523assert((row1->
cols[inlp1] == row2->
cols[ilp2]) == (row1colsidx[inlp1] == row2colsidx[ilp2]));
7524assert((row1->
cols[inlp1] == row2->
cols[inlp2]) == (row1colsidx[inlp1] == row2colsidx[inlp2]));
7527 if( row1colsidx[ilp1] == row2colsidx[ilp2] )
7534 else if( row1colsidx[ilp1] == row2colsidx[inlp2] )
7541 else if( row1colsidx[inlp1] == row2colsidx[ilp2] )
7548 else if( row1colsidx[inlp1] == row2colsidx[inlp2] && row1->
cols[inlp1]->
lppos>= 0 )
7555 else if( row1colsidx[ilp1] < row1colsidx[inlp1] )
7557 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7559 if( row1colsidx[ilp1] < row2colsidx[ilp2] )
7566 if( row1colsidx[ilp1] < row2colsidx[inlp2] )
7574 if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7576 if( row1colsidx[inlp1] < row2colsidx[ilp2] )
7583 if( row1colsidx[inlp1] < row2colsidx[inlp2] )
7595 if( ilp1 != row1->
nlpcols&& inlp1 != row1->
len)
7600assert(ilp2 == row2->
nlpcols|| inlp2 == row2->
len);
7623assert(inlp1 == row1->
len);
7633 while( i1 < end1 && ilp2 < row2->nlpcols && inlp2 < row2->len )
7635assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7636assert(row2->
cols[ilp2]->
index== row2colsidx[ilp2]);
7637assert(row2->
cols[inlp2]->
index== row2colsidx[inlp2]);
7638assert((row1->
cols[i1] == row2->
cols[ilp2]) == (row1colsidx[i1] == row2colsidx[ilp2]));
7639assert((row1->
cols[i1] == row2->
cols[inlp2]) == (row1colsidx[i1] == row2colsidx[inlp2]));
7642 if( row1colsidx[i1] == row2colsidx[ilp2] )
7649 else if( row1colsidx[i1] == row2colsidx[inlp2] && (lpcols || row1->
cols[i1]->
lppos>= 0) )
7656 else if( row2colsidx[ilp2] < row2colsidx[inlp2] )
7658 if( row1colsidx[i1] < row2colsidx[ilp2] )
7665 if( row1colsidx[i1] < row2colsidx[inlp2] )
7686assert(inlp2 == row2->
len);
7693 while( i1 < end1 && i2 < end2 )
7695assert(row1->
cols[i1]->
index== row1colsidx[i1]);
7696assert(row2->
cols[i2]->
index== row2colsidx[i2]);
7697assert((row1->
cols[i1] == row2->
cols[i2]) == (row1colsidx[i1] == row2colsidx[i2]));
7700 if( row1colsidx[i1] == row2colsidx[i2] && (lpcols || row1->
cols[i1]->
lppos>= 0) )
7707 else if( row1colsidx[i1] < row2colsidx[i2] )
7731 switch( orthofunc )
7735 if( scalarprod == 0.0 )
7749 for( i = 0; i < row1->
len; ++i )
7759 for( i = 0; i < row2->
len; ++i )
7774 SCIPerrorMessage(
"invalid orthogonality function parameter '%c'\n", orthofunc);
7807assert(row !=
NULL);
7808assert(lp !=
NULL);
7824parallelism =
MIN(parallelism, 1.0);
7825parallelism =
MAX(parallelism, 0.0);
7841assert(row !=
NULL);
7847eventtype, row->
name, (
void*)eventhdlr, (
void*)eventdata);
7865assert(row !=
NULL);
7868 SCIPsetDebugMsg(
set,
"drop event of row <%s> with handler %p and data %p\n", row->
name, (
void*)eventhdlr, (
void*)eventdata);
7881assert(row !=
NULL);
7882assert(stat !=
NULL);
7883assert(stat->
nnodes> 0);
7899assert(col !=
NULL);
7921assert(lp !=
NULL);
7977assert(lp !=
NULL);
7979assert(col !=
NULL);
7980assert(lb !=
NULL);
7981assert(ub !=
NULL);
8027assert(lp !=
NULL);
8029assert(blkmem !=
NULL);
8047 for( c = lp->
nlpicols; c < lp->ncols; ++c )
8048naddcoefs += lp->
cols[c]->
len;
8049assert(naddcols > 0);
8062 for( pos = 0, c = lp->
nlpicols; c < lp->ncols; ++pos, ++c )
8064col = lp->
cols[c];
8065assert(col !=
NULL);
8069assert(col->
lppos== c);
8070assert(nnonz + col->
nlprows<= naddcoefs);
8097obj[pos] = col->
obj;
8109 for( i = 0; i < col->
nlprows; ++i )
8115assert(lpipos < lp->nrows);
8116assert(nnonz < naddcoefs);
8117ind[nnonz] = lpipos;
8118val[nnonz] = col->
vals[i];
8123 for( i = col->
nlprows; i < col->len; ++i )
8165assert(row !=
NULL);
8183assert(lp !=
NULL);
8249assert(lp !=
NULL);
8251assert(blkmem !=
NULL);
8267 for(
r= lp->
nlpirows; r < lp->nrows; ++
r)
8268naddcoefs += lp->
rows[
r]->
len;
8269assert(naddrows > 0);
8281 for( pos = 0,
r= lp->
nlpirows; r < lp->nrows; ++pos, ++
r)
8283row = lp->
rows[
r];
8284assert(row !=
NULL);
8285assert(row->
lppos==
r);
8286assert(nnonz + row->
nlpcols<= naddcoefs);
8316name[pos] = row->
name;
8322 for( i = 0; i < row->
nlpcols; ++i )
8328assert(lpipos < lp->ncols);
8329assert(nnonz < naddcoefs);
8331ind[nnonz] = lpipos;
8332val[nnonz] = row->
vals[i];
8338 for( i = row->
nlpcols; i < row->len; ++i )
8393assert(lp !=
NULL);
8411 for( i = 0; i < lp->
nchgcols; ++i )
8414assert(col !=
NULL);
8443newobj = col->
obj;
8446assert(nobjchg < lp->ncols);
8447objind[nobjchg] = col->
lpipos;
8448obj[nobjchg] = newobj;
8465assert(nbdchg < lp->ncols);
8466bdind[nbdchg] = col->
lpipos;
8483 SCIPsetDebugMsg(
set,
"flushing objective changes: change %d objective values of %d changed columns\n", nobjchg, lp->
nchgcols);
8538assert(lp !=
NULL);
8553 for( i = 0; i < lp->
nchgrows; ++i )
8556assert(row !=
NULL);
8581assert(nchg < lp->nrows);
8582ind[nchg] = row->
lpipos;
8631assert(lp !=
NULL);
8638 for( i = 0; i < lp->
ncols; ++i )
8651 if( nintegers > 0 )
8677assert(lp !=
NULL);
8678assert(blkmem !=
NULL);
8680 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",
8724assert(ncols == lp->
ncols);
8725assert(nrows == lp->
nrows);
8743assert(lp !=
NULL);
8776 for( i = 0; i < lp->
nchgcols; ++i )
8781assert(col !=
NULL);
8815 for( i = 0; i < lp->
nchgrows; ++i )
8820assert(row !=
NULL);
8870assert(col !=
NULL);
8871assert(col->
lppos>= 0);
8874 for( i = 0; i < col->
len; ++i )
8879row = col->
rows[i];
8880assert(row !=
NULL);
8881assert(row->
linkpos[pos] == i);
8882assert(row->
cols[pos] == col);
8883assert(row->
nlpcols<= pos && pos < row->len);
8890 if( pos == row->
nlpcols-1 )
8909assert(row !=
NULL);
8910assert(row->
lppos>= 0);
8913 for( i = 0; i < row->
len; ++i )
8918col = row->
cols[i];
8919assert(col !=
NULL);
8920assert(col->
linkpos[pos] == i);
8921assert(col->
rows[pos] == row);
8922assert(col->
nlprows<= pos && pos < col->len);
8928 if( pos == col->
nlprows-1 )
8945assert(col !=
NULL);
8946assert(col->
lppos== -1);
8949 for( i = 0; i < col->
len; ++i )
8954row = col->
rows[i];
8955assert(row !=
NULL);
8956assert(row->
linkpos[pos] == i);
8957assert(row->
cols[pos] == col);
8958assert(0 <= pos && pos < row->nlpcols);
8983assert(row !=
NULL);
8984assert(row->
lppos== -1);
8987 for( i = 0; i < row->
len; ++i )
8992col = row->
cols[i];
8993assert(col !=
NULL);
8994assert(0 <= pos && pos < col->nlprows);
8995assert(col->
linkpos[pos] == i);
8996assert(col->
rows[pos] == row);
9014assert(lp !=
NULL);
9020assert(initsize > 0);
9037assert(lp !=
NULL);
9043assert(minsize > 0);
9045 if( minsize <= lp->divechgsidessize )
9061assert(lp !=
NULL);
9074#define DIVESTACKINITSIZE 100 9087assert(lp !=
NULL);
9089assert(stat !=
NULL);
9090assert(name !=
NULL);
9097(*lp)->lpicols =
NULL;
9098(*lp)->lpirows =
NULL;
9099(*lp)->chgcols =
NULL;
9100(*lp)->chgrows =
NULL;
9101(*lp)->cols =
NULL;
9102(*lp)->soldirection =
NULL;
9103(*lp)->lazycols =
NULL;
9104(*lp)->rows =
NULL;
9105(*lp)->lpobjval = 0.0;
9106(*lp)->glbpseudoobjval = 0.0;
9107(*lp)->relglbpseudoobjval = 0.0;
9108(*lp)->glbpseudoobjvalid =
TRUE;
9109(*lp)->glbpseudoobjvalinf = 0;
9110(*lp)->pseudoobjval = 0.0;
9111(*lp)->relpseudoobjval = 0.0;
9112(*lp)->pseudoobjvalid =
TRUE;
9113(*lp)->pseudoobjvalinf = 0;
9114(*lp)->looseobjval = 0.0;
9115(*lp)->rellooseobjval = 0.0;
9116(*lp)->looseobjvalid =
TRUE;
9117(*lp)->looseobjvalinf = 0;
9118(*lp)->nloosevars = 0;
9124(*lp)->validdegeneracylp = -1;
9125(*lp)->objsqrnorm = 0.0;
9126(*lp)->objsumnorm = 0.0;
9127(*lp)->lpicolssize = 0;
9128(*lp)->nlpicols = 0;
9129(*lp)->lpirowssize = 0;
9130(*lp)->nlpirows = 0;
9131(*lp)->lpifirstchgcol = 0;
9132(*lp)->lpifirstchgrow = 0;
9133(*lp)->colssize = 0;
9134(*lp)->soldirectionsize = 0;
9136(*lp)->lazycolssize = 0;
9137(*lp)->nlazycols = 0;
9138(*lp)->rowssize = 0;
9140(*lp)->chgcolssize = 0;
9141(*lp)->nchgcols = 0;
9142(*lp)->chgrowssize = 0;
9143(*lp)->nchgrows = 0;
9144(*lp)->firstnewcol = 0;
9145(*lp)->firstnewrow = 0;
9146(*lp)->nremovablecols = 0;
9147(*lp)->nremovablerows = 0;
9148(*lp)->validsollp = stat->
lpcount;
9149(*lp)->validfarkaslp = -1;
9150(*lp)->validsoldirlp = -1;
9151(*lp)->validsoldirsol =
NULL;
9152(*lp)->objsqrnormunreliable =
FALSE;
9153(*lp)->flushdeletedcols =
FALSE;
9154(*lp)->flushaddedcols =
FALSE;
9155(*lp)->flushdeletedrows =
FALSE;
9156(*lp)->flushaddedrows =
FALSE;
9157(*lp)->updateintegrality =
TRUE;
9158(*lp)->flushed =
TRUE;
9160(*lp)->solved =
TRUE;
9161(*lp)->primalfeasible =
TRUE;
9162(*lp)->primalchecked =
TRUE;
9163(*lp)->dualfeasible =
TRUE;
9164(*lp)->dualchecked =
TRUE;
9165(*lp)->solisbasic =
FALSE;
9166(*lp)->rootlpisrelax =
TRUE;
9167(*lp)->isrelax =
TRUE;
9168(*lp)->installing =
FALSE;
9169(*lp)->strongbranching =
FALSE;
9170(*lp)->strongbranchprobing =
FALSE;
9171(*lp)->probing =
FALSE;
9172(*lp)->diving =
FALSE;
9173(*lp)->divingobjchg =
FALSE;
9174(*lp)->divinglazyapplied =
FALSE;
9175(*lp)->divelpistate =
NULL;
9176(*lp)->divelpwasprimfeas =
TRUE;
9177(*lp)->divelpwasprimchecked =
TRUE;
9178(*lp)->divelpwasdualfeas =
TRUE;
9179(*lp)->divelpwasdualchecked =
TRUE;
9180(*lp)->divechgsides =
NULL;
9181(*lp)->divechgsidetypes =
NULL;
9182(*lp)->divechgrows =
NULL;
9183(*lp)->ndivechgsides = 0;
9184(*lp)->divechgsidessize = 0;
9185(*lp)->ndivingrows = 0;
9186(*lp)->divinglpiitlim = INT_MAX;
9187(*lp)->resolvelperror =
FALSE;
9188(*lp)->divenolddomchgs = 0;
9189(*lp)->adjustlpval =
FALSE;
9191(*lp)->lpifeastol = (*lp)->feastol;
9194(*lp)->lpifromscratch =
FALSE;
9195(*lp)->lpifastmip =
set->lp_fastmip;
9196(*lp)->lpiscaling =
set->lp_scaling;
9197(*lp)->lpipresolving =
set->lp_presolving;
9198(*lp)->lpilpinfo =
set->disp_lpinfo;
9199(*lp)->lpirowrepswitch =
set->lp_rowrepswitch;
9200(*lp)->lpisolutionpolishing = (
set->lp_solutionpolishing > 0);
9201(*lp)->lpirefactorinterval =
set->lp_refactorinterval;
9202(*lp)->lpiconditionlimit =
set->lp_conditionlimit;
9203(*lp)->lpimarkowitz =
set->lp_markowitz;
9204(*lp)->lpiitlim = INT_MAX;
9207(*lp)->lpithreads =
set->lp_threads;
9208(*lp)->lpitiming = (int)
set->time_clocktype;
9209(*lp)->lpirandomseed =
set->random_randomseed;
9210(*lp)->storedsolvals =
NULL;
9220 "LP Solver <%s>: objective limit cannot be set -- can lead to unnecessary simplex iterations\n",
9224(*lp)->lpihasfeastol = success;
9228 "LP Solver <%s>: primal feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9232(*lp)->lpihasdualfeastol = success;
9236 "LP Solver <%s>: dual feasibility tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9240(*lp)->lpihasbarrierconvtol = success;
9244 "LP Solver <%s>: barrier convergence tolerance cannot be set -- tolerance of SCIP and LP solver may differ\n",
9249(*lp)->lpihasfastmip = success;
9253 "LP Solver <%s>: fastmip setting not available -- SCIP parameter has no effect\n",
9257(*lp)->lpihasscaling = success;
9261 "LP Solver <%s>: scaling not available -- SCIP parameter has no effect\n",
9265(*lp)->lpihaspresolving = success;
9269 "LP Solver <%s>: presolving not available -- SCIP parameter has no effect\n",
9276 "LP Solver <%s>: clock type cannot be set\n",
9283 "LP Solver <%s>: iteration limit cannot be set -- can lead to unnecessary simplex iterations\n",
9290 "LP Solver <%s>: pricing strategy cannot be set -- SCIP parameter has no effect\n",
9297 "LP Solver <%s>: lpinfo setting not available -- SCIP parameter has no effect\n",
9301(*lp)->lpihasrowrep = success;
9305 "LP Solver <%s>: row representation of the basis not available -- SCIP parameter lp/rowrepswitch has no effect\n",
9309(*lp)->lpihaspolishing = success;
9313 "LP Solver <%s>: solution polishing not available -- SCIP parameter lp/solutionpolishing has no effect\n",
9317(*lp)->lpihasrefactor = success;
9321 "LP Solver <%s>: refactorization interval not available -- SCIP parameter lp/refactorinterval has no effect\n",
9328 "LP Solver <%s>: condition number limit for the basis not available -- SCIP parameter lp/conditionlimit has no effect\n",
9335 "LP Solver <%s>: markowitz threshhold not available -- SCIP parameter lp/minmarkowitz has no effect\n",
9342 "LP Solver <%s>: number of threads settings not available -- SCIP parameter has no effect\n",
9346 if( (*lp)->lpirandomseed != 0 )
9352 "LP Solver <%s>: random seed parameter not available -- SCIP parameter has no effect\n",
9361 SCIPerrorMessage(
"The infinity value of the LP solver has to be at least as large as the one of SCIP.\n");
9379assert(lp !=
NULL);
9380assert(*lp !=
NULL);
9387 for( i = 0; i < (*lp)->nlpirows; ++i )
9392 if( (*lp)->lpi !=
NULL)
9424assert(stat !=
NULL);
9456assert(lp !=
NULL);
9458assert(col !=
NULL);
9460assert(col->
lppos== -1);
9471 for( i = 0; i < col->
len; ++i )
9518assert(lp !=
NULL);
9519assert(row !=
NULL);
9521assert(row->
lppos== -1);
9531 for( i = 0; i < row->
len; ++i )
9588assert(lp !=
NULL);
9598 for( c = 0; c < lp->
ncols; ++c )
9611 for( c = 0; c < lp->
ncols; ++c )
9628#define checkLazyColArray(lp, set) 9641assert(lp !=
NULL);
9644assert(0 <= newncols);
9645assert(newncols <= lp->ncols);
9647 if( newncols < lp->ncols )
9651 for( c = lp->
ncols-1; c >= newncols; --c )
9653col = lp->
cols[c];
9654assert(col !=
NULL);
9659assert(col->
lppos== c);
9676assert(lp->
ncols== newncols);
9681 while( c < lp->nlazycols )
9716assert(lp !=
NULL);
9717assert(0 <= newnrows && newnrows <= lp->nrows);
9720 if( newnrows < lp->nrows )
9722 for(
r= lp->
nrows-1;
r>= newnrows; --
r)
9724row = lp->
rows[
r];
9725assert(row !=
NULL);
9727assert(row->
lppos==
r);
9756assert(lp->
nrows== newnrows);
9778assert(lp !=
NULL);
9793assert(lp !=
NULL);
9807assert(lp !=
NULL);
9820assert(lp !=
NULL);
9824assert(basisind !=
NULL);
9838assert(lp !=
NULL);
9858assert(lp !=
NULL);
9862assert(0 <=
r&& r < lp->nrows);
9863assert(coef !=
NULL);
9884assert(lp !=
NULL);
9888assert(0 <= c && c < lp->nrows);
9889assert(coef !=
NULL);
9907assert(lp !=
NULL);
9911assert(0 <=
r&& r < lp->nrows);
9912assert(coef !=
NULL);
9931assert(lp !=
NULL);
9935assert(0 <= c && c < lp->ncols);
9936assert(coef !=
NULL);
9963assert(lp !=
NULL);
9964assert(prob !=
NULL);
9965assert(weights !=
NULL);
9966assert(sumcoef !=
NULL);
9967assert(sumlhs !=
NULL);
9968assert(sumrhs !=
NULL);
9976lhsinfinite =
FALSE;
9977rhsinfinite =
FALSE;
9978 for(
r= 0;
r< lp->
nrows; ++
r)
9982row = lp->
rows[
r];
9983assert(row !=
NULL);
9989 for( i = 0; i < row->
len; ++i )
9997assert(0 <= idx && idx < prob->nvars);
10002 if( weights[
r] > 0.0 )
10005 if( !lhsinfinite )
10006(*sumlhs) += weights[
r] * (row->
lhs- row->
constant);
10008 if( !rhsinfinite )
10009(*sumrhs) += weights[
r] * (row->
rhs- row->
constant);
10014 if( !lhsinfinite )
10015(*sumlhs) += weights[
r] * (row->
rhs- row->
constant);
10017 if( !rhsinfinite )
10018(*sumrhs) += weights[
r] * (row->
lhs- row->
constant);
10038assert(lp !=
NULL);
10041assert(blkmem !=
NULL);
10042assert(lpistate !=
NULL);
10069assert(lp !=
NULL);
10070assert(blkmem !=
NULL);
10080 if( lpistate ==
NULL)
10105assert(lp !=
NULL);
10107 if( *lpistate !=
NULL)
10121assert(lp !=
NULL);
10138assert(lp !=
NULL);
10141assert(blkmem !=
NULL);
10142assert(lpinorms !=
NULL);
10162assert(lp !=
NULL);
10163assert(blkmem !=
NULL);
10167 if( lpinorms !=
NULL)
10182assert(lp !=
NULL);
10194assert(lp !=
NULL);
10207assert(lp !=
NULL);
10249assert(lp !=
NULL);
10261assert(lp !=
NULL);
10262assert(newfeastol > 0.0);
10267 if( newfeastol < lp->feastol )
10285assert(lp !=
NULL);
10304 return "primal simplex";
10306 return "dual simplex";
10310 return "barrier/crossover";
10334assert(lp !=
NULL);
10337assert(stat !=
NULL);
10338assert(lperror !=
NULL);
10345#ifdef SCIP_MORE_DEBUG 10351 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (primal simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10415 if( iterations > 0 )
10425 SCIPstatAdd(stat,
set, nprimalresolvelpiterations, iterations);
10460 if( keepsol && !(*lperror) )
10492assert(lp !=
NULL);
10495assert(stat !=
NULL);
10496assert(lperror !=
NULL);
10503#ifdef SCIP_MORE_DEBUG 10509 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (dual simplex, objlim=%.15g, feastol=%.15g/%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
10573 if( iterations > 0 )
10618 if( keepsol && !(*lperror) )
10680 inttotalIterations;
10685assert(lp !=
NULL);
10688assert(stat !=
NULL);
10689assert(lperror !=
NULL);
10724totalIterations = iterations;
10742 if( iterations > 0 )
10816chooseBasic =
set->lp_lexdualbasic;
10862 for( c = 0; c < lp->
nlpicols; ++c )
10869fixedc[c] =
FALSE;
10875indallrow[
r] =
r;
10877fixedr[
r] =
TRUE;
10882#ifdef DEBUG_LEXDUAL 10886 if( !chooseBasic )
10888assert(primsol ==
NULL);
10891assert(primsol !=
NULL);
10895 for( j = 0; j < lp->
nlpicols; ++j )
10928 if( !chooseBasic )
10931assert(primsol ==
NULL);
10955assert(primsol ==
NULL);
10966 for( c = 0; c < lp->
nlpicols; ++c )
10974 if( pos == -1 && c > oldpos )
10987 if( pos == -1 && c > oldpos )
10992newlb[cntcol] = oldlb[c];
10993newub[cntcol] = oldlb[c];
10994indcol[cntcol++] = c;
10999 if( !chooseBasic )
11009newlb[cntcol] = oldlb[c];
11010newub[cntcol] = oldlb[c];
11016newlb[cntcol] = oldub[c];
11017newub[cntcol] = oldub[c];
11022newlb[cntcol] = 0.0;
11023newub[cntcol] = 0.0;
11026indcol[cntcol++] = c;
11037 if( !fixedr[
r] )
11050newlhs[cntrow] = oldlhs[
r];
11051newrhs[cntrow] = oldlhs[
r];
11056newlhs[cntrow] = oldrhs[
r];
11057newrhs[cntrow] = oldrhs[
r];
11059indrow[cntrow++] =
r;
11060fixedr[
r] =
TRUE;
11066 if( nDualDeg > 0 && pos >= 0 )
11068assert(0 <= pos && pos < lp->nlpicols && pos > oldpos);
11100lexIterations += iterations;
11102#ifdef DEBUG_LEXDUAL 11103 if( iterations > 0 )
11107 if( !chooseBasic )
11109assert(primsol ==
NULL);
11112assert(primsol !=
NULL);
11115 for( j = 0; j < lp->
nlpicols; ++j )
11123 charcstart =
'[';
11157 if( !chooseBasic )
11160assert(primsol ==
NULL);
11166 if( iterations > 0 )
11171 while( pos >= 0 && nDualDeg > 0 && (
set->lp_lexdualmaxrounds == -1 || rounds < set->lp_lexdualmaxrounds) );
11197lexIterations += iterations;
11205 if( lexIterations > 0 )
11211 SCIPstatAdd(stat,
set, nlexdualresolvelpiterations, lexIterations);
11216totalIterations += lexIterations;
11263 if( keepsol && !(*lperror) )
11291assert(lp !=
NULL);
11294assert(stat !=
NULL);
11295assert(lperror !=
NULL);
11303#ifdef SCIP_MORE_DEBUG 11309 SCIPsetDebugMsg(
set,
"wrote LP to file <%s> (barrier, objlim=%.15g, feastol=%.15g/%.15g, convtol=%.15g, fromscratch=%d, fastmip=%d, scaling=%d, presolving=%d)\n",
11362 if( iterations > 0 )
11397 if( keepsol && !(*lperror) )
11430assert(lp !=
NULL);
11432assert(lperror !=
NULL);
11436 if(
set->istimelimitfinite )
11440 if( lptimelimit > 0.0 )
11443 if( lptimelimit <= 0.0 || !success )
11445 SCIPsetDebugMsg(
set,
"time limit of %f seconds could not be set\n", lptimelimit);
11446*lperror = ((lptimelimit > 0.0) ?
TRUE:
FALSE);
11447*timelimit =
TRUE;
11461 if(
set->lp_lexdualalgo && (!
set->lp_lexdualrootonly || stat->
maxdepth== 0) && (!
set->lp_lexdualstalling || lp->
installing) )
11498#define MAXNUMTROUBLELPMSGS 10 11512 const char* formatstr,
11535 if( verblevel >
set->disp_verblevel )
11545va_start(ap, formatstr);
11552 SCIPmessagePrintInfo(messagehdlr,
" -- further messages will be suppressed (use display/verblevel=5 to see all)");
11569assert(lp !=
NULL);
11577 if( !
set->lp_checkdualfeas )
11579 if( !
set->lp_checkprimfeas )
11586#define FEASTOLTIGHTFAC 0.001 11616assert(lp !=
NULL);
11619assert(stat !=
NULL);
11620assert(lperror !=
NULL);
11621assert(timelimit !=
NULL);
11632 SCIPerrorMessage(
"cannot solve LP when loose variable with infinite best bound is present\n");
11640itlimishard = (itlim == harditlim);
11646usepolishing =
TRUE;
11653usepolishing =
FALSE;
11695 if( !
set->lp_checkstability )
11722 if( !
set->lp_checkstability )
11742 lpalgoName(lpalgo), (scaling == 0) ?
"with":
"without");
11749 if( !
set->lp_checkstability )
11772 lpalgoName(lpalgo), !
set->lp_presolving ?
"with":
"without");
11779 if( !
set->lp_checkstability )
11796 if( ((simplex && (!tightprimfeastol || !tightdualfeastol)) || (!tightprimfeastol && !tightdualfeastol)) &&
11800 if( !tightprimfeastol )
11806 if( !tightdualfeastol )
11812 if( !simplex && !tightprimfeastol && !tightdualfeastol )
11818 if( success || success2 || success3 )
11828 if( !
set->lp_checkstability )
11837 if( !tightprimfeastol )
11841 if( !tightdualfeastol )
11845 if( !simplex && !tightprimfeastol && !tightdualfeastol )
11857 if( !fromscratch && simplex )
11869 if( !
set->lp_checkstability )
11890 if( !
set->lp_checkstability )
11903 lpalgoName(lpalgo), (scaling == 0) ?
"with":
"without");
11910 if( !
set->lp_checkstability )
11928 lpalgoName(lpalgo), !
set->lp_presolving ?
"with":
"without");
11935 if( !
set->lp_checkstability )
11949 if( !tightprimfeastol || !tightdualfeastol )
11952 if( !tightprimfeastol )
11958 if( !tightdualfeastol )
11964 if( success || success2 )
11974 if( !
set->lp_checkstability )
11983 if( !tightprimfeastol )
11987 if( !tightdualfeastol )
12011assert(lp !=
NULL);
12062assert(lp !=
NULL);
12065assert(stat !=
NULL);
12066assert(lperror !=
NULL);
12070solvedprimal =
FALSE;
12071solveddual =
FALSE;
12072timelimit =
FALSE;
12075itlim = ( resolve ? resolveitlim : harditlim );
12079 SCIP_CALL(
lpSolveStable(lp,
set, messagehdlr, stat, prob, lpalgo, itlim, harditlim, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch,
12080scaling, keepsol, &timelimit, lperror) );
12216 SCIPsetDebugMsg(
set,
"solving LP with %s returned solstat=%d (internal status: %d, primalfeasible=%u, dualfeasible=%u)\n",
12249assert(lp !=
NULL);
12251assert(lperror !=
NULL);
12259algo = resolve ?
set->lp_resolvealgorithm :
set->lp_initalgorithm;
12269needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12275needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12282needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12288needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12294needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12300needdualray, resolve, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12304 SCIPerrorMessage(
"invalid parameter setting <%c> for LP algorithm\n", algo);
12307assert(!(*lperror) || !lp->
solved);
12325 for( c = 0; c < lp->
nlazycols; ++c )
12335#define checkLazyBounds(lp, set) 12358 SCIPsetDebugMsg(
set,
"mark all lazy columns as changed in order to reload bounds (diving=%u, applied=%u)\n",
12361 for( c = 0; c < lp->
nlazycols; ++c )
12411 if( (
set->lp_resolveiterfac == -1) || stat->
nlps- stat->
nrootlps< 5 )
12417 return(
int)
MIN(itlim,
MAX(
set->lp_resolveitermin, \
12448assert(lp !=
NULL);
12449assert(prob !=
NULL);
12451assert(lperror !=
NULL);
12462 SCIPsetDebugMsg(
set,
"solving LP: %d rows, %d cols, primalfeasible=%u, dualfeasible=%u, solved=%u, diving=%u, probing=%u, cutoffbnd=%g\n",
12466needprimalray =
TRUE;
12468|| (
set->conf_enable &&
set->conf_useinflp !=
'o'));
12471harditlim = (int)
MIN(itlim, INT_MAX);
12472resolveitlim = ( limitresolveiters ?
lpGetResolveItlim(
set, stat, harditlim) : harditlim );
12473assert(harditlim == -1 || (resolveitlim <= harditlim));
12512tightprimfeastol =
FALSE;
12513tightdualfeastol =
FALSE;
12514fromscratch =
FALSE;
12515primalfeasible =
FALSE;
12516dualfeasible =
FALSE;
12517wasfromscratch = (stat->
nlps== 0);
12518scaling =
set->lp_scaling;
12522oldnlps = stat->
nlps;
12523 SCIP_CALL(
lpFlushAndSolve(lp, blkmem,
set, messagehdlr, stat, prob, eventqueue, resolveitlim, harditlim, needprimalray,
12524needdualray, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12526assert(!(*lperror) || !lp->
solved);
12540 if(
set->lp_checkprimfeas )
12542primalfeaspointer = &primalfeasible;
12548primalfeasible =
TRUE;
12549primalfeaspointer =
NULL;
12552 if(
set->lp_checkdualfeas )
12554dualfeaspointer = &dualfeasible;
12560dualfeasible =
TRUE;
12561dualfeaspointer =
NULL;
12570 if( primalfeasible && dualfeasible && aging && !lp->
diving&& stat->
nlps> oldnlps )
12574 if( stat->
nlps% ((
set->lp_rowagelimit+1)/2 + 1) == 0 )
12587 if( !primalfeasible || !dualfeasible )
12591 if( (fastmip > 0) && simplex )
12596stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12600 else if( (!primalfeasible && !tightprimfeastol) || (!dualfeasible && !tightdualfeastol) )
12607stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12608tightprimfeastol = tightprimfeastol || !primalfeasible;
12609tightdualfeastol = tightdualfeastol || !dualfeasible;
12612 else if( !fromscratch && !wasfromscratch && simplex )
12617stat->
nnodes, stat->
nlps, primalfeasible, dualfeasible);
12618fromscratch =
TRUE;
12629 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
12651farkasvalid =
FALSE;
12656farkasvalid =
TRUE;
12659 if( !farkasvalid && !(*lperror) )
12663 if( (fastmip > 0) && simplex )
12674 else if( !tightdualfeastol )
12682tightdualfeastol =
TRUE;
12685 else if( !fromscratch && simplex )
12693fromscratch =
TRUE;
12711 if(
set->lp_checkprimfeas )
12723primalfeasible =
TRUE;
12724rayfeasible =
TRUE;
12731 SCIPsetDebugMsg(
set,
" -> LP has unbounded primal ray (primalfeas=%u, rayfeas=%u)\n",
12732primalfeasible, rayfeasible);
12734 if( !primalfeasible || !rayfeasible )
12738 if( (fastmip > 0) && simplex )
12743stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12747 else if( !tightprimfeastol )
12754stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12755tightprimfeastol =
TRUE;
12758 else if( !fromscratch && simplex )
12763stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12764fromscratch =
TRUE;
12767 else if( scaling > 0 )
12772stat->
nnodes, stat->
nlps, primalfeasible, rayfeasible);
12806assert(lpi !=
NULL);
12818 chartmppricingchar;
12824fromscratch =
FALSE;
12836 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12849 SCIPsetDebugMsg(
set,
" ---> new objval = %f (solstat: %d, 1 add. step)\n", objval, solstat);
12858 if( !(*lperror) && (fastmip > 0) && simplex )
12862 FALSE,
FALSE,
TRUE, fastmip, tightprimfeastol, tightdualfeastol, fromscratch, scaling, keepsol, lperror) );
12870 SCIPsetDebugMsg(
set,
" ---> new objval = %f (solstat: %d, without fastmip)\n", objval, solstat);
12877 SCIPsetDebugMsg(
set,
"unresolved error while resolving LP in order to exceed the objlimit\n");
12893 if(
set->lp_checkprimfeas )
12895primalfeaspointer = &primalfeasible;
12901primalfeasible =
TRUE;
12902primalfeaspointer =
NULL;
12905 if(
set->lp_checkdualfeas )
12907dualfeaspointer = &dualfeasible;
12913dualfeasible =
TRUE;
12914dualfeaspointer =
NULL;
12939 if( !primalfeasible || !dualfeasible
12949 SCIPsetDebugMsg(
set,
" -> LP objective value: %g + %g = %g (solstat=%d, cutoff=%g)\n",
12973farkasvalid =
FALSE;
12978farkasvalid =
TRUE;
12980 if( !farkasvalid )
12984 if( !tightprimfeastol )
12992tightprimfeastol =
TRUE;
12995 else if( simplex )
13003fromscratch =
TRUE;
13021 if(
set->lp_checkprimfeas )
13033primalfeasible =
TRUE;
13034rayfeasible =
TRUE;
13043 if( !primalfeasible || !rayfeasible )
13081 SCIPmessagePrintWarning(messagehdlr,
"LP solver reached time limit, but SCIP time limit is not exceeded yet; " 13082 "you might consider switching the clock type of SCIP\n");
13099assert(!(*lperror) || !lp->
solved);
13108 SCIPsetDebugMsg(
set,
"resetting parameter SCIP_LPPARAM_FROMSCRATCH to FALSE %s\n", success ?
"":
"failed");
13120assert(lp !=
NULL);
13138assert(lp !=
NULL);
13164assert(lp !=
NULL);
13177assert(lp !=
NULL);
13197assert(lp !=
NULL);
13208assert(lp !=
NULL);
13225assert(lp !=
NULL);
13227assert(prob !=
NULL);
13229vars = prob->
vars;
13230nvars = prob->
nvars;
13238 for( v = 0; v < nvars; ++v )
13289assert(lp !=
NULL);
13321assert(lp !=
NULL);
13356 intpseudoobjvalinf;
13367pseudoobjval -= oldbound * obj;
13368assert(pseudoobjvalinf >= 0);
13372pseudoobjval += newbound * obj;
13374assert(pseudoobjvalinf >= 0);
13376 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13379 returnpseudoobjval;
13395 intpseudoobjvalinf;
13421assert(pseudoobjvalinf >= 0);
13433assert(pseudoobjvalinf >= 0);
13435 if( pseudoobjvalinf > 0 ||
set->nactivepricers > 0 )
13438 returnpseudoobjval;
13469(*deltaval) = lb * (newobj - oldobj);
13480(*deltaval) = ub * newobj;
13489(*deltaval) = -lb * oldobj;
13494(*deltaval) = (ub * newobj) - (lb * oldobj);
13504(*deltaval) = -lb * oldobj;
13514(*deltaval) = ub * (newobj - oldobj);
13525(*deltaval) = lb * newobj;
13534(*deltaval) = -ub * oldobj;
13539(*deltaval) = (lb * newobj) - (ub * oldobj);
13549(*deltaval) = -ub * oldobj;
13560(*deltaval) = ub * newobj;
13567(*deltaval) = lb * newobj;
13587assert(newlb != oldlb);
13594*deltaval = -obj * oldlb;
13601*deltaval = obj * newlb;
13606*deltaval = obj * (newlb - oldlb);
13625assert(newub != oldub);
13632*deltaval = -obj * oldub;
13639*deltaval = obj * newub;
13644*deltaval = obj * (newub - oldub);
13661assert(lp !=
NULL);
13751assert(lp !=
NULL);
13760assert(var !=
NULL);
13764 SCIPerrorMessage(
"LP was informed of an objective change of a non-active variable\n");
13774 if( oldobj > 0.0 )
13786 else if( oldobj < 0.0 )
13800 if( newobj > 0.0 )
13812 else if( newobj < 0.0 )
13854assert(var !=
NULL);
13856 if(
set->misc_exactsolve )
13858 if( oldobj != newobj )
13908assert(var !=
NULL);
13935assert(var !=
NULL);
13937 if(
set->misc_exactsolve )
13976assert(var !=
NULL);
14003assert(var !=
NULL);
14005 if(
set->misc_exactsolve )
14041assert(lp !=
NULL);
14062assert(lp !=
NULL);
14090assert(lp !=
NULL);
14141assert(lp !=
NULL);
14200 if(
set->misc_exactsolve )
14224assert(lp !=
NULL);
14273assert(lp !=
NULL);
14324 if(
set->misc_exactsolve )
14341assert(lp !=
NULL);
14381assert(lp !=
NULL);
14385assert(stat !=
NULL);
14393 if( primalfeasible ==
NULL)
14394stillprimalfeasible =
FALSE;
14397*primalfeasible =
TRUE;
14398stillprimalfeasible =
TRUE;
14400 if( dualfeasible ==
NULL)
14401stilldualfeasible =
FALSE;
14404*dualfeasible =
TRUE;
14405stilldualfeasible =
TRUE;
14425#ifdef SCIP_USE_LPSOLVER_ACTIVITY 14447 for( c = 0; c < nlpicols; ++c )
14449assert( 0 <= cstat[c] && cstat[c] < 4 );
14450lpicols[c]->
primsol= primsol[c];
14457stillprimalfeasible =
FALSE;
14458stilldualfeasible =
FALSE;
14462lpicols[c]->
minprimsol=
MIN(lpicols[c]->minprimsol, primsol[c]);
14463lpicols[c]->
maxprimsol=
MAX(lpicols[c]->maxprimsol, primsol[c]);
14464lpicols[c]->
redcost= redcost[c];
14465lpicols[c]->
basisstatus= (
unsignedint) cstat[c];
14467 if( stillprimalfeasible )
14469stillprimalfeasible =
14472primalbound += (lpicols[c]->
primsol* lpicols[c]->
obj);
14482 if( stilldualfeasible )
14484compslack =
MIN((lpicols[c]->primsol - lpicols[c]->lb), 1.0) * lpicols[c]->
redcost;
14487 if( stilldualfeasible )
14489compslack =
MIN((lpicols[c]->ub - lpicols[c]->primsol), 1.0) * lpicols[c]->
redcost;
14493 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14494 SCIPvarGetName(lpicols[c]->var), lpicols[c]->lb, lpicols[c]->ub, lpicols[c]->primsol, lpicols[c]->redcost,
14497primalfeasible !=
NULL? stillprimalfeasible :
TRUE,
14500dualfeasible !=
NULL? stilldualfeasible :
TRUE);
14514 if( stilldualfeasible
14517 if( stilldualfeasible
14521 SCIPsetDebugMsg(
set,
" col <%s> [%.9g,%.9g]: primsol=%.9f, redcost=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14522 SCIPvarGetName(lpicols[c]->var), lpicols[c]->lb, lpicols[c]->ub, lpicols[c]->primsol, lpicols[c]->redcost,
14525primalfeasible !=
NULL? stillprimalfeasible :
TRUE,
14528dualfeasible !=
NULL? stilldualfeasible :
TRUE);
14535 if( stilldualfeasible )
14538dualbound += (lpicols[c]->
redcost* lpicols[c]->
lb);
14540dualbound += (lpicols[c]->redcost * lpicols[c]->ub);
14545 for(
r= 0;
r< nlpirows; ++
r)
14547assert( 0 <= rstat[
r] && rstat[
r] < 4 );
14549#ifdef SCIP_USE_LPSOLVER_ACTIVITY 14553 if( lpirows[
r]->validactivitylp != stat->
lpcount)
14558 if( stillprimalfeasible )
14560stillprimalfeasible =
14572 if( stilldualfeasible )
14574compslack =
MIN((lpirows[
r]->activity - lpirows[
r]->lhs), 1.0) * lpirows[
r]->
dualsol;
14577 if( stilldualfeasible )
14579compslack =
MIN((lpirows[
r]->rhs - lpirows[
r]->activity), 1.0) * lpirows[
r]->
dualsol;
14583 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g]: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14584lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->activity, lpirows[
r]->dualsol,
14587primalfeasible !=
NULL? stillprimalfeasible :
TRUE,
14590dualfeasible !=
NULL? stilldualfeasible :
TRUE);
14598 if( stilldualfeasible &&
14601 if( stilldualfeasible &&
14605 SCIPsetDebugMsg(
set,
" row <%s> [%.9g,%.9g] + %.9g: activity=%.9f, dualsol=%.9f, pfeas=%u/%u(%u), dfeas=%d/%d(%u)\n",
14606lpirows[
r]->name, lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, lpirows[
r]->activity, lpirows[
r]->dualsol,
14609primalfeasible !=
NULL? stillprimalfeasible :
TRUE,
14612dualfeasible !=
NULL? stilldualfeasible :
TRUE);
14619 if( stilldualfeasible )
14624dualbound += (lpirows[
r]->dualsol * (lpirows[
r]->rhs - lpirows[
r]->constant));
14653 if( primalfeasible !=
NULL)
14654*primalfeasible = stillprimalfeasible;
14655 if( dualfeasible !=
NULL)
14656*dualfeasible = stilldualfeasible;
14662#ifdef SCIP_USE_LPSOLVER_ACTIVITY 14694assert(lp !=
NULL);
14700assert(stat !=
NULL);
14703 if( primalfeasible !=
NULL)
14704*primalfeasible =
TRUE;
14705 if( rayfeasible !=
NULL)
14706*rayfeasible =
TRUE;
14716 SCIPerrorMessage(
"LP solver has no primal ray to prove unboundedness.\n");
14738 for( c = 0; c < nlpicols; ++c )
14740assert(lpicols[c] !=
NULL);
14741assert(lpicols[c]->var !=
NULL);
14746 if( rayfeasible !=
NULL)
14748*rayfeasible = *rayfeasible
14754rayobjval += ray[c] * col->
obj;
14764primsol[c] = col->
lb;
14766primsol[c] = col->
ub;
14770primsol[c] =
MAX(primsol[c], col->
lb);
14771primsol[c] =
MIN(primsol[c], col->
ub);
14777 for(
r= 0;
r< nlpirows; ++
r)
14782row = lpirows[
r];
14783assert( row !=
NULL);
14786 for( c = 0; c < row->
nlpcols; ++c )
14788col = row->
cols[c];
14790assert( col !=
NULL);
14791assert( col->
lppos>= 0 );
14792assert( row->
linkpos[c] >= 0 );
14795act += row->
vals[c] * primsol[col->
lppos];
14800 for( c = row->
nlpcols; c < row->len; ++c )
14802col = row->
cols[c];
14803assert( col !=
NULL);
14805 if( col->
lppos>= 0 )
14806act += row->
vals[c] * primsol[col->
lppos];
14817 if(
r< nlpirows )
14823 if( primalfeasible !=
NULL)
14825assert( *primalfeasible );
14826 for( c = 0; c < nlpicols; ++c )
14828assert( lpicols[c] !=
NULL);
14829assert( lpicols[c]->var !=
NULL);
14836*primalfeasible =
FALSE;
14844 for(
r= 0;
r< nlpirows; ++
r)
14850row = lpirows[
r];
14851assert( row !=
NULL);
14855 for( c = 0; c < row->
nlpcols; ++c )
14857col = row->
cols[c];
14859assert( col !=
NULL);
14860assert( col->
lppos>= 0 );
14861assert( row->
linkpos[c] >= 0 );
14864primact += row->
vals[c] * primsol[col->
lppos];
14865rayact += row->
vals[c] * ray[col->
lppos];
14870 for( c = row->
nlpcols; c < row->len; ++c )
14872col = row->
cols[c];
14873assert( col !=
NULL);
14875 if( col->
lppos>= 0 )
14877primact += row->
vals[c] * primsol[col->
lppos];
14878rayact += row->
vals[c] * ray[col->
lppos];
14884 if( primalfeasible !=
NULL&& *primalfeasible )
14888*primalfeasible =
FALSE;
14892 if( rayfeasible !=
NULL&& *rayfeasible )
14896*rayfeasible =
FALSE;
14900activity[
r] = primact;
14903 if( primalfeasible !=
NULL&& !(*primalfeasible) )
14908 else if( rayfeasible !=
NULL&& !(*rayfeasible) )
14919 if( rayfeasible !=
NULL)
14920*rayfeasible =
FALSE;
14926assert(rayobjval != 0.0);
14933 for( c = 0; c < nlpicols; ++c )
14938rayscale =
MIN(rayscale, (lpicols[c]->ub - primsol[c]) / ray[c]);
14943rayscale =
MIN(rayscale, 1.0 / ray[c]);
14949rayscale =
MIN(rayscale, (lpicols[c]->lb - primsol[c]) / ray[c]);
14954rayscale =
MIN(rayscale, -1.0 / ray[c]);
14962 SCIPsetDebugMsg(
set,
"unbounded LP solution: rayobjval=%f, rayscale=%f\n", rayobjval, rayscale);
14967 for( c = 0; c < nlpicols; ++c )
14970lpicols[c]->
primsol= primsol[c];
14974primsolval = primsol[c] + rayscale * ray[c];
14982 for(
r= 0;
r< nlpirows; ++
r)
15012assert(lp !=
NULL);
15014assert(ray !=
NULL);
15039 for( c = 0; c < nlpicols; c++ )
15041assert(lpicols[c] !=
NULL);
15043var = lpicols[c]->
var;
15044assert(var !=
NULL);
15079assert(lp !=
NULL);
15084assert(stat !=
NULL);
15087 if( valid !=
NULL)
15095farkascoefs =
NULL;
15098checkfarkas =
set->lp_checkfarkas && valid !=
NULL;
15119 for(
r= 0;
r< nlpirows; ++
r)
15128 if( checkfarkas && dualfarkas[
r] != 0.0 )
15130assert(valid !=
NULL);
15131assert(farkascoefs !=
NULL);
15141 SCIPsetDebugMsg(
set,
"farkas proof is invalid: row <%s>[lhs=%g,rhs=%g,c=%g] has multiplier %g\n",
15142 SCIProwGetName(lpirows[
r]), lpirows[
r]->lhs, lpirows[
r]->rhs, lpirows[
r]->constant, dualfarkas[
r]);
15156 for( c = 0; c < lpirows[
r]->
len; c++ )
15163assert(pos >= 0 && pos < nlpicols);
15165farkascoefs[pos] += dualfarkas[
r] * lpirows[
r]->
vals[c];
15169 if( dualfarkas[
r] > 0.0 )
15173farkaslhs += dualfarkas[
r] * lpirows[
r]->
lhs;
15176 else if( dualfarkas[
r] < 0.0 )
15180farkaslhs += dualfarkas[
r] * lpirows[
r]->
rhs;
15183maxactivity += dualfarkas[
r] * lpirows[
r]->
constant;
15188 for( c = 0; c < nlpicols; ++c )
15197assert(valid !=
NULL);
15198assert(farkascoefs !=
NULL);
15206 if( farkascoefs[c] > 0.0 )
15208maxactivity += farkascoefs[c] * lpicols[c]->
ub;
15212 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15221maxactivity += farkascoefs[c] * lpicols[c]->
lb;
15225 SCIPsetDebugMsg(
set,
"farkas proof is invalid: col <%s>[lb=%g,ub=%g] has coefficient %g\n",
15239assert(valid !=
NULL);
15241 SCIPsetDebugMsg(
set,
"farkas proof is invalid: maxactivity=%.12f, lhs=%.12f\n", maxactivity, farkaslhs);
15243 if( forcedlpsolve &&
SCIPsetIsLT(
set, maxactivity, farkaslhs) )
15244 SCIPmessagePrintWarning(
set->scip->messagehdlr,
"Unreliable farkas proof forced valid, result might not be optimal.\n");
15265assert(lp !=
NULL);
15287assert(lp !=
NULL);
15292assert(stat !=
NULL);
15302 for( c = 0; c < nlpicols; ++c )
15304assert(lpicols[c] == lp->
cols[c]);
15305 if( lpicols[c]->primsol == 0.0 )
15306lpicols[c]->
age++;
15308lpicols[c]->
age= 0;
15313 for(
r= 0;
r< nlpirows; ++
r)
15316assert(lpirows[
r] == lp->
rows[
r]);
15318 if( lpirows[
r]->dualsol == 0.0 )
15320lpirows[
r]->
age++;
15325lpirows[
r]->
age= 0;
15345assert(lp !=
NULL);
15349assert(coldstat !=
NULL);
15352ncols = lp->
ncols;
15358 for( c = 0; c < ncols; ++c )
15360col = lp->
cols[c];
15361assert(col !=
NULL);
15362assert(col == lp->
lpicols[c]);
15363assert(coldstat[c] <= c);
15364col->
lppos= coldstat[c];
15365 if( coldstat[c] == -1 )
15383 else if( coldstat[c] < c )
15385assert(lp->
cols[coldstat[c]] ==
NULL);
15387lp->
cols[coldstat[c]] = col;
15388lp->
lpicols[coldstat[c]] = col;
15389lp->
cols[coldstat[c]]->
lppos= coldstat[c];
15390lp->
cols[coldstat[c]]->
lpipos= coldstat[c];
15398 while( c < lp->nlazycols )
15410 if( lp->
ncols< ncols )
15447assert(lp !=
NULL);
15451assert(rowdstat !=
NULL);
15453nrows = lp->
nrows;
15459 for(
r= 0;
r< nrows; ++
r)
15461row = lp->
rows[
r];
15462assert(row == lp->
lpirows[
r]);
15463assert(rowdstat[
r] <=
r);
15464assert(row !=
NULL);
15465row->
lppos= rowdstat[
r];
15466 if( rowdstat[
r] == -1 )
15495 else if( rowdstat[
r] <
r)
15497assert(lp->
rows[rowdstat[
r]] ==
NULL);
15499lp->
rows[rowdstat[
r]] = row;
15500lp->
lpirows[rowdstat[
r]] = row;
15501lp->
rows[rowdstat[
r]]->
lppos= rowdstat[
r];
15509 if( lp->
nrows< nrows )
15548assert(lp !=
NULL);
15554assert(stat !=
NULL);
15559ncols = lp->
ncols;
15571 for( c = firstcol; c < ncols; ++c )
15573assert(cols[c] == lpicols[c]);
15574assert(cols[c]->lppos == c);
15575assert(cols[c]->lpipos == c);
15576 if( cols[c]->removable
15577&& cols[c]->obsoletenode != stat->
nnodes 15578&& cols[c]->
age>
set->lp_colagelimit
15582assert(cols[c]->primsol == 0.0);
15586 SCIPsetDebugMsg(
set,
"removing obsolete col <%s>: primsol=%f, bounds=[%g,%g]\n",
15587 SCIPvarGetName(cols[c]->var), cols[c]->primsol, cols[c]->lb, cols[c]->ub);
15591 SCIPsetDebugMsg(
set,
"removing %d/%d obsolete columns from LP\n", ndelcols, ncols);
15594 if( ndelcols > 0 )
15598assert(lp->
ncols== ncols - ndelcols);
15627assert(lp !=
NULL);
15633assert(stat !=
NULL);
15638nrows = lp->
nrows;
15650 for(
r= firstrow;
r< nrows; ++
r)
15652assert(rows[
r] == lpirows[
r]);
15653assert(rows[
r]->lppos ==
r);
15654assert(rows[
r]->lpipos ==
r);
15655 if( rows[
r]->removable
15656&& rows[
r]->obsoletenode != stat->
nnodes 15657&& rows[
r]->
age>
set->lp_rowagelimit
15663 SCIPsetDebugMsg(
set,
"removing obsolete row <%s>: activity=%f, sides=[%g,%g]\n",
15664rows[
r]->name, rows[
r]->activity, rows[
r]->lhs, rows[
r]->rhs);
15668 SCIPsetDebugMsg(
set,
"removing %d/%d obsolete rows from LP\n", ndelrows, nrows);
15671 if( ndelrows > 0 )
15675assert(lp->
nrows== nrows - ndelrows);
15693assert(lp !=
NULL);
15699 SCIPsetDebugMsg(
set,
"removing obsolete columns starting with %d/%d, obsolete rows starting with %d/%d\n",
15724assert(lp !=
NULL);
15732 if( 0 < lp->
ncols)
15736 if( 0 < lp->
nrows)
15760assert(lp !=
NULL);
15764assert(stat !=
NULL);
15766assert(0 <= firstcol && firstcol < lp->ncols);
15771ncols = lp->
ncols;
15781 for( c = firstcol; c < ncols; ++c )
15783assert(cols[c] == lpicols[c]);
15784assert(cols[c]->lppos == c);
15785assert(cols[c]->lpipos == c);
15786 if( lpicols[c]->removable
15788&& lpicols[c]->primsol == 0.0
15796 SCIPsetDebugMsg(
set,
"removing %d/%d unused columns from LP\n", ndelcols, ncols);
15799 if( ndelcols > 0 )
15803assert(lp->
ncols== ncols - ndelcols);
15832assert(lp !=
NULL);
15837assert(stat !=
NULL);
15839assert(0 <= firstrow && firstrow < lp->nrows);
15847nrows = lp->
nrows;
15856 for(
r= firstrow;
r< nrows; ++
r)
15858assert(rows[
r] == lpirows[
r]);
15859assert(rows[
r]->lppos ==
r);
15860assert(rows[
r]->lpipos ==
r);
15871 if( ndelrows > 0 )
15875assert(lp->
nrows== nrows - ndelrows);
15897assert(lp !=
NULL);
15904cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
15905cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
15907 SCIPsetDebugMsg(
set,
"removing unused columns starting with %d/%d (%u), unused rows starting with %d/%d (%u), LP algo: %d, basic sol: %u\n",
15936assert(lp !=
NULL);
15943cleanupcols = (root ?
set->lp_cleanupcolsroot :
set->lp_cleanupcols);
15944cleanuprows = (root ?
set->lp_cleanuprowsroot :
set->lp_cleanuprows);
15946 SCIPsetDebugMsg(
set,
"removing all unused columns (%u) and rows (%u), LP algo: %d, basic sol: %u\n",
15949 if( cleanupcols && 0 < lp->
ncols)
15953 if( cleanuprows && 0 < lp->
nrows)
15980assert(lp !=
NULL);
15985assert(stat !=
NULL);
15995nrows = lp->
nrows;
16006assert(rows[
r] == lpirows[
r]);
16007assert(rows[
r]->lppos ==
r);
16008assert(rows[
r]->lpipos ==
r);
16012 SCIPsetDebugMsg(
set,
"basic row <%s> is redundant: sides=[%g,%g], act=[%g,%g]\n",
16020 SCIPsetDebugMsg(
set,
"removing %d/%d redundant basic rows from LP\n", ndelrows, nrows);
16023 if( ndelrows > 0 )
16027assert(lp->
nrows== nrows - ndelrows);
16046assert(lp !=
NULL);
16054assert(blkmem !=
NULL);
16058 SCIPsetDebugMsg(
set,
"diving started (LP flushed: %u, LP solved: %u, solstat: %d)\n",
16062 for( c = 0; c < lp->
ncols; ++c )
16084 if( !
set->lp_resolverestore && lp->
solved)
16115 for( c = 0; c < lp->
ncols; ++c )
16119 for(
r= 0;
r< lp->
nrows; ++
r)
16158assert(lp !=
NULL);
16160assert(blkmem !=
NULL);
16161assert(nvars == 0 || vars !=
NULL);
16166 for( v = 0; v < nvars; ++v )
16169assert(var !=
NULL);
16234 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, prob, -1LL,
FALSE,
FALSE,
FALSE,
FALSE, &lperror) );
16246 "LP was not resolved to a sufficient status after diving\n");
16287 for( c = 0; c < lp->
ncols; ++c )
16291 for(
r= 0;
r< lp->
nrows; ++
r)
16305 for( c = 0; c < lp->
ncols; ++c )
16321#define DIVESTACKGROWFACT 1.5 16330assert(lp !=
NULL);
16331assert(row !=
NULL);
16352assert(lp !=
NULL);
16367assert(lp !=
NULL);
16382assert(lp !=
NULL);
16395assert(lp !=
NULL);
16436assert(lp !=
NULL);
16446 for( j = 0; j < lp->
nrows; ++j )
16448row = lp->
rows[j];
16449assert(row !=
NULL);
16475 for( j = 0; j < lp->
ncols; ++j )
16477col = lp->
cols[j];
16478assert(col !=
NULL);
16483c = usefarkas ? 0.0 : col->
obj;
16486 for( i = 0; i < col->
nlprows; ++i )
16490assert(col->
linkpos[i] >= 0);
16497 for( i = col->
nlprows; i < col->len; ++i )
16503assert(col->
linkpos[i] >= 0);
16546assert(proved !=
NULL);
16550*proved = (
bound> 0.0);
16552 SCIPsetDebugMsg(
set,
"proved Farkas value of LP: %g -> infeasibility %sproved\n",
bound, *proved ?
"":
"not ");
16565assert(lp !=
NULL);
16567assert(fname !=
NULL);
16579 const char* fname,
16595assert(lp !=
NULL);
16597assert(fname !=
NULL);
16600file = fopen(fname,
"w");
16601 if( file ==
NULL)
16609 if( genericnames )
16610 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Original Variable and Constraint Names have been replaced by generic names.\n");
16613 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Warning: Variable and Constraint Names should not contain special characters like '+', '=' etc.\n");
16614 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ If this is the case, the model may be corrupted!\n");
16617 if( origobj && objoffset != 0.0 )
16619 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ An artificial variable 'objoffset' has been added and fixed to 1.\n");
16620 SCIPmessageFPrintInfo(messagehdlr, file,
"\\ Switching this variable to 0 will disable the offset in the objective.\n\n");
16633 for( i = 0; i < lp->
ncols; ++i )
16635 if( lp->
cols[i]->
obj!= 0.0 )
16637coeff = lp->
cols[i]->
obj;
16644 if( genericnames )
16655 if( origobj && objoffset != 0.0 )
16660 for( i = 0; i < lp->
nrows; i++ )
16682 if( genericnames )
16693 if( strlen(rowname) > 0 )
16698 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
16706assert(type ==
'B');
16714 if( genericnames )
16719 if( (j+1) % 10 == 0 )
16751 for( i = 0; i < lp->
nrows; i++ )
16773 if( genericnames )
16784 if( strlen(rowname) > 0 )
16789 SCIPmessageFPrintInfo(messagehdlr, file,
"are not in a valid range. The following two constraints may be corrupted!\n");
16797assert(type ==
'B');
16805 if( genericnames )
16810 if( (j+1) % 10 == 0 )
16841 for( i = 0; i < lp->
ncols; ++i )
16850 if( genericnames )
16861 if( origobj && objoffset != 0.0 )
16867 for( i = 0; i < lp->
ncols; ++i )
16872 if( genericnames )
16899#undef SCIPcolGetObj 16902#undef SCIPcolGetBestBound 16903#undef SCIPcolGetPrimsol 16904#undef SCIPcolGetMinPrimsol 16905#undef SCIPcolGetMaxPrimsol 16906#undef SCIPcolGetBasisStatus 16907#undef SCIPcolGetVar 16908#undef SCIPcolGetIndex 16909#undef SCIPcolGetVarProbindex 16910#undef SCIPcolIsIntegral 16911#undef SCIPcolIsRemovable 16912#undef SCIPcolGetLPPos 16913#undef SCIPcolGetLPDepth 16914#undef SCIPcolIsInLP 16915#undef SCIPcolGetNNonz 16916#undef SCIPcolGetNLPNonz 16917#undef SCIPcolGetRows 16918#undef SCIPcolGetVals 16919#undef SCIPcolGetStrongbranchNode 16920#undef SCIPcolGetNStrongbranchs 16921#undef SCIPcolGetAge 16922#undef SCIPboundtypeOpposite 16923#undef SCIProwGetNNonz 16924#undef SCIProwGetNLPNonz 16925#undef SCIProwGetCols 16926#undef SCIProwGetVals 16927#undef SCIProwGetConstant 16928#undef SCIProwGetNorm 16929#undef SCIProwGetSumNorm 16930#undef SCIProwGetLhs 16931#undef SCIProwGetRhs 16932#undef SCIProwGetDualsol 16933#undef SCIProwGetDualfarkas 16934#undef SCIProwGetBasisStatus 16935#undef SCIProwGetName 16936#undef SCIProwGetIndex 16937#undef SCIProwGetAge 16938#undef SCIProwGetRank 16939#undef SCIProwIsIntegral 16940#undef SCIProwIsLocal 16941#undef SCIProwIsModifiable 16942#undef SCIProwIsRemovable 16943#undef SCIProwGetOrigintype 16944#undef SCIProwGetOriginCons 16945#undef SCIProwGetOriginConshdlr 16946#undef SCIProwGetOriginSepa 16947#undef SCIProwIsInGlobalCutpool 16948#undef SCIProwGetLPPos 16949#undef SCIProwGetLPDepth 16950#undef SCIProwIsInLP 16951#undef SCIProwGetActiveLPCount 16952#undef SCIProwGetNLPsAfterCreation 16953#undef SCIProwChgRank 16954#undef SCIPlpGetCols 16955#undef SCIPlpGetNCols 16956#undef SCIPlpGetRows 16957#undef SCIPlpGetNRows 16958#undef SCIPlpGetNewcols 16959#undef SCIPlpGetNNewcols 16960#undef SCIPlpGetNewrows 16961#undef SCIPlpGetNNewrows 16962#undef SCIPlpGetObjNorm 16963#undef SCIPlpGetRootObjval 16964#undef SCIPlpGetRootColumnObjval 16965#undef SCIPlpGetRootLooseObjval 16967#undef SCIPlpSetIsRelax 16968#undef SCIPlpIsRelax 16969#undef SCIPlpIsSolved 16970#undef SCIPlpIsSolBasic 16972#undef SCIPlpDivingObjChanged 16973#undef SCIPlpMarkDivingObjChanged 16974#undef SCIPlpUnmarkDivingObjChanged 16975#undef SCIPlpDivingRowsChanged 16976#undef SCIPlpIsFeasEQ 16977#undef SCIPlpIsFeasLT 16978#undef SCIPlpIsFeasLE 16979#undef SCIPlpIsFeasGT 16980#undef SCIPlpIsFeasGE 16981#undef SCIPlpIsFeasZero 16982#undef SCIPlpIsFeasPositive 16983#undef SCIPlpIsFeasNegative 16990assert(col !=
NULL);
17000assert(col !=
NULL);
17010assert(col !=
NULL);
17020assert(col !=
NULL);
17022 if( col->
obj>= 0.0 )
17033assert(col !=
NULL);
17035 if( col->
lppos>= 0 )
17046assert(col !=
NULL);
17056assert(col !=
NULL);
17068assert(col !=
NULL);
17079assert(col !=
NULL);
17089assert(col !=
NULL);
17091 returncol->
index;
17099assert(col !=
NULL);
17109assert(col !=
NULL);
17120assert(col !=
NULL);
17130assert(col !=
NULL);
17133 returncol->
lppos;
17141assert(col !=
NULL);
17152assert(col !=
NULL);
17155 return(col->
lppos>= 0);
17163assert(col !=
NULL);
17177assert(col !=
NULL);
17188assert(col !=
NULL);
17190 returncol->
rows;
17198assert(col !=
NULL);
17200 returncol->
vals;
17210assert(col !=
NULL);
17220assert(col !=
NULL);
17230assert(col !=
NULL);
17250assert(row !=
NULL);
17264assert(row !=
NULL);
17275assert(row !=
NULL);
17277 returnrow->
cols;
17285assert(row !=
NULL);
17287 returnrow->
vals;
17295assert(row !=
NULL);
17305assert(row !=
NULL);
17317assert(row !=
NULL);
17329assert(row !=
NULL);
17339assert(row !=
NULL);
17349assert(row !=
NULL);
17351 if( row->
lppos>= 0 )
17362assert(row !=
NULL);
17364 if( row->
lppos>= 0 )
17377assert(row !=
NULL);
17388assert(row !=
NULL);
17390 returnrow->
name;
17398assert(row !=
NULL);
17400 returnrow->
index;
17408assert(row !=
NULL);
17418assert(row !=
NULL);
17420 returnrow->
rank;
17428assert(row !=
NULL);
17438assert(row !=
NULL);
17440 returnrow->
local;
17448assert(row !=
NULL);
17458assert(row !=
NULL);
17468assert( row !=
NULL);
17478assert( row !=
NULL);
17493assert( row !=
NULL);
17513assert( row !=
NULL);
17528assert(row !=
NULL);
17538assert(row !=
NULL);
17541 returnrow->
lppos;
17549assert(row !=
NULL);
17560assert(row !=
NULL);
17563 return(row->
lppos>= 0);
17572assert(row !=
NULL);
17582assert(row !=
NULL);
17592assert(row !=
NULL);
17602assert(lp !=
NULL);
17612assert(lp !=
NULL);
17614 returnlp->
ncols;
17628assert(lp !=
NULL);
17629assert(
eps> 0.0);
17631lpcols = lp->
cols;
17632nlpcols = lp->
ncols;
17635 for( c = 0; c < nlpcols; ++c )
17637 if( lpcols[c]->ub - lpcols[c]->lb >
eps)
17641 returnnunfixedcols;
17649assert(lp !=
NULL);
17659assert(lp !=
NULL);
17661 returnlp->
nrows;
17669assert(lp !=
NULL);
17680assert(lp !=
NULL);
17691assert(lp !=
NULL);
17702assert(lp !=
NULL);
17720assert(cols !=
NULL|| lp->
ncols== 0);
17724 for( c = lp->
ncols- 1; c >= 0; --c )
17744assert(lp !=
NULL);
17757assert(lp !=
NULL);
17767assert(lp !=
NULL);
17777assert(lp !=
NULL);
17789assert(lp !=
NULL);
17801assert(lp !=
NULL);
17811assert(lp !=
NULL);
17822assert(lp !=
NULL);
17834assert(lp !=
NULL);
17844assert(lp !=
NULL);
17854assert(lp !=
NULL);
17864assert(lp !=
NULL);
17874assert(lp !=
NULL);
17884assert(lp !=
NULL);
17894assert(lp !=
NULL);
17904assert(lp !=
NULL);
17915assert(lp !=
NULL);
17926assert(lp !=
NULL);
17972assert(lpi !=
NULL);
17978 SCIPmessagePrintWarning(messagehdlr,
"Could not set feasibility tolerance of LP solver for relative interior point computation.\n");
17986 SCIPmessagePrintWarning(messagehdlr,
"Could not set dual feasibility tolerance of LP solver for relative interior point computation.\n");
17991nnewcols = 3*lp->
ncols+ 2*lp->
nrows+ (inclobjcutoff ? 1 : 0) + 1;
17997 for( j = 0; j < lp->
ncols; ++j )
18007nnewcols = lp->
ncols;
18008obj[nnewcols] = 0.0;
18009lb[nnewcols] = 1.0;
18014 for( i = 0; i < lp->
nrows; ++i )
18018row = lp->
rows[i];
18019assert( row !=
NULL);
18033ntotnonz += row->
nlpcols+ 1;
18043lb[nnewcols] = 0.0;
18044ub[nnewcols] = 1.0;
18045obj[nnewcols++] = 1.0;
18046ntotnonz += row->
nlpcols+ 2;
18049ntotnonz += row->
nlpcols+ 1;
18056lb[nnewcols] = 0.0;
18057ub[nnewcols] = 1.0;
18058obj[nnewcols++] = 1.0;
18059ntotnonz += row->
nlpcols+ 2;
18062ntotnonz += row->
nlpcols+ 1;
18069 if( inclobjcutoff && relaxrows )
18072lb[nnewcols] = 0.0;
18073ub[nnewcols] = 1.0;
18074obj[nnewcols++] = 1.0;
18075ntotnonz += lp->
ncols+ 2;
18080 for( j = 0; j < lp->
ncols; ++j )
18084col = lp->
cols[j];
18085assert( col !=
NULL);
18098lb[nnewcols] = 0.0;
18099ub[nnewcols] = 1.0;
18100obj[nnewcols++] = 1.0;
18106lb[nnewcols] = 0.0;
18107ub[nnewcols] = 1.0;
18108obj[nnewcols++] = 1.0;
18115nslacks = nnewcols - lp->
ncols- 1;
18116assert( nslacks >= 0 );
18117assert( nnewcols <= 3*lp->ncols + 2*lp->
nrows+ (inclobjcutoff ? 1 : 0) + 1 );
18139 for( i = 0; i < lp->
nrows; ++i )
18148row = lp->
rows[i];
18149assert( row !=
NULL);
18159assert( nnonz <= lp->ncols );
18160rowcols = row->
cols;
18161rowvals = row->
vals;
18167matbeg[matrowidx] = matidx;
18168 for( j = 0; j < nnonz; ++j )
18170assert( rowcols[j] !=
NULL);
18171assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18172assert( lp->
cols[rowcols[j]->
lppos] == rowcols[j] );
18174matinds[matidx] = rowcols[j]->
lppos;
18175matvals[matidx++] = rowvals[j];
18176assert( matidx <= ntotnonz );
18182matinds[matidx] = lp->
ncols;
18183matvals[matidx++] = -rhs;
18184assert( matidx <= ntotnonz );
18187matlhs[matrowidx] = 0.0;
18188matrhs[matrowidx++] = 0.0;
18189assert( matrowidx <= ntotrows );
18202matbeg[matrowidx] = matidx;
18203 for( j = 0; j < nnonz; ++j )
18205assert( rowcols[j] !=
NULL);
18206assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18207assert( lp->
cols[rowcols[j]->
lppos] == rowcols[j] );
18209matinds[matidx] = rowcols[j]->
lppos;
18210matvals[matidx++] = rowvals[j];
18211assert( matidx <= ntotnonz );
18217matinds[matidx] = lp->
ncols;
18218matvals[matidx++] = -lhs;
18219assert( matidx <= ntotnonz );
18225matvals[matidx] = -
MAX(1.0, lhs);
18226matinds[matidx++] = lp->
ncols+ 1 + cnt;
18227assert( matidx <= ntotnonz );
18231matlhs[matrowidx] = 0.0;
18233assert( matrowidx <= ntotrows );
18240matbeg[matrowidx] = matidx;
18241 for( j = 0; j < nnonz; ++j )
18243assert( rowcols[j] !=
NULL);
18244assert( 0 <= rowcols[j]->lppos && rowcols[j]->lppos < lp->ncols );
18245assert( lp->
cols[rowcols[j]->
lppos] == rowcols[j] );
18247matinds[matidx] = rowcols[j]->
lppos;
18248matvals[matidx++] = rowvals[j];
18249assert( matidx <= ntotnonz );
18255matinds[matidx] = lp->
ncols;
18256matvals[matidx++] = -rhs;
18257assert( matidx <= ntotnonz );
18263matvals[matidx] =
MAX(1.0, absrhs);
18264matinds[matidx++] = lp->
ncols+ 1 + cnt;
18269matrhs[matrowidx++] = 0.0;
18270assert( matrowidx <= ntotrows );
18276 if( inclobjcutoff )
18285matbeg[matrowidx] = matidx;
18286 for( j = 0; j < lp->
ncols; ++j )
18294matinds[matidx] = lp->
cols[j]->
lppos;
18295matvals[matidx++] = lp->
cols[j]->
obj;
18296assert( matidx <= ntotnonz );
18305matinds[matidx] = lp->
ncols;
18306matvals[matidx++] = -rhs;
18307assert( matidx <= ntotnonz );
18315matvals[matidx] =
MAX(1.0, absrhs);
18316matinds[matidx++] = lp->
ncols+ 1 + cnt;
18317assert( matidx <= ntotnonz );
18321matrhs[matrowidx++] = 0.0;
18322assert( matrowidx <= ntotrows );
18326 for( j = 0; j < lp->
ncols; ++j )
18332col = lp->
cols[j];
18333assert( col !=
NULL);
18334assert( col->
lppos== j );
18340matbeg[matrowidx] = matidx;
18342matinds[matidx] = j;
18343matvals[matidx++] = 1.0;
18344assert( matidx <= ntotnonz );
18349matinds[matidx] = lp->
ncols;
18350matvals[matidx++] = -col->
ub;
18351assert( matidx <= ntotnonz );
18354matlhs[matrowidx] = 0.0;
18355matrhs[matrowidx++] = 0.0;
18356assert( matrowidx <= ntotrows );
18368matbeg[matrowidx] = matidx;
18370matinds[matidx] = j;
18371matvals[matidx++] = 1.0;
18372assert( matidx <= ntotnonz );
18377matinds[matidx] = lp->
ncols;
18378matvals[matidx++] = -col->
lb;
18379assert( matidx <= ntotnonz );
18383matvals[matidx] = -
MAX(1.0, abscollb);
18384matinds[matidx++] = lp->
ncols+ 1 + cnt;
18385assert( matidx <= ntotnonz );
18388matlhs[matrowidx] = 0.0;
18390assert( matrowidx <= ntotrows );
18397matbeg[matrowidx] = matidx;
18399matinds[matidx] = j;
18400matvals[matidx++] = 1.0;
18401assert( matidx <= ntotnonz );
18406matinds[matidx] = lp->
ncols;
18407matvals[matidx++] = -col->
ub;
18408assert( matidx <= ntotnonz );
18412matvals[matidx] =
MAX(1.0, abscolub);
18413matinds[matidx++] = lp->
ncols+ 1 + cnt;
18414assert( matidx <= ntotnonz );
18418matrhs[matrowidx++] = 0.0;
18419assert( matrowidx <= ntotrows );
18422assert( cnt == nslacks );
18423assert( matrowidx == ntotrows );
18442assert( ncols == nnewcols );
18453 SCIPmessagePrintWarning(messagehdlr,
"Could not set time limit of LP solver for relative interior point computation.\n");
18462 SCIPmessagePrintWarning(messagehdlr,
"Could not set iteration limit of LP solver for relative interior point computation.\n");
18472 SCIPmessagePrintWarning(messagehdlr,
"Iteration limit exceeded in relative interior point computation.\n");
18482alpha = primal[lp->
ncols];
18485 SCIPsetDebugMsg(
set,
"Solved relative interior lp with objective %g.\n", objval);
18488 for( j = 0; j < lp->
ncols; ++j )
18489point[j] = primal[j]/alpha;
18496 for( i = 0; i < lp->
nrows; ++i )
18506row = lp->
rows[i];
18507assert( row !=
NULL);
18513assert( nnonz <= lp->ncols );
18514rowcols = row->
cols;
18515rowvals = row->
vals;
18518 for( j = 0; j < nnonz; ++j )
18519sum += rowvals[j] * primal[rowcols[j]->lppos];
18543 if( inclobjcutoff )
18552 for( j = 0; j < lp->
ncols; ++j )
18561 for( j = 0; j < lp->
ncols; ++j )
18568col = lp->
cols[j];
18569assert( col !=
NULL);
18571val = primal[col->
lppos] / alpha;
18653assert(lp !=
NULL);
18654assert(point !=
NULL);
18655assert(success !=
NULL);
18660 if( timelimit <= 0.0 || iterlimit <= 0 )
18664assert(lp->
nrows>= 0);
18665assert(lp->
ncols>= 0);
18666 if( lp->
ncols== 0 )
18671inclobjcutoff =
FALSE;
18676 if( lp->
nrows== 0 && !inclobjcutoff )
18689retcode =
computeRelIntPoint(lpi,
set, messagehdlr, lp, prob, relaxrows, inclobjcutoff, timelimit, iterlimit, point, success);
18716assert(lp !=
NULL);
18732 intnfixedcols = 0;
18733 intnalreadyfixedcols = 0;
18734 intnfixedrows = 0;
18736 intnimplicitfixedrows = 0;
18741 intnbasicequalities = 0;
18745ncols = lp->
ncols;
18746nrows = lp->
nrows;
18749 for( c = ncols - 1 ; c >= 0; --c )
18762++nalreadyfixedcols;
18767 for(
r= nrows - 1;
r>= 0; --
r)
18800++nimplicitfixedrows;
18806++nbasicequalities;
18808assert(nfixedcols + nfixedrows <= ncols + nineq + nbasicequalities - nrows - nalreadyfixedcols - nimplicitfixedrows);
18810 if( ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols > 0 )
18811lp->
degeneracy= 1.0 - 1.0 * (nfixedcols + nfixedrows) / (ncols + nineq - nrows + nbasicequalities - nalreadyfixedcols);
18816lp->
varconsratio= 1.0 * (ncols + nineq + nbasicequalities - nfixedcols - nfixedrows - nalreadyfixedcols) / nrows;
18845assert(lp !=
NULL);
18865assert(lp !=
NULL);
18885assert(lp !=
NULL);
18905assert(lp !=
NULL);
18925assert(lp !=
NULL);
18942assert(lp !=
NULL);
18953assert(lp !=
NULL);
18964assert(lp !=
NULL);
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)
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)
SCIP_DECL_SORTPTRCOMP(SCIProwComp)
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)
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
#define SCIP_EVENTTYPE_ROWSIDECHANGED
#define SCIP_EVENTTYPE_ROWADDEDLP
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_ROWCHANGED
#define SCIP_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_ROWDELETEDLP
#define SCIP_EVENTTYPE_ROWCOEFCHANGED
#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
enum SCIP_BoundType SCIP_BOUNDTYPE
@ 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
@ SCIP_LPPAR_BARRIERCONVTOL
@ SCIP_LPPAR_CONDITIONLIMIT
@ SCIP_LPPAR_ROWREPSWITCH
enum SCIP_BaseStat SCIP_BASESTAT
enum SCIP_VerbLevel SCIP_VERBLEVEL
enum SCIP_Objsense SCIP_OBJSENSE
enum SCIP_Retcode SCIP_RETCODE
SCIP_Real SCIPvarGetRelaxSol(SCIP_VAR *var, SCIP_SET *set)
internal methods for problem variables
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4