35#include <bliss/defs.hh>
36#include <bliss/graph.hh>
40#pragma GCC diagnostic ignored "-Wshadow"
41#pragma GCC diagnostic ignored "-Wunused-variable"
42#pragma GCC diagnostic ignored "-Wsign-compare"
43#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
48# pragma warning(disable: 4189)
49# pragma warning(disable: 4267)
50# pragma warning(disable: 4388)
51# pragma warning(disable: 4456)
52# pragma warning(disable: 4430)
56#include <sassy/preprocessor.h>
59#pragma GCC diagnostic warning "-Wunused-but-set-variable"
60#pragma GCC diagnostic warning "-Wsign-compare"
61#pragma GCC diagnostic warning "-Wunused-variable"
62#pragma GCC diagnostic warning "-Wshadow"
69#include <sassy/tools/bliss_converter.h>
124 if (
k1->level !=
k2->level )
173 return (SCIP_Bool)(
k1->value ==
k2->value);
209 if (
k1->lhs !=
k2->lhs )
212 return (SCIP_Bool)(
k1->rhs ==
k2->rhs);
494 SCIP_Real* vals =
NULL;
519 for (
i = 0;
i < nconss; ++
i)
562 SCIP_Real constant = 0.0;
595 ++(*nnonlinearnodes);
603 ++(*nnonlinearedges);
611 ++(*nnonlinearedges);
615 if ( constant != 0.0 )
619 ++(*nnonlinearnodes);
623 (*degrees)[node] = 0;
627 ++(*nnonlinearedges);
654 ++(*nnonlinearnodes);
671 ++(*nnonlinearnodes);
675 (*degrees)[node] = 0;
690 ++(*nnonlinearedges);
703 ++(*nnonlinearnodes);
717 ++(*nnonlinearedges);
726 ++(*nnonlinearnodes);
734 ++(*nnonlinearedges);
824 sassy::static_graph*
G,
850 SCIP_Real* vals =
NULL;
861 int nuniquecoefs = 0;
886 SCIPdebugMsg(
scip,
"Filling graph with colored coefficient nodes for linear part.\n");
1048 SCIPdebugMsg(
scip,
"Filling graph with colored coefficient nodes for non-linear part.\n");
1086 for (
i = 0;
i < nconss; ++
i)
1126 SCIP_Real constant = 0.0;
1161 ct->value = vals[
k];
1166 ct->color = (*nusedcolors)++;
1174 (
void)
G->add_vertex(color, degrees[n]);
1189 G->add_edge((
unsigned) node, (
unsigned)
internode);
1197 if ( constant != 0.0 )
1206 ct->value = constant;
1211 ct->color = (*nusedcolors)++;
1219 (
void)
G->add_vertex(color, degrees[n]);
1224 G->add_edge((
unsigned)
parentnode, (
unsigned) node);
1255 ct->color = (*nusedcolors)++;
1279 ot->color = (*nusedcolors)++;
1303 rt->color = (*nusedcolors)++;
1325 (
void)
G->add_vertex(color, degrees[n]);
1343 G->add_edge((
unsigned)
parentnode, (
unsigned) node);
1345 G->add_edge((
unsigned) node, (
unsigned)
parentnode);
1368 ct->value = coefs[
j];
1373 ct->color = (*nusedcolors)++;
1381 (
void)
G->add_vertex(color, degrees[n]);
1392 G->add_edge((
unsigned) node, (
unsigned)
internode);
1415 ct->color = (*nusedcolors)++;
1423 (
void)
G->add_vertex(color, degrees[n]);
1428 G->add_edge((
unsigned) node, (
unsigned)
internode);
1503#ifdef BLISS_PATCH_PRESENT
1532 return "Computing Graph Automorphisms by T. Junttila and P. Kaski (users.aalto.fi/~tjunttil/bliss/)";
1544 return "Symmetry preprocessor by Markus Anders (github.com/markusa4/sassy)";
1556 SCIP_Real* log10groupsize,
1579 assert( maxgenerators >= 0 );
1586 *log10groupsize = 0;
1627 sassy::preprocessor
sassy;
1631 sconfig.CONFIG_PREP_DEACT_PROBE =
true;
1652#ifdef SCIP_DISABLED_CODE
1670 blissgraph.set_splitting_heuristic(bliss::Graph::shs_f);
1675#ifdef BLISS_PATCH_PRESENT
1679#if BLISS_VERSION_MAJOR >= 1 || BLISS_VERSION_MINOR >= 76
1685 auto hook = [&](
unsigned int n,
const unsigned int*
aut) {
1693 blissgraph.find_automorphisms(stats, sassy::preprocessor::bliss_hook, (
void*) &
sassy);
interface for symmetry computations
const char * SYMsymmetryGetName(void)
static SCIP_RETCODE determineGraphSize(SCIP *scip, SYM_MATRIXDATA *matrixdata, SYM_EXPRDATA *exprdata, int *nnodes, int *nedges, int *nlinearnodes, int *nnonlinearnodes, int *nlinearedges, int *nnonlinearedges, int **degrees, int *maxdegrees, SCIP_Bool *success)
char * initStaticSymmetryName()
static SCIP_RETCODE fillGraphByConss(SCIP *scip, sassy::static_graph *G, SYM_MATRIXDATA *matrixdata, SYM_EXPRDATA *exprdata, int nnodes, int nedges, int nlinearnodes, int nnonlinearnodes, int nlinearedges, int nnonlinearedges, int *degrees, int *nusedcolors)
static const char * symmetryname
const char * SYMsymmetryGetAddName(void)
SCIP_Bool SYMcanComputeSymmetry(void)
SCIP_RETCODE SYMcomputeSymmetryGenerators(SCIP *scip, int maxgenerators, SYM_MATRIXDATA *matrixdata, SYM_EXPRDATA *exprdata, int *nperms, int *nmaxperms, int ***perms, SCIP_Real *log10groupsize, SCIP_Real *symcodetime)
const char * SYMsymmetryGetDesc(void)
static void sassyhook(void *user_param, int n, const int *aut, int nsupp, const int *suppa)
char * initStaticSymmetryAddName()
const char * SYMsymmetryGetAddDesc(void)
static const char * symmetryaddname
Constraint handler for linear constraints in their most general form, .
constraint handler for nonlinear constraints specified by algebraic expressions
private functions to work with algebraic expressions
power and signed power expression handlers
variable expression handler
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
const char * SCIPgetProbName(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element)
#define SCIPhashTwo(a, b)
#define SCIPhashThree(a, b, c)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
static INLINE uint32_t SCIPrealHashCode(double x)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPexprhdlrGetName(SCIP_EXPRHDLR *exprhdlr)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPexpriterIsEnd(SCIP_EXPRITER *iterator)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprValue(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetCurrent(SCIP_EXPRITER *iterator)
void SCIPexpriterSetStagesDFS(SCIP_EXPRITER *iterator, SCIP_EXPRITER_STAGE stopstages)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExpriter(SCIP *scip, SCIP_EXPRITER **iterator)
SCIP_EXPR * SCIPexpriterGetParentDFS(SCIP_EXPRITER *iterator)
SCIP_Real SCIPgetValueExprValue(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetNext(SCIP_EXPRITER *iterator)
SCIP_Real SCIPgetConstantExprSum(SCIP_EXPR *expr)
SCIP_VAR * SCIPgetVarExprVar(SCIP_EXPR *expr)
void SCIPfreeExpriter(SCIP_EXPRITER **iterator)
SCIP_EXPRITER_STAGE SCIPexpriterGetStageDFS(SCIP_EXPRITER *iterator)
SCIP_RETCODE SCIPexpriterInit(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_TYPE type, SCIP_Bool allowrevisit)
SCIP_EXPRHDLR * SCIPexprGetHdlr(SCIP_EXPR *expr)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public methods for memory management
#define SCIP_EXPRITER_LEAVEEXPR
#define SCIP_EXPRITER_ENTEREXPR
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
enum SCIP_Retcode SCIP_RETCODE