/** handle given linear constraint information */ static SCIP_RETCODE handleLinearCons( SCIP* scip, /**< SCIP data structure */ SCIP_VAR** vars, /**< array of variables */ SCIP_Real* vals, /**< array of coefficients values (or NULL if all coefficient values are 1) */ int nvars, /**< number of variables */ SCIP_Bool transformed, /**< transformed constraint? */ SparseGraph* G /**< graph */ ) { int v; SCIP_VAR** activevars; SCIP_Real* activevals; int nactivevars; SCIP_Real activeconstant = 0.0; assert( scip != NULL ); assert( nvars > 0 ); /* duplicate variable and value array */ nactivevars = nvars; SCIP_CALL( SCIPduplicateBufferArray(scip, &activevars, vars, nactivevars ) ); if( vals != NULL ) SCIP_CALL( SCIPduplicateBufferArray(scip, &activevals, vals, nactivevars ) ); else { SCIP_CALL( SCIPallocBufferArray(scip, &activevals, nactivevars) ); for( v = 0; v < nactivevars; ++v ) activevals[v] = 1.0; } /* retransform given variables to active variables */ SCIP_CALL( getActiveVariables(scip, activevars, activevals, &nactivevars, &activeconstant, transformed) ); /* print constraint */ SCIP_CALL( createEdgesFromRow(scip, activevars, activevals, nactivevars, G) ); /* free buffer arrays */ SCIPfreeBufferArray(scip, &activevars); SCIPfreeBufferArray(scip, &activevals); return SCIP_OKAY; }
/** prints given linear constraint information in PPM format to file stream */ static SCIP_RETCODE printLinearCons( SCIP* scip, /**< SCIP data structure */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_READERDATA* readerdata, /**< information for reader */ SCIP_VAR** vars, /**< array of variables */ SCIP_Real* vals, /**< array of coefficients values (or NULL if all coefficient values are 1) */ int nvars, /**< number of variables */ int ncompletevars, /**< number of variables in whole problem */ SCIP_Bool transformed, /**< transformed constraint? */ SCIP_Real* maxcoef, /**< maximal coefficient */ SCIP_Bool printbool /**< print row or calculate maximum coefficient */ ) { int v; SCIP_VAR** activevars; SCIP_Real* activevals; int nactivevars; SCIP_Real activeconstant = 0.0; assert( scip != NULL ); assert( vars != NULL ); assert( nvars > 0 ); assert( readerdata != NULL ); /* duplicate variable and value array */ nactivevars = nvars; SCIP_CALL( SCIPduplicateBufferArray(scip, &activevars, vars, nactivevars ) ); if( vals != NULL ) { SCIP_CALL( SCIPduplicateBufferArray(scip, &activevals, vals, nactivevars ) ); } else { SCIP_CALL( SCIPallocBufferArray(scip, &activevals, nactivevars) ); for( v = 0; v < nactivevars; ++v ) activevals[v] = 1.0; } /* retransform given variables to active variables */ SCIP_CALL( getActiveVariables(scip, activevars, activevals, &nactivevars, &activeconstant, transformed) ); if(!readerdata->rgb_relativ) { if(!printbool) for(v = 0; v < nactivevars; ++v) { if( REALABS(activevals[v]) > *maxcoef) *maxcoef = REALABS(activevals[v]); } else { assert (*maxcoef > 0); /* print constraint */ printRow(scip, file, readerdata, activevars, activevals, nactivevars, ncompletevars, *maxcoef); } } else { /* print constraint */ printRow(scip, file, readerdata, activevars, activevals, nactivevars, ncompletevars, *maxcoef); } /* free buffer arrays */ SCIPfreeBufferArray(scip, &activevars); SCIPfreeBufferArray(scip, &activevals); return SCIP_OKAY; }