61 startnode = &graph->
nodes[0];
71 foundnextedge =
FALSE;
82 if( foundnextedge || tourlength > graph->
nnodes )
95 if( node == startnode )
103 if( nextedge ==
NULL )
106 node = nextedge->
adjac;
109 while( node != startnode );
111 assert(tourlength <= graph->
nnodes);
113 return ( graph->
nnodes != tourlength );
128 assert(result !=
NULL);
132 for(
int c = 0; c < nusefulconss && *result !=
SCIP_CUTOFF; ++c )
138 assert(consdata !=
NULL);
139 graph = consdata->graph;
140 assert(graph !=
NULL);
145 for(
int i = 0; i < graph->
nedges; i++)
158 for(
int i = 0; i < graph->
nnodes; i++)
167 for (
int i = 0; i < ncuts && *result !=
SCIP_CUTOFF; ++i)
174 for(
int j = 0; j < graph->
nnodes; j++)
182 while( edge !=
NULL )
184 if( !cuts[i][edge->
adjac->
id] )
208 for(
int i = graph->
nnodes - 1; i >= 0; i-- )
225 assert(consdata !=
NULL);
241 assert( sourcedata !=
NULL );
245 targetdata->graph = sourcedata->graph;
346 for(
int i = 0; i < nconss; ++i )
352 assert(consdata !=
NULL);
353 graph = consdata->graph;
354 assert(graph !=
NULL);
400 for(
int i = 0; i < nconss; ++i )
407 assert(consdata !=
NULL);
408 graph = consdata->graph;
409 assert(graph !=
NULL);
445 for(
int i = 0; i < nconss; ++i )
452 assert(consdata !=
NULL);
453 graph = consdata->graph;
454 assert(graph !=
NULL);
488 assert(result !=
NULL);
548 assert(consdata !=
NULL);
553 for(
int i = 0; i < g->
nedges; ++i )
588 assert(consdata !=
NULL);
617 if( conshdlr ==
NULL )
628 assert( probdatatsp !=
NULL );
630 consdata->graph = graph;
635 conshdlr, consdata, initial, separate, enforce, check,
636 propagate, local, modifiable, dynamic, removable,
FALSE) );
664 if( conshdlr ==
NULL )
672 consdata->graph = graph;
676 SCIP_CALL(
SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
677 local, modifiable, dynamic, removable,
FALSE) );
enum SCIP_Result SCIP_RESULT
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_DECL_CONSSEPALP(ConshdlrSubtour::scip_sepalp)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_DECL_CONSENFOPS(ConshdlrSubtour::scip_enfops)
SCIP_Real SCIPinfinity(SCIP *scip)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
generator for global cuts in undirected graphs
#define SCIPfreeBlockMemory(scip, ptr)
SCIP_DECL_CONSSEPASOL(ConshdlrSubtour::scip_sepasol)
SCIP_DECL_CONSDELETE(ConshdlrSubtour::scip_delete)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_DECL_CONSENFOLP(ConshdlrSubtour::scip_enfolp)
SCIP_DECL_CONSCHECK(ConshdlrSubtour::scip_check)
SCIP_Bool SCIPisCutEfficacious(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_RETCODE SCIPcreateConsSubtour(SCIP *scip, SCIP_CONS **cons, const char *name, GRAPH *graph, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
struct GraphEdge * first_edge
SCIP_DECL_CONSTRANS(ConshdlrSubtour::scip_trans)
C++ wrapper classes for SCIP.
SCIP_DECL_CONSDELVARS(ConshdlrSubtour::scip_delvars)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_DECL_CONSPROP(ConshdlrSubtour::scip_prop)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
C++ constraint handler for TSP subtour elimination constraints.
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
Constraint handler for linear constraints in their most general form, .
scip::ObjProbData * SCIPgetObjProbData(SCIP *scip)
Definition of base class for all clonable classes which define problem data.
SCIP_DECL_CONSHDLRCLONE(ObjProbCloneable *ConshdlrSubtour::clone)
SCIP_Bool ghc_tree(GRAPH *gr, SCIP_Bool **cuts, int *ncuts, double minviol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_DECL_CONSLOCK(ConshdlrSubtour::scip_lock)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_DECL_CONSPRINT(ConshdlrSubtour::scip_print)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
static SCIP_Bool findSubtour(SCIP *scip, GRAPH *graph, SCIP_SOL *sol)
void capture_graph(GRAPH *gr)
SCIP_DECL_CONSCOPY(ConshdlrSubtour::scip_copy)
void release_graph(GRAPH **gr)
static SCIP_RETCODE sepaSubtour(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)