47#define CONSHDLR_NAME "rpa"
48#define CONSHDLR_DESC "ringpacking constraint handler"
49#define CONSHDLR_ENFOPRIORITY 1
50#define CONSHDLR_CHECKPRIORITY -1
51#define CONSHDLR_EAGERFREQ 100
53#define CONSHDLR_NEEDSCONS FALSE
57#define CONSHDLR_SEPAPRIORITY 0
58#define CONSHDLR_SEPAFREQ -1
59#define CONSHDLR_DELAYSEPA FALSE
61#define CONSHDLR_PROPFREQ -1
62#define CONSHDLR_DELAYPROP FALSE
63#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
65#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_MEDIUM
66#define CONSHDLR_MAXPREROUNDS -1
69#define EVENTHDLR_NAME "bestsol"
70#define EVENTHDLR_DESC "best solution event handler"
73#define DEFAULT_VERIFICATION_NLPTILIM 10.0
74#define DEFAULT_VERIFICATION_NLPNODELIM 10000L
75#define DEFAULT_VERIFICATION_HEURTILIM 10.0
76#define DEFAULT_VERIFICATION_HEURITERLIM 1000
77#define DEFAULT_VERIFICATION_TOTALTILIM 3600.0
84struct SCIP_ConshdlrData
96 SCIP_Longint nlpnodelim;
126 for( p = 0; p < ncpatterns; ++p )
138 SCIPdebugMsg(
scip,
"solution might be infeasible because of circular pattern %d = (%g,%d)\n", p,
158 SCIP_Real nlptimelimit;
159 SCIP_Real heurtimelimit;
172 SCIPdebugMsg(
scip,
"call verification heuristic (%g,%d)\n", heurtimelimit, conshdlrdata->heuriterlim);
182 SCIPdebugMsg(
scip,
"call verification NLP (%g,%lld)\n", nlptimelimit, conshdlrdata->nlpnodelim);
242 for( p = 0; p < ncpatterns; ++p )
245 SCIP_Bool infeasible;
261 conshdlrdata->tried[p] =
TRUE;
284 SCIPdebugMsg(
scip,
"fix all tested but still unverified circular patterns\n");
287 for( p = 0; p < ncpatterns; ++p )
291 SCIP_Bool infeasible;
324 return (
int)
MIN(100,
MAX(ntypes, 100) / (type+1));
358 for( p = 0; p < npatterns; ++p )
376 for( p = 0; p < npatterns; ++p )
384 if( strcmp(filename,
"") != 0 )
403 file = fopen(filename,
"w");
415 for( p = 0; p < npatterns; ++p )
427 SCIPinfoMessage(
scip, file,
"\\draw[draw=none,fill=black!%d!white] (%g,%g) circle (%g);\n",
429 SCIPinfoMessage(
scip, file,
"\\draw[draw=none,fill=white] (%g,%g) circle (%g);\n", 0.0, 0.0, rints[type]);
436 SCIP_Real _rext = rexts[elemtype];
437 SCIP_Real _rint = rints[elemtype];
439 SCIPinfoMessage(
scip, file,
"\\draw[draw=none,fill=black!%d!white] (%g,%g) circle (%g);\n",
452 for( p = 0; p < npatterns; ++p )
468 SCIP_Real _rext = rexts[elemtype];
470 SCIPinfoMessage(
scip, file,
"\\draw[draw=none,fill=black!%d!white] (%g,%g) circle (%g);\n",
475 SCIPinfoMessage(
scip, file,
"\\draw[] (%g,%g) -- (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n",
476 0.0, 0.0, 0.0, height, width, height, width, 0.0);
503 if( conshdlrdata->locked !=
NULL )
506 conshdlrdata->lockedsize = 0;
635 if( conshdlrdata->locked ==
NULL )
640 conshdlrdata->lockedsize = ncpatterns;
650 for( p = 0; p < ncpatterns; ++p )
657 assert(!conshdlrdata->locked[p]);
658 assert(nlocksneg + nlockspos > 0);
661 nlocksneg + nlockspos) );
662 conshdlrdata->locked[p] =
TRUE;
665 else if( !first && conshdlrdata->locked[p] )
667 assert(nlocksneg + nlockspos < 0);
670 nlocksneg + nlockspos) );
671 conshdlrdata->locked[p] =
FALSE;
699 consEnfolpRpa, consEnfopsRpa, consCheckRpa, consLockRpa,
711 processNewSolutionEvent,
NULL) );
715 "ringpacking/verification/nlptilim",
716 "time limit for verification NLP",
720 "ringpacking/verification/nlpnodelim",
721 "node limit for verification NLP",
725 "ringpacking/verification/heurtilim",
726 "time limit for heuristic verification",
730 "ringpacking/verification/heuriterlim",
731 "iteration limit for heuristic verification",
735 "ringpacking/verification/totaltilim",
736 "total time limit for all verification problems during the solving process",
static SCIP_Bool isSolFeasible(SCIP *scip, SCIP_SOL *sol)
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_CHECKPRIORITY
#define DEFAULT_VERIFICATION_HEURTILIM
static int getShadingVal(int type, int ntypes)
#define DEFAULT_VERIFICATION_TOTALTILIM
static SCIP_RETCODE verifyCircularPattern(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_PROBDATA *probdata, SCIP_PATTERN *pattern)
static SCIP_RETCODE enforceSol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_RESULT *result)
#define DEFAULT_VERIFICATION_NLPNODELIM
#define DEFAULT_VERIFICATION_NLPTILIM
#define DEFAULT_VERIFICATION_HEURITERLIM
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
constraint handler for ringpacking
SCIP_RETCODE SCIPincludeConshdlrRpa(SCIP *scip)
SCIP_PROBDATA * SCIPgetProbData(SCIP *scip)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPgetStringParam(SCIP *scip, const char *name, char **value)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_SOL * SCIPeventGetSol(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
assert(minobj< SCIPgetCutoffbound(scip))
#define BMSclearMemory(ptr)
#define BMSclearMemoryArray(ptr, num)
SCIP_Real SCIPpatternGetElementPosY(SCIP_PATTERN *pattern, int elem)
SCIP_Real SCIPpatternGetElementPosX(SCIP_PATTERN *pattern, int elem)
SCIP_PATTERNTYPE SCIPpatternGetPatternType(SCIP_PATTERN *pattern)
SCIP_PACKABLE SCIPpatternGetPackableStatus(SCIP_PATTERN *pattern)
int SCIPpatternGetElementType(SCIP_PATTERN *pattern, int i)
int SCIPpatternGetNElemens(SCIP_PATTERN *pattern)
int SCIPpatternGetCircleType(SCIP_PATTERN *pattern)
pattern data for ringpacking problem
@ SCIP_PATTERNTYPE_CIRCULAR
SCIP_Real SCIPprobdataGetHeight(SCIP_PROBDATA *probdata)
SCIP_RETCODE SCIPverifyCircularPatternNLP(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_PATTERN *pattern, SCIP_Real timelim, SCIP_Longint nodelim)
int * SCIPprobdataGetDemands(SCIP_PROBDATA *probdata)
void SCIPprobdataGetRInfos(SCIP_PROBDATA *probdata, SCIP_PATTERN ***rpatterns, SCIP_VAR ***rvars, int *nrpatterns)
int SCIPprobdataGetNTypes(SCIP_PROBDATA *probdata)
void SCIPprobdataGetCInfos(SCIP_PROBDATA *probdata, SCIP_PATTERN ***cpatterns, SCIP_VAR ***cvars, int *ncpatterns)
SCIP_Real * SCIPprobdataGetRexts(SCIP_PROBDATA *probdata)
SCIP_RETCODE SCIPverifyCircularPatternHeuristic(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_PATTERN *pattern, SCIP_Real timelim, int iterlim)
SCIP_Real * SCIPprobdataGetRints(SCIP_PROBDATA *probdata)
void SCIPprobdataInvalidateDualbound(SCIP *scip, SCIP_PROBDATA *probdata)
void SCIPcheckPattern(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_PATTERN *pattern)
SCIP_Real SCIPprobdataGetWidth(SCIP_PROBDATA *probdata)
Problem data for ringpacking problem.
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSINITSOL(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSLOCK(x)
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_BESTSOLFOUND
#define SCIP_EVENTTYPE_SOLFOUND
struct SCIP_ProbData SCIP_PROBDATA
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE