|
Go to the documentation of this file. 58 assert(scalars != NULL); 59 assert(*vars != NULL); 60 assert(*scalars != NULL); 61 assert(nvars != NULL); 62 assert(constant != NULL); 66 if( requiredsize > *nvars ) 73 assert(requiredsize <= *nvars); 100 assert(vals != NULL); 102 rowidx = matrix-> nrows; 103 rangedorequality = FALSE; 108 matrix-> lhs[rowidx] = -rhs; 115 matrix-> lhs[rowidx] = lhs; 116 matrix-> rhs[rowidx] = rhs; 120 rangedorequality = TRUE; 133 if( rangedorequality ) 137 for( j = 0; j < nvars; j++ ) 139 assert(maxnnonzsmem > matrix-> nnonzs); 147 assert(matrix-> vars[probindex] == vars[j]); 152 assert(0 <= probindex && probindex < matrix->ncols); 161 for( j = 0; j < nvars; j++ ) 163 assert(maxnnonzsmem > matrix-> nnonzs); 172 assert(matrix-> vars[probindex] == vars[j]); 182 assert(0 <= probindex && probindex < matrix->ncols); 217 assert(scip != NULL); 218 assert(matrix != NULL); 219 assert(vars != NULL || nvars == 0); 221 assert(rowadded != NULL); 236 activeconstant = 0.0; 248 for( v = 0; v < nactivevars; v++ ) 257 lhs -= activeconstant; 259 rhs -= activeconstant; 262 if( nactivevars > 0 ) 264 SCIP_CALL( addRow(scip, matrix, activevars, activevals, nactivevars, lhs, rhs, maxnnonzsmem, rowadded) ); 288 assert(scip != NULL); 289 assert(matrix != NULL); 303 for( i = 0; i < matrix-> nrows; i++ ) 307 for( ; rowpnt < rowend; rowpnt++ ) 315 for( i = 0; i < matrix-> ncols-1; i++ ) 320 for( i = 0; i < matrix-> nrows; i++ ) 326 for( ; rowpnt < rowend; rowpnt++, valpnt++ ) 328 assert(*rowpnt < matrix->ncols); 355 assert(scip != NULL); 356 assert(matrix != NULL); 358 for( row = 0; row < matrix-> nrows; row++ ) 368 rowend = rowpnt + matrix-> rowmatcnt[row]; 371 for( ; rowpnt < rowend; rowpnt++, valpnt++ ) 380 assert(matrix-> ncols > col); 439 const char* conshdlrname; 456 assert(scip != NULL); 457 assert(matrixptr != NULL); 458 assert(initialized != NULL); 459 assert(complete != NULL); 461 *initialized = FALSE; 474 for( i = 0; i < nconshdlrs; ++i ) 480 if( nconshdlrconss > 0 ) 484 if( (strcmp(conshdlrname, "linear") == 0) || (strcmp(conshdlrname, "setppc") == 0) 485 || (strcmp(conshdlrname, "logicor") == 0) || (strcmp(conshdlrname, "knapsack") == 0) 486 || (strcmp(conshdlrname, "varbound") == 0) ) 489 nconss += nconshdlrconss; 493 nconssall += nconshdlrconss; 504 if( nconss < nconssall ) 526 for( i = nvars - 1; i >= 0; --i ) 542 matrix-> ncols = nvars; 561 for( v = 0; v < matrix-> ncols; v++ ) 563 var = matrix-> vars[v]; 589 for( i = 0; i < nconshdlrs; ++i ) 605 if( strcmp(conshdlrname, "linear") == 0 ) 607 for( c = 0; c < nconshdlrconss && (c % 1000 != 0 || ! SCIPisStopped(scip)); ++c ) 609 cons = conshdlrconss[c]; 618 assert(cnt < nconss); 619 matrix-> cons[cnt] = cons; 624 else if( strcmp(conshdlrname, "setppc") == 0 ) 626 for( c = 0; c < nconshdlrconss && (c % 1000 != 0 || ! SCIPisStopped(scip)); ++c ) 631 cons = conshdlrconss[c]; 657 assert(cnt < nconss); 658 matrix-> cons[cnt] = cons; 663 else if( strcmp(conshdlrname, "logicor") == 0 ) 665 for( c = 0; c < nconshdlrconss && (c % 1000 != 0 || ! SCIPisStopped(scip)); ++c ) 667 cons = conshdlrconss[c]; 675 assert(cnt < nconss); 676 matrix-> cons[cnt] = cons; 681 else if( strcmp(conshdlrname, "knapsack") == 0 ) 683 if( nconshdlrconss > 0 ) 691 for( c = 0; c < nconshdlrconss && (c % 1000 != 0 || ! SCIPisStopped(scip)); ++c ) 695 cons = conshdlrconss[c]; 701 if( nvars > valssize ) 703 valssize = (int) (1.5 * nvars); 707 for( v = 0; v < nvars; v++ ) 716 assert(cnt < nconss); 717 matrix-> cons[cnt] = cons; 725 else if( strcmp(conshdlrname, "varbound") == 0 ) 727 if( nconshdlrconss > 0 ) 736 for( c = 0; c < nconshdlrconss && (c % 1000 != 0 || ! SCIPisStopped(scip)); ++c ) 738 cons = conshdlrconss[c]; 751 assert(cnt < nconss); 752 matrix-> cons[cnt] = cons; 762 assert(matrix-> nrows == cnt); 763 assert(matrix-> nrows <= nconss); 764 assert(matrix-> nnonzs <= nnonzstmp); 787 assert(scip != NULL); 788 assert(matrix != NULL); 790 if( (*matrix) != NULL ) 792 assert((*matrix)->colmatval != NULL); 793 assert((*matrix)->colmatind != NULL); 794 assert((*matrix)->colmatbeg != NULL); 795 assert((*matrix)->colmatcnt != NULL); 796 assert((*matrix)->lb != NULL); 797 assert((*matrix)->ub != NULL); 798 assert((*matrix)->nuplocks != NULL); 799 assert((*matrix)->ndownlocks != NULL); 801 assert((*matrix)->rowmatval != NULL); 802 assert((*matrix)->rowmatind != NULL); 803 assert((*matrix)->rowmatbeg != NULL); 804 assert((*matrix)->rowmatcnt != NULL); 805 assert((*matrix)->lhs != NULL); 806 assert((*matrix)->rhs != NULL); 834 (*matrix)->nrows = 0; 835 (*matrix)->ncols = 0; 836 (*matrix)->nnonzs = 0; 858 rowend = rowpnt + matrix-> rowmatcnt[row]; 862 for(; (rowpnt < rowend); rowpnt++, valpnt++) 873 printf( " <= %.15g ###\n", matrix-> rhs[row]); 907 assert(scip != NULL); 908 assert(matrix != NULL); 909 assert(pclass != NULL); 921 classsizes[0] = matrix-> nrows; 923 for( t = 1; t < matrix-> nrows; ++t ) 924 pcset[pcsetfill++] = t; 927 for( c = 0; c < matrix-> ncols; ++c ) 937 for( ; (colpnt < colend); colpnt++, valpnt++ ) 942 if( scale[rowidx] == 0.0 ) 944 assert(scale[rowidx] != 0.0); 946 rowindices[i] = rowidx; 947 values[i] = aij / scale[rowidx]; 949 assert(pc < matrix->nrows); 952 assert(classsizes[pc] > 0); 954 if( classsizes[pc] == 0 ) 956 assert(pcsetfill < matrix->nrows); 957 pcset[pcsetfill++] = pc; 978 while( k < i && pcs[k] == startpc ) 988 assert(startk + t < i); 989 startval = values[startk + t]; 993 while( t < k - startk && SCIPisEQ(scip, startval, values[startk + t]) ) 997 newpclass = pcset[0]; 998 assert(pcsetfill > 0); 999 pcset[0] = pcset[--pcsetfill]; 1002 for( m = startk + startt; m < startk + t; m++ ) 1005 assert(rowindices[m] < matrix-> nrows); 1006 assert(newpclass < matrix->nrows); 1008 pclass[rowindices[m]] = newpclass; 1009 classsizes[newpclass]++; 1012 if( t == k - startk ) 1064 assert(scip != NULL); 1065 assert(matrix != NULL); 1066 assert(pclass != NULL); 1067 assert(varineq != NULL); 1079 classsizes[0] = matrix-> ncols; 1081 for( t = 1; t < matrix-> ncols; ++t ) 1082 pcset[pcsetfill++] = t; 1085 for( r = 0; r < matrix-> nrows; ++r ) 1095 for( ; (rowpnt < rowend); rowpnt++, valpnt++ ) 1101 varineq[colidx] = TRUE; 1103 if( scale[colidx] == 0.0 ) 1104 scale[colidx] = aij; 1105 assert(scale[colidx] != 0.0); 1107 colindices[i] = colidx; 1108 values[i] = aij / scale[colidx]; 1109 pc = pclass[colidx]; 1110 assert(pc < matrix->ncols); 1113 assert(classsizes[pc] > 0); 1115 if( classsizes[pc] == 0 ) 1117 assert(pcsetfill < matrix->ncols); 1118 pcset[pcsetfill++] = pc; 1139 while( k < i && pcs[k] == startpc ) 1143 if( k - startk > 1 ) 1144 SCIPsortRealInt(&(values[startk]), &(colindices[startk]), k - startk); 1149 assert(startk + t < i); 1150 startval = values[startk + t]; 1154 while( t < k - startk && SCIPisEQ(scip, startval, values[startk + t]) ) 1158 newpclass = pcset[0]; 1159 assert(pcsetfill > 0); 1160 pcset[0] = pcset[--pcsetfill]; 1163 for( m = startk + startt; m < startk + t; m++ ) 1166 assert(colindices[m] < matrix-> ncols); 1167 assert(newpclass < matrix->ncols); 1169 pclass[colindices[m]] = newpclass; 1170 classsizes[newpclass]++; 1173 if( t == k - startk ) 1203 #undef SCIPmatrixGetColValPtr 1204 #undef SCIPmatrixGetColIdxPtr 1205 #undef SCIPmatrixGetColNNonzs 1206 #undef SCIPmatrixGetNColumns 1207 #undef SCIPmatrixGetColUb 1208 #undef SCIPmatrixGetColLb 1209 #undef SCIPmatrixGetColNUplocks 1210 #undef SCIPmatrixGetColNDownlocks 1211 #undef SCIPmatrixGetVar 1212 #undef SCIPmatrixGetColName 1213 #undef SCIPmatrixGetRowValPtr 1214 #undef SCIPmatrixGetRowIdxPtr 1215 #undef SCIPmatrixGetRowNNonzs 1216 #undef SCIPmatrixGetRowName 1217 #undef SCIPmatrixGetNRows 1218 #undef SCIPmatrixGetRowLhs 1219 #undef SCIPmatrixGetRowRhs 1220 #undef SCIPmatrixIsRowRhsInfinity 1221 #undef SCIPmatrixGetNNonzs 1222 #undef SCIPmatrixGetRowMinActivity 1223 #undef SCIPmatrixGetRowMaxActivity 1224 #undef SCIPmatrixGetRowNMinActNegInf 1225 #undef SCIPmatrixGetRowNMinActPosInf 1226 #undef SCIPmatrixGetRowNMaxActNegInf 1227 #undef SCIPmatrixGetRowNMaxActPosInf 1228 #undef SCIPmatrixGetCons 1229 #undef SCIPmatrixUplockConflict 1230 #undef SCIPmatrixDownlockConflict 1238 assert(matrix != NULL); 1239 assert(0 <= col && col < matrix->ncols); 1250 assert(matrix != NULL); 1251 assert(0 <= col && col < matrix->ncols); 1262 assert(matrix != NULL); 1263 assert(0 <= col && col < matrix->ncols); 1273 assert(matrix != NULL); 1275 return matrix-> ncols; 1284 assert(matrix != NULL); 1286 return matrix-> ub[col]; 1295 assert(matrix != NULL); 1297 return matrix-> lb[col]; 1306 assert(matrix != NULL); 1307 assert(0 <= col && col < matrix->ncols); 1318 assert(matrix != NULL); 1319 assert(0 <= col && col < matrix->ncols); 1330 assert(matrix != NULL); 1331 assert(0 <= col && col < matrix->ncols); 1333 return matrix-> vars[col]; 1342 assert(matrix != NULL); 1343 assert(0 <= col && col < matrix->ncols); 1354 assert(matrix != NULL); 1355 assert(0 <= row && row < matrix->nrows); 1366 assert(matrix != NULL); 1367 assert(0 <= row && row < matrix->nrows); 1378 assert(matrix != NULL); 1379 assert(0 <= row && row < matrix->nrows); 1390 assert(matrix != NULL); 1391 assert(0 <= row && row < matrix->nrows); 1401 assert(matrix != NULL); 1403 return matrix-> nrows; 1412 assert(matrix != NULL); 1413 assert(0 <= row && row < matrix->nrows); 1415 return matrix-> lhs[row]; 1424 assert(matrix != NULL); 1425 assert(0 <= row && row < matrix->nrows); 1427 return matrix-> rhs[row]; 1436 assert(matrix != NULL); 1437 assert(0 <= row && row < matrix->nrows); 1447 assert(matrix != NULL); 1458 assert(matrix != NULL); 1459 assert(0 <= row && row < matrix->nrows); 1470 assert(matrix != NULL); 1471 assert(0 <= row && row < matrix->nrows); 1482 assert(matrix != NULL); 1483 assert(0 <= row && row < matrix->nrows); 1494 assert(matrix != NULL); 1495 assert(0 <= row && row < matrix->nrows); 1506 assert(matrix != NULL); 1507 assert(0 <= row && row < matrix->nrows); 1518 assert(matrix != NULL); 1519 assert(0 <= row && row < matrix->nrows); 1530 assert(matrix != NULL); 1531 assert(0 <= row && row < matrix->nrows); 1533 return matrix-> cons[row]; 1542 assert(matrix != NULL); 1543 assert(0 <= col && col < matrix->ncols); 1554 assert(matrix != NULL); 1555 assert(0 <= col && col < matrix->ncols); void SCIPsortRealInt(SCIP_Real *realarray, int *intarray, int len)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
int SCIPgetNVars(SCIP *scip)
void SCIPmatrixPrintRow(SCIP *scip, SCIP_MATRIX *matrix, int row)
SCIP_RETCODE SCIPmatrixGetParallelRows(SCIP *scip, SCIP_MATRIX *matrix, SCIP_Real *scale, int *pclass)
SCIP_VAR * SCIPmatrixGetVar(SCIP_MATRIX *matrix, int col)
const char * SCIPvarGetName(SCIP_VAR *var)
int SCIPmatrixGetNRows(SCIP_MATRIX *matrix)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
Constraint handler for variable bound constraints .
#define SCIPreallocBufferArray(scip, ptr, num)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
static SCIP_RETCODE addConstraint(SCIP *scip, SCIP_MATRIX *matrix, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhs, SCIP_Real rhs, int maxnnonzsmem, SCIP_Bool *rowadded)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_CONS * SCIPmatrixGetCons(SCIP_MATRIX *matrix, int row)
int SCIPgetNConshdlrs(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPgetNVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint SCIPgetCapacityKnapsack(SCIP *scip, SCIP_CONS *cons)
#define SCIPfreeMemoryArray(scip, ptr)
void SCIPmatrixFree(SCIP *scip, SCIP_MATRIX **matrix)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_Real SCIPgetLhsVarbound(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
enum SCIP_Retcode SCIP_RETCODE
SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons)
void SCIPsortIntIntReal(int *intarray1, int *intarray2, SCIP_Real *realarray, int len)
#define BMSclearMemoryArray(ptr, num)
SCIP_RETCODE SCIPmatrixGetParallelCols(SCIP *scip, SCIP_MATRIX *matrix, SCIP_Real *scale, int *pclass, SCIP_Bool *varineq)
SCIP_Real SCIPmatrixGetRowMaxActivity(SCIP_MATRIX *matrix, int row)
Constraint handler for the set partitioning / packing / covering constraints .
SCIP_VAR ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPmatrixCreate(SCIP *scip, SCIP_MATRIX **matrixptr, SCIP_Bool *initialized, SCIP_Bool *complete)
int SCIPmatrixGetRowNNonzs(SCIP_MATRIX *matrix, int row)
SCIP_Real SCIPmatrixGetRowLhs(SCIP_MATRIX *matrix, int row)
Constraint handler for knapsack constraints of the form , x binary and .
int SCIPgetNConss(SCIP *scip)
SCIP_Real * SCIPmatrixGetColValPtr(SCIP_MATRIX *matrix, int col)
SCIP_CONSHDLR ** SCIPgetConshdlrs(SCIP *scip)
int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE calcActivityBounds(SCIP *scip, SCIP_MATRIX *matrix)
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
int SCIPmatrixGetRowNMaxActPosInf(SCIP_MATRIX *matrix, int row)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
const char * SCIPconsGetName(SCIP_CONS *cons)
int * SCIPmatrixGetRowIdxPtr(SCIP_MATRIX *matrix, int row)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
const char * SCIPmatrixGetRowName(SCIP_MATRIX *matrix, int row)
int SCIPmatrixGetRowNMaxActNegInf(SCIP_MATRIX *matrix, int row)
const char * SCIPmatrixGetColName(SCIP_MATRIX *matrix, int col)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Real SCIPgetRhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPmatrixGetColLb(SCIP_MATRIX *matrix, int col)
SCIP_Real * SCIPmatrixGetRowValPtr(SCIP_MATRIX *matrix, int row)
SCIP_Real SCIPgetVbdcoefVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPmatrixGetColUb(SCIP_MATRIX *matrix, int col)
SCIP_Bool SCIPmatrixDownlockConflict(SCIP_MATRIX *matrix, int col)
#define SCIPfreeBufferArrayNull(scip, ptr)
int * SCIPmatrixGetColIdxPtr(SCIP_MATRIX *matrix, int col)
SCIP_Bool * isrhsinfinite
SCIP_VAR * SCIPgetVbdvarVarbound(SCIP *scip, SCIP_CONS *cons)
Constraint handler for linear constraints in their most general form, .
int SCIPmatrixGetRowNMinActNegInf(SCIP_MATRIX *matrix, int row)
data structure for MIP matrix
public methods for matrix
#define SCIPallocClearMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
static SCIP_RETCODE setColumnMajorFormat(SCIP *scip, SCIP_MATRIX *matrix)
static const SCIP_Real scalars[]
SCIP_Real SCIPmatrixGetRowRhs(SCIP_MATRIX *matrix, int row)
SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPmatrixIsRowRhsInfinity(SCIP_MATRIX *matrix, int row)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
int SCIPvarGetProbindex(SCIP_VAR *var)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPmatrixGetRowMinActivity(SCIP_MATRIX *matrix, int row)
SCIP_Bool SCIPmatrixUplockConflict(SCIP_MATRIX *matrix, int col)
#define SCIPfreeBuffer(scip, ptr)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPmatrixGetColNDownlocks(SCIP_MATRIX *matrix, int col)
int SCIPmatrixGetNNonzs(SCIP_MATRIX *matrix)
int SCIPmatrixGetRowNMinActPosInf(SCIP_MATRIX *matrix, int row)
static SCIP_RETCODE addRow(SCIP *scip, SCIP_MATRIX *matrix, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhs, SCIP_Real rhs, int maxnnonzsmem, SCIP_Bool *rowadded)
#define SCIPfreeBufferArray(scip, ptr)
SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPmatrixGetColNUplocks(SCIP_MATRIX *matrix, int col)
common defines and data types used in all packages of SCIP
SCIP_VAR * SCIPgetVarVarbound(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE getActiveVariables(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant)
SCIP_CONS ** SCIPconshdlrGetCheckConss(SCIP_CONSHDLR *conshdlr)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPmatrixGetNColumns(SCIP_MATRIX *matrix)
#define SCIPallocBuffer(scip, ptr)
int SCIPmatrixGetColNNonzs(SCIP_MATRIX *matrix, int col)
|