Scippy

SCIP

Solving Constraint Integer Programs

cons_countsols.c File Reference

Detailed Description

constraint handler for counting feasible solutions

Author
Stefan Heinz
Michael Winkler

If this constraint handler is activated than it counts or collects all feasible solutions. We refer to How to use SCIP to count/enumerate feasible solutions for more details about using SCIP for counting feasible solutions.

Definition in file cons_countsols.c.

#include <string.h>
#include "scip/cons_and.h"
#include "scip/cons_knapsack.h"
#include "scip/cons_bounddisjunction.h"
#include "scip/cons_logicor.h"
#include "scip/cons_setppc.h"
#include "scip/cons_varbound.h"
#include "scip/cons_countsols.h"
#include "scip/dialog_default.h"

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "countsols"
 
#define CONSHDLR_DESC   "constraint to count feasible solutions"
 
#define CONSHDLR_ENFOPRIORITY   -9999999
 
#define CONSHDLR_CHECKPRIORITY   -9999999
 
#define CONSHDLR_EAGERFREQ   100
 
#define CONSHDLR_NEEDSCONS   FALSE
 
#define DEFAULT_SPARSETEST   TRUE
 
#define DEFAULT_DISCARDSOLS   TRUE
 
#define DEFAULT_ACTIVE   FALSE
 
#define DEFAULT_COLLECT   FALSE
 
#define DEFAULT_SOLLIMIT   -1LL
 
#define DISP_SOLS_NAME   "sols"
 
#define DISP_SOLS_DESC   "number of detected feasible solutions"
 
#define DISP_SOLS_HEADER   " sols "
 
#define DISP_SOLS_WIDTH   7
 
#define DISP_SOLS_PRIORITY   110000
 
#define DISP_SOLS_POSITION   100000
 
#define DISP_SOLS_STRIPLINE   TRUE
 
#define DISP_CUTS_NAME   "feasST"
 
#define DISP_CUTS_DESC   "number of detected non trivial feasible subtrees"
 
#define DISP_CUTS_HEADER   "feasST"
 
#define DISP_CUTS_WIDTH   6
 
#define DISP_CUTS_PRIORITY   110000
 
#define DISP_CUTS_POSITION   110000
 
#define DISP_CUTS_STRIPLINE   TRUE
 
#define CUTOFF_CONSTRAINT(x)   SCIP_RETCODE x (SCIP* scip, SCIP_SOL* sol, SCIP_CONSHDLRDATA* conshdlrdata)
 
#define consCopyCountsols   NULL
 

Typedefs

typedef SCIP_Longint Int
 

Functions

static void allocInt (Int *value)
 
static void setInt (Int *value, SCIP_Longint newvalue)
 
static void setPowerOfTwo (Int *value, SCIP_Longint exponent)
 
static void freeInt (Int *value)
 
static void addOne (Int *value)
 
static void addInt (Int *value, Int *summand)
 
static void multInt (Int *value, SCIP_Longint factor)
 
static void toString (Int value, char **buffer, int buffersize)
 
static SCIP_Longint getNCountedSols (Int value, SCIP_Bool *valid)
 
static SCIP_Bool varIsUnfixedLocal (SCIP_VAR *var)
 
static SCIP_RETCODE conshdlrdataCreate (SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
 
static void checkSolutionOrig (SCIP *scip, SCIP_SOL *sol, SCIP_CONSHDLRDATA *conshdlrdata)
 
static SCIP_RETCODE checkParameters (SCIP *scip)
 
static CUTOFF_CONSTRAINT (addBinaryCons)
 
static CUTOFF_CONSTRAINT (addIntegerCons)
 
static SCIP_RETCODE collectSolution (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_SOL *sol)
 
static SCIP_RETCODE countSparseSol (SCIP *scip, SCIP_SOL *sol, SCIP_Bool feasible, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_RESULT *result)
 
static SCIP_RETCODE checkLogicor (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_Bool *satisfied)
 
static SCIP_RETCODE checkKnapsack (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_Bool *satisfied)
 
static SCIP_RETCODE checkBounddisjunction (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_Bool *satisfied)
 
static SCIP_RETCODE checkVarbound (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_Bool *satisfied)
 
static SCIP_RETCODE checkFeasSubtree (SCIP *scip, SCIP_SOL *sol, SCIP_Bool *feasible)
 
static SCIP_RETCODE checkSolution (SCIP *scip, SCIP_SOL *sol, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_RESULT *result)
 
static SCIP_RETCODE includeConshdlrCountsols (SCIP *scip, SCIP_Bool dialogs)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyCountsols)
 
static SCIP_DECL_CONSFREE (consFreeCountsols)
 
static SCIP_DECL_CONSINIT (consInitCountsols)
 
static SCIP_DECL_CONSEXIT (consExitCountsols)
 
static SCIP_DECL_CONSINITSOL (consInitsolCountsols)
 
static SCIP_DECL_CONSEXITSOL (consExitsolCountsols)
 
static SCIP_DECL_CONSENFOLP (consEnfolpCountsols)
 
static SCIP_DECL_CONSENFOPS (consEnfopsCountsols)
 
static SCIP_DECL_CONSCHECK (consCheckCountsols)
 
static SCIP_DECL_CONSLOCK (consLockCountsols)
 
 SCIP_DECL_DIALOGEXEC (SCIPdialogExecCountPresolve)
 
 SCIP_DECL_DIALOGEXEC (SCIPdialogExecCount)
 
static SCIP_DECL_SORTPTRCOMP (varCompProbindex)
 
static SCIP_RETCODE writeExpandedSolutions (SCIP *scip, FILE *file, SCIP_VAR **allvars, int nallvars, SCIP_VAR **activevars, int nactivevars, SCIP_HASHMAP *hashmap, SCIP_SPARSESOL **sols, int nsols)
 
 SCIP_DECL_DIALOGEXEC (SCIPdialogExecWriteAllsolutions)
 
static SCIP_RETCODE createCountDialog (SCIP *scip)
 
static SCIP_DECL_DISPOUTPUT (dispOutputSols)
 
static SCIP_DECL_DISPOUTPUT (dispOutputFeasSubtrees)
 
SCIP_RETCODE SCIPincludeConshdlrCountsols (SCIP *scip)
 
SCIP_RETCODE SCIPcount (SCIP *scip)
 
SCIP_Longint SCIPgetNCountedSols (SCIP *scip, SCIP_Bool *valid)
 
void SCIPgetNCountedSolsstr (SCIP *scip, char **buffer, int buffersize, int *requiredsize)
 
SCIP_Longint SCIPgetNCountedFeasSubtrees (SCIP *scip)
 
void SCIPgetCountedSparseSols (SCIP *scip, SCIP_VAR ***vars, int *nvars, SCIP_SPARSESOL ***sols, int *nsols)
 
SCIP_RETCODE SCIPsetParamsCountsols (SCIP *scip)
 

Macro Definition Documentation

#define CONSHDLR_DESC   "constraint to count feasible solutions"

Definition at line 53 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define CONSHDLR_ENFOPRIORITY   -9999999

priority of the constraint handler for constraint enforcing

Definition at line 54 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define CONSHDLR_CHECKPRIORITY   -9999999

priority of the constraint handler for checking feasibility

Definition at line 55 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define CONSHDLR_EAGERFREQ   100

frequency for using all instead of only the useful constraints in separation, propagation and enforcement, -1 for no eager evaluations, 0 for first only

Definition at line 56 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define CONSHDLR_NEEDSCONS   FALSE

should the constraint handler be skipped, if no constraints are available?

Definition at line 59 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DEFAULT_SPARSETEST   TRUE

sparse test on or off

Definition at line 62 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DEFAULT_DISCARDSOLS   TRUE

is it allowed to discard solutions

Definition at line 63 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DEFAULT_ACTIVE   FALSE

is the constraint handler active

Definition at line 64 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DEFAULT_COLLECT   FALSE

should the solutions be collected

Definition at line 65 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DEFAULT_SOLLIMIT   -1LL

counting stops, if the given number of solutions were found (-1: no limit)

Definition at line 66 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_SOLS_NAME   "sols"

Definition at line 69 of file cons_countsols.c.

Referenced by includeConshdlrCountsols(), and SCIP_DECL_DISPOUTPUT().

#define DISP_SOLS_DESC   "number of detected feasible solutions"

Definition at line 70 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_SOLS_HEADER   " sols "

Definition at line 71 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_SOLS_WIDTH   7

Definition at line 72 of file cons_countsols.c.

Referenced by includeConshdlrCountsols(), and SCIP_DECL_DISPOUTPUT().

#define DISP_SOLS_PRIORITY   110000

Definition at line 73 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_SOLS_POSITION   100000

Definition at line 74 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_SOLS_STRIPLINE   TRUE

Definition at line 75 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_CUTS_NAME   "feasST"

Definition at line 77 of file cons_countsols.c.

Referenced by includeConshdlrCountsols(), and SCIP_DECL_DISPOUTPUT().

#define DISP_CUTS_DESC   "number of detected non trivial feasible subtrees"

Definition at line 78 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_CUTS_HEADER   "feasST"

Definition at line 79 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_CUTS_WIDTH   6

Definition at line 80 of file cons_countsols.c.

Referenced by includeConshdlrCountsols(), and SCIP_DECL_DISPOUTPUT().

#define DISP_CUTS_PRIORITY   110000

Definition at line 81 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_CUTS_POSITION   110000

Definition at line 82 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define DISP_CUTS_STRIPLINE   TRUE

Definition at line 83 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

#define CUTOFF_CONSTRAINT (   x)    SCIP_RETCODE x (SCIP* scip, SCIP_SOL* sol, SCIP_CONSHDLRDATA* conshdlrdata)

creates and adds a constraint which cuts off the solution from the feasibility region

input:

  • scip : SCIP main data structure
  • sol : solution to cut off
  • conshdlrdata : constraint handler data

Definition at line 93 of file cons_countsols.c.

Referenced by checkParameters(), and CUTOFF_CONSTRAINT().

#define consCopyCountsols   NULL

Definition at line 1367 of file cons_countsols.c.

Referenced by includeConshdlrCountsols().

Typedef Documentation

typedef SCIP_Longint Int

Definition at line 48 of file cons_countsols.c.

Function Documentation

static void allocInt ( Int value)
static

allocates memory for the value pointer

Parameters
valuepointer to the value to allocate memory

Definition at line 134 of file cons_countsols.c.

References setInt().

Referenced by conshdlrdataCreate(), and countSparseSol().

static void setInt ( Int value,
SCIP_Longint  newvalue 
)
static

sets the value pointer to the new value

Parameters
valuepointer to the value to initialize
newvaluenew value

Definition at line 146 of file cons_countsols.c.

References setPowerOfTwo().

Referenced by allocInt(), countSparseSol(), and SCIP_DECL_CONSINIT().

static void setPowerOfTwo ( Int value,
SCIP_Longint  exponent 
)
static

sets a power of 2 to the given value

Parameters
valuepointer to the value to increase
exponentexponent for the base 2

Definition at line 163 of file cons_countsols.c.

References freeInt(), and SCIP_Longint.

Referenced by countSparseSol(), and setInt().

static void freeInt ( Int value)
static

free memory

Parameters
valuepointer to the value to free

Definition at line 181 of file cons_countsols.c.

References addOne().

Referenced by countSparseSol(), SCIP_DECL_CONSFREE(), and setPowerOfTwo().

static void addOne ( Int value)
static

adds one to the given value

Parameters
valuepointer to the value to increase

Definition at line 193 of file cons_countsols.c.

References addInt().

Referenced by checkSolution(), countSparseSol(), and freeInt().

static void addInt ( Int value,
Int summand 
)
static

adds the summand to the given value

Parameters
valuepointer to the value to increase
summandsummand to add on

Definition at line 207 of file cons_countsols.c.

References multInt().

Referenced by addOne(), and countSparseSol().

static void multInt ( Int value,
SCIP_Longint  factor 
)
static

multiplies the factor by the given value

Parameters
valuepointer to the value to increase
factorfactor to multiply with

Definition at line 222 of file cons_countsols.c.

References toString().

Referenced by addInt(), and countSparseSol().

static void toString ( Int  value,
char **  buffer,
int  buffersize 
)
static

method for creating a string out of an Int which is a mpz_t or SCIP_Longint

Parameters
valuenumber
bufferpointer to buffer for storing the string
buffersizelength of the buffer

Definition at line 239 of file cons_countsols.c.

References getNCountedSols(), SCIP_Longint, and SCIPsnprintf().

Referenced by multInt(), and SCIPgetNCountedSolsstr().

static SCIP_Longint getNCountedSols ( Int  value,
SCIP_Bool valid 
)
static

method for creating a SCIP_Longing out of an Int

Parameters
valuenumber to convert
validpointer to store if the return value is valid

Definition at line 255 of file cons_countsols.c.

References FALSE, SCIP_Bool, TRUE, and varIsUnfixedLocal().

Referenced by checkSolution(), SCIPgetNCountedSols(), and toString().

static SCIP_Bool varIsUnfixedLocal ( SCIP_VAR var)
static

returns whether a given integer variable is unfixed in the local domain

Parameters
varinteger variable

Definition at line 280 of file cons_countsols.c.

References conshdlrdataCreate(), NULL, SCIP_VARTYPE_CONTINUOUS, SCIPvarGetLbLocal(), SCIPvarGetType(), and SCIPvarGetUbLocal().

Referenced by checkKnapsack(), checkLogicor(), and getNCountedSols().

static SCIP_RETCODE conshdlrdataCreate ( SCIP scip,
SCIP_CONSHDLRDATA **  conshdlrdata 
)
static

creates the constraint handler data

Parameters
scipSCIP data structure
conshdlrdatapointer to store constraint handler data

Definition at line 294 of file cons_countsols.c.

References allocInt(), checkSolutionOrig(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, and SCIPallocMemory.

Referenced by includeConshdlrCountsols(), and varIsUnfixedLocal().

static void checkSolutionOrig ( SCIP scip,
SCIP_SOL sol,
SCIP_CONSHDLRDATA conshdlrdata 
)
static

check solution in original space

Parameters
scipSCIP data structure
solsolution to add
conshdlrdataconstraint handler data

Definition at line 326 of file cons_countsols.c.

References checkParameters(), FALSE, SCIP_Bool, SCIP_OKAY, SCIPABORT, SCIPcheckSolOrig(), SCIPdebugMessage, SCIPprintError(), and TRUE.

Referenced by checkSolution(), and conshdlrdataCreate().

static SCIP_RETCODE checkParameters ( SCIP scip)
static

check if the current parameter setting is correct for a save counting process

Parameters
scipSCIP data structure

Definition at line 362 of file cons_countsols.c.

References CUTOFF_CONSTRAINT, FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VERBLEVEL_FULL, SCIPgetHeurs(), SCIPgetIntParam(), SCIPgetNHeurs(), SCIPheurGetFreq(), SCIPisParamFixed(), SCIPsetIntParam(), SCIPunfixParam(), SCIPverbMessage(), SCIPwarningMessage(), and TRUE.

Referenced by checkSolutionOrig(), and SCIPcount().

static CUTOFF_CONSTRAINT ( addBinaryCons  )
static

creates and adds a constraints which cuts off the current solution from the feasibility region in the case there are only binary variables

Definition at line 417 of file cons_countsols.c.

References CUTOFF_CONSTRAINT, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddCons(), SCIPallocBufferArray, SCIPcreateConsSetcover(), SCIPfreeBufferArray, SCIPgetNegatedVar(), SCIPgetSolVal(), SCIPisFeasIntegral(), SCIPreleaseCons(), SCIPvarIsBinary(), and TRUE.

static CUTOFF_CONSTRAINT ( addIntegerCons  )
static

creates and adds a bound disjunction constraints which cuts off the current solution from the feasibility region; if only binary variables are involved, then a set covering constraint is created which is a special case of a bound disjunction constraint

Definition at line 477 of file cons_countsols.c.

References collectSolution(), FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPallocBufferArray, SCIPcreateConsBounddisjunction(), SCIPcreateConsSetcover(), SCIPfreeBufferArray, SCIPgetNegatedVar(), SCIPgetSolVal(), SCIPisFeasEQ(), SCIPisFeasIntegral(), SCIPreleaseCons(), SCIPvarGetLbLocal(), SCIPvarGetType(), SCIPvarGetUbLocal(), SCIPvarIsBinary(), and TRUE.

static SCIP_RETCODE collectSolution ( SCIP scip,
SCIP_CONSHDLRDATA conshdlrdata,
SCIP_SOL sol 
)
static

collect given solution or local domains as sparse solution

Parameters
scipSCIP data structure
conshdlrdataconstraint handler data
solsolution, or NULL if local domains

Definition at line 610 of file cons_countsols.c.

References countSparseSol(), FALSE, NULL, SCIP_CALL, SCIP_Longint, SCIP_OKAY, SCIPallocMemoryArray, SCIPconvertRealToLongint(), SCIPdebugMessage, SCIPgetSolVal(), SCIPreallocMemoryArray, SCIPsparseSolCreate(), SCIPsparseSolGetLbs(), SCIPsparseSolGetUbs(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbLocal(), and SCIP_SparseSol::vars.

Referenced by checkSolution(), countSparseSol(), and CUTOFF_CONSTRAINT().

static SCIP_RETCODE countSparseSol ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  feasible,
SCIP_CONSHDLRDATA conshdlrdata,
SCIP_RESULT result 
)
static

counts the number of solutions represented by sol

Note
aggregations and multi aggregations: we do not have to care about these things since we count solution from the transformed problem and therefore, SCIP does it for us
Parameters
scipSCIP data structure
solsolution
feasibleis solution feasible?
conshdlrdataconstraint handler data
resultpointer to store the result of the checking process

Definition at line 684 of file cons_countsols.c.

References addInt(), addOne(), allocInt(), checkLogicor(), collectSolution(), freeInt(), multInt(), NULL, SCIP_CALL, SCIP_CUTOFF, SCIP_INFEASIBLE, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPdebugMessage, SCIPgetNBinVars(), SCIPgetNPseudoBranchCands(), SCIPgetNVars(), SCIPgetPseudoBranchCands(), SCIPisFeasIntegral(), SCIPisFeasLT(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetOrigvarSum(), SCIPvarGetType(), SCIPvarGetUbLocal(), setInt(), and setPowerOfTwo().

Referenced by checkSolution(), and collectSolution().

static SCIP_RETCODE checkLogicor ( SCIP scip,
SCIP_CONSHDLR conshdlr,
int  nconss,
SCIP_Bool satisfied 
)
static

checks if the new solution is feasible for the logicor constraints

Note
the logicor constraints are not fully propagated; therefore, we have to check them by hand if they are satisfied or not; if a constraint is satisfied we delete it locally from the branch and bound tree.
Parameters
scipSCIP data structure
conshdlrconstraint handler
nconssnumber of enabled constraints
satisfiedpointer to store if the logicor constraints a satisfied

Definition at line 803 of file cons_countsols.c.

References checkKnapsack(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetNActiveConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNEnabledConss(), SCIPconsIsEnabled(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelConsLocal(), SCIPgetNVarsLogicor(), SCIPgetVarsLogicor(), SCIPvarGetLbLocal(), SCIPvarIsBinary(), TRUE, and varIsUnfixedLocal().

Referenced by checkFeasSubtree(), and countSparseSol().

static SCIP_RETCODE checkKnapsack ( SCIP scip,
SCIP_CONSHDLR conshdlr,
int  nconss,
SCIP_Bool satisfied 
)
static

checks if the new solution is feasible for the knapsack constraints

Note
the knapsack constraints are not fully propagated; therefore, we have to check them by hand if they are satisfied or not; if a constraint is satisfied we delete it locally from the branch and bound tree.
Parameters
scipSCIP data structure
conshdlrconstraint handler
nconssnumber of enabled constraints
satisfiedpointer to store if the logicor constraints a satisfied

Definition at line 876 of file cons_countsols.c.

References checkBounddisjunction(), FALSE, NULL, SCIP_CALL, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIPconsGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetNActiveConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNEnabledConss(), SCIPconsIsEnabled(), SCIPdebug, SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelConsLocal(), SCIPgetCapacityKnapsack(), SCIPgetNVarsKnapsack(), SCIPgetVarsKnapsack(), SCIPgetWeightsKnapsack(), SCIPisFeasLT(), SCIPprintVar(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), TRUE, and varIsUnfixedLocal().

Referenced by checkFeasSubtree(), and checkLogicor().

static SCIP_RETCODE checkBounddisjunction ( SCIP scip,
SCIP_CONSHDLR conshdlr,
int  nconss,
SCIP_Bool satisfied 
)
static

checks if the new solution is feasible for the bounddisjunction constraints

Note
the bounddisjunction constraints are not fully propagated; therefore, we have to check them by hand if they are satisfied or not; if a constraint is satisfied we delete it locally from the branch and bound tree
Parameters
scipSCIP data structure
conshdlrconstraint handler
nconssnumber of enabled constraints
satisfiedpointer to store if the logicor constraints a satisfied

Definition at line 971 of file cons_countsols.c.

References checkVarbound(), FALSE, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetNActiveConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNEnabledConss(), SCIPconsIsEnabled(), SCIPdebug, SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelConsLocal(), SCIPgetBoundsBounddisjunction(), SCIPgetBoundtypesBounddisjunction(), SCIPgetNVarsBounddisjunction(), SCIPgetVarsBounddisjunction(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPprintVar(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by checkFeasSubtree(), and checkKnapsack().

static SCIP_RETCODE checkVarbound ( SCIP scip,
SCIP_CONSHDLR conshdlr,
int  nconss,
SCIP_Bool satisfied 
)
static

checks if the new solution is feasible for the varbound constraints

Note
the varbound constraints are not fully propagated; therefore, we have to check them by hand if they are satisfied or not; if a constraint is satisfied we delete it locally from the branch and bound tree.
Parameters
scipSCIP data structure
conshdlrconstraint handler
nconssnumber of enabled constraints
satisfiedpointer to store if the logicor constraints a satisfied

Definition at line 1049 of file cons_countsols.c.

References checkFeasSubtree(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPconsGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetNActiveConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNEnabledConss(), SCIPconsIsEnabled(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelConsLocal(), SCIPgetLhsVarbound(), SCIPgetRhsVarbound(), SCIPgetVarVarbound(), SCIPgetVbdcoefVarbound(), SCIPgetVbdvarVarbound(), SCIPisGE(), SCIPisGT(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetType(), SCIPvarGetUbLocal(), and TRUE.

Referenced by checkBounddisjunction(), and checkFeasSubtree().

static SCIP_RETCODE checkFeasSubtree ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool feasible 
)
static

check if the current node initializes a non trivial unrestricted subtree

Parameters
scipSCIP main data structure
solsolution to check
feasiblepointer to store the result of the check

Definition at line 1125 of file cons_countsols.c.

References checkBounddisjunction(), checkKnapsack(), checkLogicor(), checkSolution(), checkVarbound(), CONSHDLR_NAME, FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconshdlrGetConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNEnabledConss(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPgetConshdlrs(), SCIPgetNConshdlrs(), SCIPgetNPseudoBranchCands(), and TRUE.

Referenced by checkSolution(), and checkVarbound().

static SCIP_RETCODE checkSolution ( SCIP scip,
SCIP_SOL sol,
SCIP_CONSHDLRDATA conshdlrdata,
SCIP_RESULT result 
)
static
static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyCountsols  )
static

copy method for constraint handler plugins (called when SCIP copies plugins)

Definition at line 1342 of file cons_countsols.c.

References CONSHDLR_NAME, FALSE, includeConshdlrCountsols(), NULL, SCIP_CALL, SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and TRUE.

Referenced by checkSolution().

static SCIP_DECL_CONSFREE ( consFreeCountsols  )
static

destructor of constraint handler to free constraint handler data (called when SCIP is exiting)

Definition at line 1371 of file cons_countsols.c.

References CONSHDLR_NAME, freeInt(), NULL, SCIP_DECL_CONSINIT(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconshdlrSetData(), and SCIPfreeMemory.

static SCIP_DECL_CONSINIT ( consInitCountsols  )
static
static SCIP_DECL_CONSEXIT ( consExitCountsols  )
static

deinitialization method of constraint handler (called before transformed problem is freed)

Definition at line 1467 of file cons_countsols.c.

References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSINITSOL(), SCIP_OKAY, SCIPaddVarLocks(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPfreeMemoryArrayNull, SCIPhashmapFree(), SCIPreleaseVar(), SCIPsparseSolFree(), and SCIPvarGetName().

Referenced by SCIP_DECL_CONSINIT().

static SCIP_DECL_CONSINITSOL ( consInitsolCountsols  )
static

solving process initialization method of constraint handler (called when branch and bound process is about to begin)

This method is called when the presolving was finished and the branch and bound process is about to begin. The constraint handler may use this call to initialize its branch and bound specific data.

Definition at line 1542 of file cons_countsols.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSEXITSOL(), SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPblkmem(), SCIPcaptureVar(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPduplicateMemoryArray, SCIPgetNBinVars(), SCIPgetNContVars(), SCIPgetNVars(), SCIPgetVars(), SCIPhashmapCreate(), SCIPhashmapInsert(), SCIPvarGetOrigvarSum(), SCIPvarGetProbindex(), and SCIPvarGetType().

Referenced by SCIP_DECL_CONSEXIT().

static SCIP_DECL_CONSEXITSOL ( consExitsolCountsols  )
static

solving process deinitialization method of constraint handler (called before branch and bound process data is freed)

Definition at line 1627 of file cons_countsols.c.

References CONSHDLR_NAME, NULL, SCIP_DECL_CONSENFOLP(), SCIP_INVALIDCALL, SCIP_OKAY, SCIPABORT, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPerrorMessage.

Referenced by SCIP_DECL_CONSINITSOL().

static SCIP_DECL_CONSENFOLP ( consEnfolpCountsols  )
static

constraint enforcing method of constraint handler for LP solutions

Definition at line 1651 of file cons_countsols.c.

References checkSolution(), NULL, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSENFOPS(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), SCIPcreateLPSol(), SCIPdebugMessage, and SCIPfreeSol().

Referenced by SCIP_DECL_CONSEXITSOL().

static SCIP_DECL_CONSENFOPS ( consEnfopsCountsols  )
static

constraint enforcing method of constraint handler for pseudo solutions

Definition at line 1689 of file cons_countsols.c.

References checkSolution(), NULL, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSCHECK(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), SCIPcreatePseudoSol(), SCIPdebugMessage, and SCIPfreeSol().

Referenced by SCIP_DECL_CONSENFOLP().

static SCIP_DECL_CONSCHECK ( consCheckCountsols  )
static

feasibility check method of constraint handler for integral solutions

Definition at line 1728 of file cons_countsols.c.

References NULL, SCIP_DECL_CONSLOCK(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), SCIPdebugMessage, SCIPwarningMessage(), and TRUE.

Referenced by SCIP_DECL_CONSENFOPS().

static SCIP_DECL_CONSLOCK ( consLockCountsols  )
static

variable rounding lock method of constraint handler

Definition at line 1758 of file cons_countsols.c.

References SCIP_DECL_DIALOGEXEC(), and SCIP_OKAY.

Referenced by SCIP_DECL_CONSCHECK().

static SCIP_DECL_SORTPTRCOMP ( varCompProbindex  )
static

comparison method for sorting variables by non-decreasing w.r.t. problem index

Definition at line 2007 of file cons_countsols.c.

References NULL, SCIPvarGetProbindex(), and writeExpandedSolutions().

Referenced by SCIP_DECL_DIALOGEXEC().

static SCIP_RETCODE writeExpandedSolutions ( SCIP scip,
FILE *  file,
SCIP_VAR **  allvars,
int  nallvars,
SCIP_VAR **  activevars,
int  nactivevars,
SCIP_HASHMAP hashmap,
SCIP_SPARSESOL **  sols,
int  nsols 
)
static

expands the sparse solutions and writes them to the file

Parameters
scipSCIP data structure
filefile handler
allvarsSCIP variables
nallvarsnumber of all variables
activevarsSCIP variables
nactivevarsnumber of active variables
hashmaphashmap from active solution variable to the position in the active variables array
solssparse solutions to expands and write
nsolsnumber of sparse solutions

Definition at line 2031 of file cons_countsols.c.

References NULL, scalars, SCIP_CALL, SCIP_DECL_DIALOGEXEC(), SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPgetProbvarLinearSum(), SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPinfoMessage(), SCIPisIntegral(), SCIPretransformObj(), SCIPsparseSolGetFirstSol(), SCIPsparseSolGetNextSol(), SCIPsparseSolGetNVars(), SCIPvarGetObj(), and TRUE.

Referenced by SCIP_DECL_DIALOGEXEC(), and SCIP_DECL_SORTPTRCOMP().

static SCIP_RETCODE createCountDialog ( SCIP scip)
static
static SCIP_DECL_DISPOUTPUT ( dispOutputSols  )
static
static SCIP_DECL_DISPOUTPUT ( dispOutputFeasSubtrees  )
static
SCIP_RETCODE SCIPincludeConshdlrCountsols ( SCIP scip)

creates the handler for countsols constraints and includes it in SCIP

Parameters
scipSCIP data structure

Definition at line 2560 of file cons_countsols.c.

References includeConshdlrCountsols(), SCIP_CALL, SCIP_OKAY, SCIPcount(), and TRUE.

Referenced by includeConshdlrCountsols(), and SCIPincludeDefaultPlugins().

SCIP_RETCODE SCIPcount ( SCIP scip)
SCIP_Longint SCIPgetNCountedSols ( SCIP scip,
SCIP_Bool valid 
)

returns number of feasible solutions found as SCIP_Longint; if the number does not fit into a SCIP_Longint the valid flag is set to FALSE

Parameters
scipSCIP data structure
validpointer to store if the return value is valid

Definition at line 2604 of file cons_countsols.c.

References CONSHDLR_NAME, getNCountedSols(), NULL, SCIPconshdlrGetData(), SCIPfindConshdlr(), and SCIPgetNCountedSolsstr().

Referenced by SCIP_DECL_DIALOGEXEC(), SCIP_DECL_DISPOUTPUT(), and SCIPcount().

void SCIPgetNCountedSolsstr ( SCIP scip,
char **  buffer,
int  buffersize,
int *  requiredsize 
)

puts the number of counted solutions in the given char* buffer

Parameters
scipSCIP data structure
bufferbuffer to store the number for counted solutions
buffersizebuffer size
requiredsizepointer to store the required size

Definition at line 2624 of file cons_countsols.c.

References CONSHDLR_NAME, NULL, pow(), SCIP_Longint, SCIPconshdlrGetData(), SCIPfindConshdlr(), SCIPgetNCountedFeasSubtrees(), and toString().

Referenced by SCIP_DECL_DIALOGEXEC(), and SCIPgetNCountedSols().

SCIP_Longint SCIPgetNCountedFeasSubtrees ( SCIP scip)

returns number of counted non trivial feasible subtrees

Parameters
scipSCIP data structure

Definition at line 2662 of file cons_countsols.c.

References CONSHDLR_NAME, NULL, SCIPconshdlrGetData(), SCIPfindConshdlr(), and SCIPgetCountedSparseSols().

Referenced by SCIP_DECL_DIALOGEXEC(), SCIP_DECL_DISPOUTPUT(), and SCIPgetNCountedSolsstr().

void SCIPgetCountedSparseSols ( SCIP scip,
SCIP_VAR ***  vars,
int *  nvars,
SCIP_SPARSESOL ***  sols,
int *  nsols 
)

Method to get the sparse solution.

Note
You get the pointer to the sparse solutions stored in the constraint handler (not a copy).
The sparse solutions are stored w.r.t. the active variables. This are the variables which got not removed during presolving. For none active variables the value has to be computed depending on their aggregation type. See for more details about that Collect all feasible solution.
Parameters
scipSCIP data structure
varspointer to active variable array defining to variable order
nvarsnumber of active variables
solspointer to the solutions
nsolspointer to number of solutions

Definition at line 2690 of file cons_countsols.c.

References CONSHDLR_NAME, NULL, SCIPconshdlrGetData(), SCIPfindConshdlr(), and SCIPsetParamsCountsols().

Referenced by SCIPgetNCountedFeasSubtrees().

SCIP_RETCODE SCIPsetParamsCountsols ( SCIP scip)

setting SCIP parameters for such that a valid counting process is possible

Parameters
scipSCIP data structure

Definition at line 2717 of file cons_countsols.c.

References SCIP_CALL, SCIP_OKAY, SCIP_PARAMEMPHASIS_COUNTER, SCIPsetEmphasis(), and TRUE.

Referenced by SCIPgetCountedSparseSols().