Methods you should know for writing GCG plug-ins

In the following, we list the most important methods you should know when starting to write a plugin for GCG. We assume knowledge of basic SCIP methods and only list GCG-specific methods. The complete list of public interface methods provided by GCG can be found here. The SCIP pointer that a methods takes as argument should be either the original or the reformulated SCIP instance, depending on the context. In general, methods defined in relax_gcg.h need a pointer to the original SCIP instance while methods defined in pricer_gcg.h need a pointer to the reformulated SCIP instance.

  • GCGmasterGetOrigprob(): given the pointer to the SCIP instance representing the master problem, returns the pointer to the original SCIP instance
  • GCGgetMasterprob(): given the pointer to the original SCIP instance, returns the pointer to the SCIP instance representing the master problem
  • GCGgetNPricingprobs(): returns the number of pricing problems
  • GCGgetPricingprob(): returns a specific pricing problem
  • GCGrelaxGetCurrentOrigSol(): returns the current original solution candidate, i.e., the current solution of the master LP transferred back to the original problem space
  • GCGrelaxUpdateCurrentSol(): updates the current original solution candidate, i.e., transfers the current solution of the master LP back to the original problem space and stores it
  • GCGtransformMastersolToOrigsol(): transforms a given primal solution of the master problem to the original problem
  • GCGrelaxStartProbing(): starts probing mode in master problem (probing in the original problem should have been started directly before that)
  • GCGrelaxPerformProbing() and GCGrelaxPerformProbingWithPricing(): After both SCIP instance were switched to probing mode by SCIPstartProbing() and GCGrelaxStartProbing(), a probing node in the original problem was created and changes were performed at this node, these methods create a corresponding probing node in the master SCIP instance, transfer changes to this node, and solve the master LP of that node with or without pricing. An origbranch constraint should be added to the original probing node and the necessary data and a branching rule that is able to transfer the bound changes needs to be stored in this constraint (see How to add branching rules to GCG).
  • GCGrelaxEndProbing(): ends probing mode in the master problem