Todo List
Member applyLocalBndchgsToCopiedMastervars (SCIP *scip, SCIP_CONS *cons, int *propcount)
this might lead to an error with linking variables ?
Member applyLocalBndchgsToPricedMastervars (SCIP *scip, SCIP_CONS *cons, int *propcount)
check if this really works with linking variables
Member applyProbing (SCIP *scip, SCIP_VAR **vars, int nvars, SCIP_VAR *probingvar, SCIP_Bool probingdir, SCIP_Bool solvelp, SCIP_Longint *nlpiterations, SCIP_Real *proplbs, SCIP_Real *propubs, SCIP_Real *lpobjvalue, SCIP_Bool *lpsolved, SCIP_Bool *lperror, SCIP_Bool *cutoff)

use maxproprounds

handle the feasible result

Member assignConstraintsToRepresentatives (SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool *consismaster, SCIP_HASHMAP *constoblock, int *vartoblock, int *nextblock, int *blockrepresentative)
what about deleted variables?
Member checkSolNew (SCIP *pricingprob, SCIP_SOL **sols, int idx, SCIP_Bool *isnew)
ensure that the solutions are sorted
Member createColumnindexList (SCIP *scip, vector< vector< int > > &rowindices, vector< vector< int > > &columnindices)
broken
Member createColumnindexList (SCIP *scip, gcg::Seeed *seeed, vector< vector< int > > &rowindices, vector< vector< int > > &columnindices)
broken
Member createSeeedFromMasterconss (SCIP *scip, gcg::Seeed **newSeeed, int *masterconss, int nmasterconss, gcg::Seeed *seeed, gcg::Seeedpool *seeedpool, SCIP_Bool exact)
what about deleted variables?
File dec_colors.cpp

allow to set range of subsets

add parameters for min/max subsets

allow for a fine grained control (ignore rhs, lhs and only consider constraint handler?)

File dec_connected.c
allow decompositions with only one pricing problem by just removing generalized covering and partitioning constraints The detector will detect block diagonal matrix structures as wells as generalized set partitioning or covering master problems.
Class DEC_DetectorData

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

fill in the necessary detector data

Member DECdecompSetStairlinkingvars (SCIP *scip, DEC_DECOMP *decomp, SCIP_VAR ***stairlinkingvars, int *nstairlinkingvars)
A valid check needs to be implemented
Member DECdetermineConsBlock (SCIP *scip, DEC_DECOMP *decomp, SCIP_CONS *cons, int *block)
: maybe this is possible in such a way that a staircase structure is preserved
Member fixVariables (SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, int *selection, SCIP_HEURDATA *heurdata, SCIP_Real *intfixingrate, SCIP_Real *zerofixingrate, SCIP_Bool *success)
can there be aggregated linking variables?
Member gcg::BipartiteGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_)

The nonzeroness is not checked, all variables in the variable array are considered

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::ColumnGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_)

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::HypercolGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_)

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::HyperrowcolGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss, int nvars)

The nonzeroness is not checked, all variables in the variable array are considered

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::HyperrowGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_)

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::RowGraph< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_)

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::RowGraphWeighted< T >::createFromMatrix (SCIP_CONS **conss, SCIP_VAR **vars, int nconss_, int nvars_, DISTANCE_MEASURE dist, WEIGHT_TYPE w_type)

skip all variables that have a zero coeffient or where all coefficients add to zero

Do more then one entry per variable actually work?

Member gcg::Seeed::evaluate (SCORETYPE type)
bound calculation for unfinished decompositions could be more precise
Member gcg::Seeedpool::createVarClassifierForObjValueSigns ()
correct?
Member GCG_DECL_BRANCHACTIVEMASTER (branchActiveMasterRyanfoster)
it is not clear if linking variables interfere with ryan foster branching
Member GCGapplyGcgrens (SCIP *scip, SCIP_HEUR *heur, SCIP_RESULT *result, SCIP_Real minfixingrate, SCIP_Real minimprove, SCIP_Longint maxnodes, SCIP_Longint nstallnodes, SCIP_Bool binarybounds, SCIP_Bool uselprows)
check for thread safeness
Member GCGbranchGenericInitbranch (SCIP *masterscip, SCIP_BRANCHRULE *branchrule, SCIP_RESULT *result, int **checkedblocks, int *ncheckedblocks, GCG_STRIP ****checkedblockssortstrips, int **checkedblocksnsortstrips)
copy memory
Member GCGconsGetVals (SCIP *scip, SCIP_CONS *cons, SCIP_Real *vals, int nvals)
SOS1 & SOS2 not implemented yet
Member GCGoriginalVarAddMasterVar (SCIP *scip, SCIP_VAR *origvar, SCIP_VAR *var, SCIP_Real val)
this method needs a little love
Member GCGoriginalVarRemoveMasterVar (SCIP *scip, SCIP_VAR *origvar, SCIP_VAR *var)
this method needs a little love
Member GCGpricerPrintPricingStatistics (SCIP *scip, FILE *file)
add constraint statistics: how many constraints (instead of cuts) have been added?
Member GCGpricerPrintStatistics (SCIP *scip, FILE *file)
add constraint statistics: how many constraints (instead of cuts) have been added?
Member GCGrelaxEndProbing (SCIP *scip)
solve master problem again
Member GCGtransformMastersolToOrigsol (SCIP *scip, SCIP_SOL *mastersol, SCIP_SOL **origsol)

think about types of epsilons used in this method

handle infinite master solution values

this may be the wrong place for this case, handle it before the while loop and remove the similar case in the next while loop

File gcgvar.c
capture and release variables stored in other variable's data?
Member getBestMastervar (SCIP *scip, SCIP_SOL *mastersol, SCIP_Real *activities, int *blocknr, SCIP_Bool *ignored, SCIP_Bool useobj, int *index, int *violchange)

handle copied original variables and linking variables

handle rays

Member HEUR_TIMING
should heuristic be called during the pricing loop or only after solving a node relaxation?
Member ObjPricerGcg::pricingLoop (PricingType *pricetype, SCIP_RESULT *result, int *nfoundvars, SCIP_Real *lowerbound, SCIP_Bool *bestredcostvalid)

perhaps solve remaining pricing problems, if only few left?

solve all pricing problems all k iterations?

Member ObjPricerGcg::setPricingObjs (PricingType *pricetype, SCIP_Bool stabilize)
this method could use more parameters as it is private
Member SCIP_DECL_CONSPROP (consPropMasterbranch)
count number of propagations
Member SCIP_DECL_DISPOUTPUT (SCIPdispOutputNLPAvgIters)
Currently we are using the total number of nodes to compute the average LP iterations number. The reason for that is, that for the LP iterations only the total number (over all runs) are stored in the statistics. It would be nicer if the statistic also stores the number of LP iterations for the current run similar to the nodes.
Member SCIP_DECL_HEUREXEC (heurExecGcgzirounding)

This assertion has been commented out due to numerical troubles

This is only necessary for rows containing fractional variables.

Member SCIP_DECL_HEUREXEC (heurExecGcgrins)
check for thread safeness
Member SCIP_DECL_HEUREXEC (heurExecGreedycolsel)
>= should not happen, replace it by == ?
Member SCIP_DECL_HEUREXEC (heurExecOrigdiving)
maybe this is unneccessary since solutions are also added in GCGrelaxUpdateCurrentSol()
Member SCIP_DECL_HEUREXEC (heurExecRestmaster)
check for thread safeness
Member SCIP_DECL_HEUREXEC (heurExecRelaxcolsel)
>= should not happen, replace it by == ?
Member SCIP_DECL_PRICERFARKAS (ObjPricerGcg::scip_farkas)

This is just a workaround around SCIP stages!

This is just a workaround around SCIP stages!

Member SCIP_DECL_PRICERREDCOST (ObjPricerGcg::scip_redcost)
This is just a workaround around SCIP stages!
Member SCIPincludeDetectorCompgreedily (SCIP *scip)

create compgreedily detector data here

add compgreedily detector parameters

Member SCIPincludeDetectorConnected_noNewLinkingVars (SCIP *scip)

create connected_noNewLinkingVars detector data here

add connected_noNewLinkingVars detector parameters

Member SCIPincludeDetectorConnectedbase (SCIP *scip)

create connectedbase detector data here

add connectedbase detector parameters

Member SCIPincludeDetectorConsclass (SCIP *scip)

create consclass detector data here

add consclass detector parameters

Member SCIPincludeDetectorConstype (SCIP *scip)

create constype detector data here

add constype detector parameters

Member SCIPincludeDetectorDensemasterconss (SCIP *scip)

create densemasterconss detector data here

add densemasterconss detector parameters

Member SCIPincludeDetectorGeneralmastersetcover (SCIP *scip)

create generalmastersetcover detector data here

add generalmastersetcover detector parameters

Member SCIPincludeDetectorGeneralmastersetpack (SCIP *scip)

create generalmastersetpack detector data here

add generalmastersetpack detector parameters

Member SCIPincludeDetectorGeneralmastersetpart (SCIP *scip)

create generalmastersetpart detector data here

add generalmastersetpart detector parameters

Member SCIPincludeDetectorMastersetcover (SCIP *scip)

create mastersetcover detector data here

add mastersetcover detector parameters

Member SCIPincludeDetectorMastersetpack (SCIP *scip)

create mastersetpack detector data here

add mastersetpack detector parameters

Member SCIPincludeDetectorMastersetpart (SCIP *scip)

create mastersetpart detector data here

add mastersetpart detector parameters

Member SCIPincludeDetectorPostprocess (SCIP *scip)

create postprocess detector data here

add postprocess detector parameters

Member SCIPincludeDetectorVarclass (SCIP *scip)

create varclass detector data here

add varclass detector parameters

Member searchZeroMastervar (SCIP *scip, int block, SCIP_VAR **zeromastervar)

it would be more efficient to "mark" master variables as being trivial

it would be more efficient to "mark" master variables as being trivial

Member selectExtremePoints (SCIP *scip, SCIP_HEURDATA *heurdata, int *selection, int *nactualpts, SCIP_Bool *success)

handle infinite master solution values

handle infinite master solution values

Member selectExtremePoints (SCIP *scip, SCIP_HEURDATA *heurdata, int *selection, SCIP_Bool *success)

handle infinite master solution values

handle infinite master solution values

Member Separate (SCIP *scip, SCIP_VAR **F, int Fsize, SCIP_VAR **IndexSet, int IndexSetSize, GCG_COMPSEQUENCE *S, int Ssize, GCG_RECORD *record)
mb: this is a filter
Member solveDiagonalBlocks (SCIP *scip, SCIP_RELAXDATA *relaxdata, SCIP_RESULT *result, SCIP_Real *lowerbound)
maybe add a constraint here to indicate that it has been decomposed