Detailed Description
presolver for storing symmetry information about current problem
This presolver computes symmetries of the problem and stores this information in adequate form. It does not perform additional actions. The symmetry information can be accessed through external functions. However, the user has to declare the type of symmetry that is needed before execution, see SYMsetSpecRequirement().
- Note
- We treat implict integer variables as if they were continuous/real variables. The reason is that there is currently no distinction between implicit integer and implicit binary. Moreover, currently implicit integer variables hurt our code more than continuous/real variables (we basically do not handle integral variables at all).
- We do not copy symmetry information, since it is not clear how this information transfers. Moreover, copying symmetry might inhibit heuristics. But note that solving the a sub-SCIP might then happen without symmetry information!
Definition in file presol_symmetry.c.
#include <scip/cons_linear.h>
#include <scip/cons_knapsack.h>
#include <scip/cons_varbound.h>
#include <scip/cons_setppc.h>
#include <scip/cons_and.h>
#include <scip/cons_logicor.h>
#include <scip/cons_or.h>
#include <scip/cons_xor.h>
#include <scip/cons_linking.h>
#include <scip/presol_symmetry.h>
#include <symmetry/compute_symmetry.h>
#include <string.h>
Go to the source code of this file.
Data Structures | |
struct | SYM_Sortrhstype |
Macros | |
#define | PRESOL_NAME "symmetry" |
#define | PRESOL_DESC "presolver for computing and storing symmetry information about current problem" |
#define | PRESOL_PRIORITY 0 |
#define | PRESOL_MAXROUNDS -1 |
#define | PRESOL_TIMING SCIP_PRESOLTIMING_EXHAUSTIVE /* timing of the presolver (fast, medium, or exhaustive) */ |
#define | DEFAULT_MAXGENERATORS 1500 |
#define | DEFAULT_CHECKSYMMETRIES FALSE |
#define | DEFAULT_DISPLAYNORBITVARS FALSE |
#define | MAXGENNUMERATOR 64000000 |
Typedefs | |
typedef struct SYM_Sortrhstype | SYM_SORTRHSTYPE |
Functions | |
static | SCIP_DECL_HASHGETKEY (SYMhashGetKeyVartype) |
static | SCIP_DECL_HASHKEYEQ (SYMhashKeyEQVartype) |
static | SCIP_DECL_HASHKEYVAL (SYMhashKeyValVartype) |
static | SCIP_DECL_SORTINDCOMP (SYMsortRhsTypes) |
static | SCIP_DECL_SORTINDCOMP (SYMsortMatCoef) |
static SCIP_Bool | SymmetryFixVar (SYM_SPEC fixedtype, SCIP_VAR *var) |
static SCIP_RETCODE | getActiveVariables (SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed) |
static SCIP_RETCODE | collectCoefficients (SCIP *scip, SCIP_VAR **linvars, SCIP_Real *linvals, int nlinvars, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool istransformed, SYM_RHSSENSE rhssense, SYM_MATRIXDATA *matrixdata) |
static SCIP_RETCODE | checkSymmetriesAreSymmetries (SCIP *scip, SYM_SPEC fixedtype, SYM_MATRIXDATA *matrixdata, int nperms, int **perms) |
static int | getNSymhandableConss (SCIP *scip) |
static SCIP_RETCODE | computeSymmetryGroup (SCIP *scip, int maxgenerators, SYM_SPEC fixedtype, SCIP_Bool local, SCIP_Bool checksymmetries, int *npermvars, SCIP_VAR ***permvars, SCIP_Real **permvarsobj, int *nperms, int *nmaxperms, int ***perms, SCIP_Real *log10groupsize, SCIP_Bool *success) |
static SCIP_RETCODE | computeNOrbitVars (SCIP *scip, SCIP_PRESOLDATA *presoldata, SCIP_Bool completestatistic) |
static SCIP_RETCODE | determineSymmetry (SCIP *scip, SCIP_PRESOLDATA *presoldata, SYM_SPEC symspecrequire, SYM_SPEC symspecrequirefixed) |
static | SCIP_DECL_PRESOLINIT (presolInitSymmetry) |
static | SCIP_DECL_PRESOLEXIT (presolExitSymmetry) |
static | SCIP_DECL_PRESOLFREE (presolFreeSymmetry) |
static | SCIP_DECL_PRESOLEXEC (presolExecSymmetry) |
SCIP_RETCODE | SCIPincludePresolSymmetry (SCIP *scip) |
SCIP_RETCODE | SCIPgetGeneratorsSymmetry (SCIP *scip, SYM_SPEC symspecrequire, SYM_SPEC symspecrequirefixed, SCIP_Bool recompute, int *npermvars, SCIP_VAR ***permvars, int *nperms, int ***perms, SCIP_Real *log10groupsize, SCIP_Bool *binvaraffected) |
SCIP_RETCODE | SCIPgetPermvarsObjSymmetry (SCIP *scip, SCIP_Real **permvarsobj) |
Macro Definition Documentation
◆ PRESOL_NAME
#define PRESOL_NAME "symmetry" |
Definition at line 52 of file presol_symmetry.c.
Referenced by SCIP_DECL_PRESOLEXEC(), SCIP_DECL_PRESOLEXIT(), SCIP_DECL_PRESOLFREE(), SCIP_DECL_PRESOLINIT(), SCIPgetGeneratorsSymmetry(), SCIPgetPermvarsObjSymmetry(), and SCIPincludePresolSymmetry().
◆ PRESOL_DESC
#define PRESOL_DESC "presolver for computing and storing symmetry information about current problem" |
Definition at line 53 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ PRESOL_PRIORITY
#define PRESOL_PRIORITY 0 |
priority of the presolver (>= 0: before, < 0: after constraint handlers)
Definition at line 54 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ PRESOL_MAXROUNDS
#define PRESOL_MAXROUNDS -1 |
maximal number of presolving rounds the presolver participates in (-1: no limit)
Definition at line 55 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ PRESOL_TIMING
#define PRESOL_TIMING SCIP_PRESOLTIMING_EXHAUSTIVE /* timing of the presolver (fast, medium, or exhaustive) */ |
Definition at line 56 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ DEFAULT_MAXGENERATORS
#define DEFAULT_MAXGENERATORS 1500 |
limit on the number of generators that should be produced within symmetry detection (0 = no limit)
Definition at line 59 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ DEFAULT_CHECKSYMMETRIES
#define DEFAULT_CHECKSYMMETRIES FALSE |
Should all symmetries be checked after computation?
Definition at line 60 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ DEFAULT_DISPLAYNORBITVARS
#define DEFAULT_DISPLAYNORBITVARS FALSE |
Should the number of variables affected by some symmetry be displayed?
Definition at line 61 of file presol_symmetry.c.
Referenced by SCIPincludePresolSymmetry().
◆ MAXGENNUMERATOR
#define MAXGENNUMERATOR 64000000 |
determine maximal number of generators by dividing this number by the number of variables
Definition at line 64 of file presol_symmetry.c.
Referenced by determineSymmetry().
Typedef Documentation
◆ SYM_SORTRHSTYPE
typedef struct SYM_Sortrhstype SYM_SORTRHSTYPE |
Definition at line 157 of file presol_symmetry.c.
Function Documentation
◆ SCIP_DECL_HASHGETKEY()
|
static |
gets the key of the given element
Definition at line 97 of file presol_symmetry.c.
◆ SCIP_DECL_HASHKEYEQ()
|
static |
returns TRUE iff both keys are equal
Compare the types of two variables according to objective, lower and upper bound, and variable type.
Definition at line 107 of file presol_symmetry.c.
References FALSE, SYM_Vartype::lb, SYM_Vartype::obj, SCIPisEQ(), TRUE, SYM_Vartype::type, and SYM_Vartype::ub.
◆ SCIP_DECL_HASHKEYVAL()
|
static |
returns the hash value of the key
Definition at line 138 of file presol_symmetry.c.
References SYM_Vartype::lb, SYM_Vartype::obj, SCIPcombineTwoInt, SCIPhashTwo, SCIPrealHashCode(), and SYM_Vartype::ub.
◆ SCIP_DECL_SORTINDCOMP() [1/2]
|
static |
sort rhs types - first by sense, then by value
Due to numerical issues, we first sort by sense, then by value.
result: < 0: ind1 comes before (is better than) ind2 = 0: both indices have the same value
0: ind2 comes after (is worse than) ind2
Definition at line 169 of file presol_symmetry.c.
References SYM_Sortrhstype::nrhscoef, SCIP_Real, SYM_Sortrhstype::senses, and SYM_Sortrhstype::vals.
◆ SCIP_DECL_SORTINDCOMP() [2/2]
|
static |
sort matrix coefficients
result: < 0: ind1 comes before (is better than) ind2 = 0: both indices have the same value
0: ind2 comes after (is worse than) ind2
Definition at line 203 of file presol_symmetry.c.
References SCIP_Real, and SYM_Sortrhstype::vals.
◆ SymmetryFixVar()
determines whether variable should be fixed by permutations
- Parameters
-
fixedtype bitset of variable types that should be fixed var variable to be considered
Definition at line 226 of file presol_symmetry.c.
References FALSE, SCIP_VARTYPE_BINARY, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_IMPLINT, SCIP_VARTYPE_INTEGER, SCIPvarGetType(), SYM_SPEC_BINARY, SYM_SPEC_INTEGER, SYM_SPEC_REAL, and TRUE.
Referenced by checkSymmetriesAreSymmetries(), and computeSymmetryGroup().
◆ getActiveVariables()
|
static |
Transforms given variables, scalars, and constant to the corresponding active variables, scalars, and constant.
- Note
constant
needs to be initialized!
- Parameters
-
scip SCIP data structure vars pointer to vars array to get active variables for scalars pointer to scalars a_1, ..., a_n in linear sum a_1*x_1 + ... + a_n*x_n + c nvars pointer to number of variables and values in vars and vals array constant pointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c transformed transformed constraint?
Definition at line 247 of file presol_symmetry.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPgetProbvarLinearSum(), SCIPreallocBufferArray, SCIPvarGetOrigvarSum(), and TRUE.
Referenced by collectCoefficients().
◆ collectCoefficients()
|
static |
fill in matrix elements into coefficient arrays
- Parameters
-
scip SCIP data structure linvars array of linear variables linvals array of linear coefficients values (or NULL if all linear coefficient values are 1) nlinvars number of linear variables lhs left hand side rhs right hand side istransformed whether the constraint is transformed rhssense identifier of constraint type matrixdata matrix data to be filled in
Definition at line 293 of file presol_symmetry.c.
References getActiveVariables(), SYM_Matrixdata::matcoef, SYM_Matrixdata::matidx, SYM_Matrixdata::matrhsidx, SYM_Matrixdata::matvaridx, SYM_Matrixdata::nmatcoef, SYM_Matrixdata::nmaxmatcoef, SYM_Matrixdata::nrhscoef, SYM_Sortrhstype::nrhscoef, NULL, SYM_Matrixdata::rhscoef, SYM_Matrixdata::rhsidx, SYM_Matrixdata::rhssense, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcalcMemGrowSize(), SCIPdebugMsg, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPgetNVars(), SCIPisEQ(), SCIPisInfinity(), SCIPreallocBlockMemoryArray, SCIPvarGetProbindex(), SYM_SENSE_EQUATION, SYM_SENSE_INEQUALITY, and SYM_Sortrhstype::vals.
Referenced by computeSymmetryGroup().
◆ checkSymmetriesAreSymmetries()
|
static |
checks whether given permutations form a symmetry of a MIP
We need the matrix and rhs in the original order in order to speed up the comparison process. The matrix is needed in the right order to easily check rows. The rhs is used because of cache effects.
- Parameters
-
scip SCIP data structure fixedtype variable types that must be fixed by symmetries matrixdata matrix data nperms number of permutations perms permutations
Definition at line 462 of file presol_symmetry.c.
References FALSE, SYM_Matrixdata::matcoef, SYM_Matrixdata::matrhsidx, SYM_Matrixdata::matvaridx, SYM_Matrixdata::nmatcoef, SYM_Matrixdata::npermvars, SYM_Matrixdata::nrhscoef, SYM_Sortrhstype::nrhscoef, NULL, SYM_Matrixdata::permvars, SYM_Matrixdata::rhscoef, SYM_Matrixdata::rhssense, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_OKAY, SCIP_Real, SCIPallocBlockMemoryArray, SCIPdebugMsg, SCIPerrorMessage, SCIPfreeBlockMemoryArray, SCIPisEQ(), SCIPisZero(), SymmetryFixVar(), and TRUE.
Referenced by computeSymmetryGroup().
◆ getNSymhandableConss()
|
static |
returns the number of active constraints that can be handled by symmetry
- Parameters
-
scip SCIP instance
Definition at line 608 of file presol_symmetry.c.
References NULL, SCIPconshdlrGetNActiveConss(), and SCIPfindConshdlr().
Referenced by computeSymmetryGroup(), and determineSymmetry().
◆ computeSymmetryGroup()
|
static |
compute symmetry group of MIP
- Parameters
-
scip SCIP pointer maxgenerators maximal number of generators constructed (= 0 if unlimited) fixedtype variable types that must be fixed by symmetries local Use local variable bounds? checksymmetries Should all symmetries be checked after computation? npermvars pointer to store number of variables for permutations permvars pointer to store variables on which permutations act permvarsobj objective values of permuted variables nperms pointer to store number of permutations nmaxperms pointer to store maximal number of permutations (needed for freeing storage) perms pointer to store permutation generators as (nperms x npermvars) matrix log10groupsize pointer to store log10 of size of group success pointer to store whether symmetry computation was successful
Definition at line 643 of file presol_symmetry.c.
References checkSymmetriesAreSymmetries(), collectCoefficients(), SYM_Vartype::color, FALSE, getNSymhandableConss(), SYM_Vartype::lb, SYM_Matrixdata::matcoef, SYM_Matrixdata::matcoefcolors, SYM_Matrixdata::matidx, SYM_Matrixdata::matrhsidx, SYM_Matrixdata::matvaridx, SYM_Matrixdata::nmatcoef, SYM_Matrixdata::nmaxmatcoef, SYM_Matrixdata::npermvars, SYM_Matrixdata::nrhscoef, SYM_Sortrhstype::nrhscoef, NULL, SYM_Matrixdata::nuniquemat, SYM_Matrixdata::nuniquerhs, SYM_Matrixdata::nuniquevars, SYM_Vartype::obj, SYM_Matrixdata::permvarcolors, SYM_Matrixdata::permvars, SYM_Matrixdata::rhscoef, SYM_Matrixdata::rhscoefcolors, SYM_Matrixdata::rhsidx, SYM_Matrixdata::rhssense, SCIP_CALL, SCIP_ERROR, SCIP_INVALID, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIP_SETPPCTYPE_COVERING, SCIP_SETPPCTYPE_PACKING, SCIP_SETPPCTYPE_PARTITIONING, SCIP_STAGE_INITPRESOLVE, SCIP_STAGE_SOLVING, SCIPallocBlockMemoryArray, SCIPblkmem(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPconsIsActive(), SCIPconsIsConflict(), SCIPconsIsTransformed(), SCIPdebugMsg, SCIPduplicateBlockMemoryArray, SCIPerrorMessage, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, SCIPgetBinvarsLinking(), SCIPgetCapacityKnapsack(), SCIPgetConss(), SCIPgetIntvarLinking(), SCIPgetIntVarXor(), SCIPgetLhsLinear(), SCIPgetLhsVarbound(), SCIPgetNActiveConss(), SCIPgetNConss(), SCIPgetNFixedVars(), SCIPgetNVars(), SCIPgetNVarsAnd(), SCIPgetNVarsKnapsack(), SCIPgetNVarsLinear(), SCIPgetNVarsLogicor(), SCIPgetNVarsOr(), SCIPgetNVarsSetppc(), SCIPgetNVarsXor(), SCIPgetResultantAnd(), SCIPgetResultantOr(), SCIPgetRhsLinear(), SCIPgetRhsVarbound(), SCIPgetRhsXor(), SCIPgetStage(), SCIPgetTypeSetppc(), SCIPgetValsLinear(), SCIPgetValsLinking(), SCIPgetVars(), SCIPgetVarsAnd(), SCIPgetVarsKnapsack(), SCIPgetVarsLinear(), SCIPgetVarsLogicor(), SCIPgetVarsOr(), SCIPgetVarsSetppc(), SCIPgetVarsXor(), SCIPgetVarVarbound(), SCIPgetVbdcoefVarbound(), SCIPgetVbdvarVarbound(), SCIPgetWeightsKnapsack(), SCIPhashtableCreate(), SCIPhashtableExists(), SCIPhashtableFree(), SCIPhashtableInsert(), SCIPhashtableRetrieve(), SCIPinfinity(), SCIPisEQ(), SCIPisStopped(), SCIPmarkDoNotMultaggrVar(), SCIPsort(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetObj(), SCIPvarGetProbindex(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SYM_Sortrhstype::senses, SYM_SENSE_AND, SYM_SENSE_EQUATION, SYM_SENSE_INEQUALITY, SYM_SENSE_OR, SYM_SENSE_UNKOWN, SYM_SENSE_XOR, SYMcanComputeSymmetry(), SYMcomputeSymmetryGenerators(), SymmetryFixVar(), TRUE, SYM_Vartype::type, SYM_Vartype::ub, and SYM_Sortrhstype::vals.
Referenced by determineSymmetry().
◆ computeNOrbitVars()
|
static |
- Parameters
-
scip SCIP instance presoldata presolver data completestatistic whether a complete statistic on affected vars should be computed
Definition at line 1185 of file presol_symmetry.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIP_Shortbool, SCIPallocClearBufferArray, SCIPfreeBufferArray, SCIPvarIsBinary(), and TRUE.
Referenced by determineSymmetry().
◆ determineSymmetry()
|
static |
determine symmetry
- Parameters
-
scip SCIP instance presoldata presolver data symspecrequire symmetry specification for which we need to compute symmetries symspecrequirefixed symmetry specification of variables which must be fixed by symmetries
Definition at line 1246 of file presol_symmetry.c.
References computeNOrbitVars(), computeSymmetryGroup(), FALSE, getNSymhandableConss(), MAXGENNUMERATOR, MIN, NULL, SCIP_CALL, SCIP_OKAY, SCIP_VERBLEVEL_HIGH, SCIPgetIntParam(), SCIPgetNActiveConss(), SCIPgetNActivePricers(), SCIPgetNBinVars(), SCIPgetNContVars(), SCIPgetNImplVars(), SCIPgetNIntVars(), SCIPgetNVars(), SCIPgetSolvingTime(), SCIPsetIntParam(), SCIPverbMessage(), SCIPwarningMessage(), SYM_SPEC_BINARY, SYM_SPEC_INTEGER, SYM_SPEC_REAL, SYMcanComputeSymmetry(), and TRUE.
Referenced by SCIPgetGeneratorsSymmetry().
◆ SCIP_DECL_PRESOLINIT()
|
static |
initialization method of presolver (called after problem was transformed)
Definition at line 1427 of file presol_symmetry.c.
References NULL, PRESOL_NAME, SCIP_CALL, SCIP_OKAY, SCIPgetIntParam(), SCIPpresolGetData(), and SCIPpresolGetName().
◆ SCIP_DECL_PRESOLEXIT()
|
static |
deinitialization method of presolver (called before transformed problem is freed)
Definition at line 1446 of file presol_symmetry.c.
References FALSE, NULL, PRESOL_NAME, SCIP_CALL, SCIP_OKAY, SCIPdebugMsg, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, SCIPpresolGetData(), SCIPpresolGetName(), and SCIPsetIntParam().
◆ SCIP_DECL_PRESOLFREE()
|
static |
destructor of presolver to free user data (called when SCIP is exiting)
Definition at line 1491 of file presol_symmetry.c.
References NULL, PRESOL_NAME, SCIP_OKAY, SCIPdebugMsg, SCIPfreeBlockMemory, SCIPpresolGetData(), and SCIPpresolGetName().
◆ SCIP_DECL_PRESOLEXEC()
|
static |
execution method of presolver
Definition at line 1512 of file presol_symmetry.c.
References NULL, PRESOL_NAME, SCIP_DIDNOTRUN, SCIP_OKAY, and SCIPpresolGetName().
◆ SCIPincludePresolSymmetry()
SCIP_RETCODE SCIPincludePresolSymmetry | ( | SCIP * | scip | ) |
include symmetry constraint handler
- Parameters
-
scip SCIP data structure
Definition at line 1531 of file presol_symmetry.c.
References DEFAULT_CHECKSYMMETRIES, DEFAULT_DISPLAYNORBITVARS, DEFAULT_MAXGENERATORS, FALSE, NULL, PRESOL_DESC, PRESOL_MAXROUNDS, PRESOL_NAME, PRESOL_PRIORITY, PRESOL_TIMING, SCIP_CALL, SCIP_OKAY, SCIPaddBoolParam(), SCIPaddIntParam(), SCIPallocBlockMemory, SCIPincludeExternalCodeInformation(), SCIPincludePresolBasic(), SCIPsetPresolExit(), SCIPsetPresolFree(), SCIPsetPresolInit(), SYMcanComputeSymmetry(), SYMsymmetryGetDesc(), SYMsymmetryGetName(), and TRUE.
Referenced by SCIPincludeDefaultPlugins().
◆ SCIPgetGeneratorsSymmetry()
SCIP_RETCODE SCIPgetGeneratorsSymmetry | ( | SCIP * | scip, |
SYM_SPEC | symspecrequire, | ||
SYM_SPEC | symspecrequirefixed, | ||
SCIP_Bool | recompute, | ||
int * | npermvars, | ||
SCIP_VAR *** | permvars, | ||
int * | nperms, | ||
int *** | perms, | ||
SCIP_Real * | log10groupsize, | ||
SCIP_Bool * | binvaraffected | ||
) |
return symmetry group generators
- Parameters
-
scip SCIP data structure symspecrequire symmetry specification for which we need to compute symmetries symspecrequirefixed symmetry specification of variables which must be fixed by symmetries recompute Have symmetries already been computed? npermvars pointer to store number of variables for permutations permvars pointer to store variables on which permutations act nperms pointer to store number of permutations perms pointer to store permutation generators as (nperms x npermvars) matrix log10groupsize pointer to store log10 of group size (or NULL) binvaraffected pointer to store whether binary variables are affected
Definition at line 1589 of file presol_symmetry.c.
References determineSymmetry(), FALSE, NULL, PRESOL_NAME, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIP_STAGE_EXITPRESOLVE, SCIP_STAGE_INITPRESOLVE, SCIP_STAGE_INITSOLVE, SCIP_STAGE_PRESOLVED, SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIPerrorMessage, SCIPfindPresol(), SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, SCIPgetStage(), SCIPpresolGetData(), and SCIPpresolGetName().
Referenced by getSymmetries(), and tryAddSymmetryHandlingConss().
◆ SCIPgetPermvarsObjSymmetry()
SCIP_RETCODE SCIPgetPermvarsObjSymmetry | ( | SCIP * | scip, |
SCIP_Real ** | permvarsobj | ||
) |
return objective coefficients of permuted variables at time of symmetry computation
- Parameters
-
scip SCIP data structure permvarsobj pointer to store objective coefficients of permuted variables (NULL if not available)
Definition at line 1676 of file presol_symmetry.c.
References NULL, PRESOL_NAME, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPerrorMessage, SCIPfindPresol(), SCIPpresolGetData(), and SCIPpresolGetName().
Referenced by propagateOrbitalFixing().