SCIP_PricerData
132 return(n *
M_PI) /
SQR(2.0 - sqrt(3.0) + sqrt(7.0 -
M_PI+ sqrt(3.0)*(2.0*n - 6.0 +
M_PI)) );
156volrect = width * height;
158assert(volcircle != 0.0);
170 SCIP_Realc =
MIN(sqrt(3.0*rext*rext + rext * height - height * height / 4.0),
171sqrt(8.0 * rext * height - height * height - 12.0 * rext * rext));
200assert(probdata !=
NULL);
201assert(types !=
NULL);
207assert(conss !=
NULL);
214 for( i = 0; i < nelems; ++i )
216 if( ispacked ==
NULL|| ispacked[i] )
219(void) strcat(name, strtmp);
236 for( i = 0; i < nelems; ++i )
238 if( ispacked ==
NULL|| ispacked[i] )
276assert(success !=
NULL);
285assert(sol !=
NULL);
304 for( i = 0; i < nvars; ++i )
310selectedtypes[nselected] = types[i];
316assert(nselected > 0);
345assert(iter < iterlim);
347 for( i = 0; i < nelements; ++i )
349 intelemtype = elements[i];
354scores[i] = lambdas[elemtype];
357 else if( iter == 1 )
361 else if( iter == 2 )
365 else if( iter <= iterlim * 0.1 )
369 else if( iter <= iterlim * 0.4 )
373 else if( iter <= iterlim * 0.8 )
374scores[i] =
SCIPrandomGetReal(randnumgen, -1.0, 1.0) * rext * lambdas[elemtype];
412assert(pricerdata !=
NULL);
413assert(addedvar !=
NULL);
430 for( t = 0; t < ntypes; ++t )
431nelements +=
getNCircles(
scip, rexts[t], demands[t], width, height, lambdas[t]);
442 for( t = 0; t < ntypes; ++t )
447n =
getNCircles(
scip, rexts[t], demands[t], width, height, lambdas[t]);
449 for( i = 0; i < n; ++i )
451elements[nelements] = t;
457 while( niters < iterlim
466 computeScores(
scip, rexts, pricerdata->randnumgen, elements, nelements, lambdas, scores, niters, iterlim);
472 SCIPpackCirclesGreedy(
scip, rexts, xs, ys, -1.0, width, height, ispacked, elements, nelements,
476 for( i = 0; i < nelements; ++i )
480redcosts -= lambdas[elements[i]];
481vol += rexts[elements[i]];
488 SCIPdebugMsg(
scip,
"pricing heuristic found column with reduced costs %g and volume %g after %d iterations\n", redcosts, vol, niters + 1);
492bestredcosts =
MIN(bestredcosts, redcosts);
493bestvol =
MAX(bestvol, vol);
545assert(probdata !=
NULL);
546assert(lambdas !=
NULL);
547assert(nodelim >= -1L);
548assert(addedvar !=
NULL);
549assert(solstat !=
NULL);
550assert(dualbound !=
NULL);
557 if( timelim <= 0.0 )
585 for( t = 0; t < ntypes; ++t )
587nvars +=
getNCircles(
scip, rexts[t], demands[t], width, height, lambdas[t]);
601 for( t = 0; t < ntypes; ++t )
621vols[pos] =
SQR(rexts[t]) *
M_PI;
628 for( i = 0; i < nvars; ++i )
634assert(type1 >= 0 && type1 < ntypes);
636 for( j = i+1; j < nvars; ++j )
642assert(types2 >= 0 && types2 < ntypes);
644c = (rexts[type1] + rexts[types2]) * (rexts[type1] + rexts[types2]);
647linvars[0] =
w[i]; lincoefs[0] = -c;
648linvars[1] =
w[j]; lincoefs[1] = -c;
651quadvars1[0] =
x[i]; quadvars2[0] =
x[i]; quadcoefs[0] = 1.0;
652quadvars1[1] =
x[i]; quadvars2[1] =
x[j]; quadcoefs[1] = -2.0;
653quadvars1[2] =
x[j]; quadvars2[2] =
x[j]; quadcoefs[2] = 1.0;
654quadvars1[3] =
y[i]; quadvars2[3] =
y[i]; quadcoefs[3] = 1.0;
655quadvars1[4] =
y[i]; quadvars2[4] =
y[j]; quadcoefs[4] = -2.0;
656quadvars1[5] =
y[j]; quadvars2[5] =
y[j]; quadcoefs[5] = 1.0;
661quadcoefs, -c,
SCIPinfinity(subscip),
TRUE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
FALSE) );
670 for( i = 0; i < nvars - 1; ++i )
678 if( type1 != type2 )
694 for( i = 0; i < nvars - 1; ++i )
702 if( type1 != type2 )
723 SCIPdebugMsg(
scip,
"----------------------- solve pricing problem -----------------------\n");
725 SCIPdebugMsg(
scip,
"---------------------------------------------------------------------\n");
735 for( i = 0; i < nvars; ++i )
767assert(pricerdata->randnumgen ==
NULL);
779assert(pricerdata !=
NULL);
780assert(pricerdata->randnumgen ==
NULL);
793assert(pricerdata !=
NULL);
794assert(pricerdata->randnumgen !=
NULL);
818assert(pricerdata !=
NULL);
820assert(probdata !=
NULL);
834assert(conss !=
NULL);
840assert(conss[t] !=
NULL);
869 SCIPdebugMsg(
scip,
"result of pricing MINLP: addedvar=%u soltat=%d\n", success, solstat);
933pricerRedcostRingpacking, pricerFarkasRingpacking, pricerdata) );
941 "ringpacking/pricing/nlptilim",
942 "time limit for each pricing NLP",
946 "ringpacking/pricing/nlpnodelim",
947 "node limit for each pricing NLP",
951 "ringpacking/pricing/heurtilim",
952 "time limit for each heuristic pricing",
956 "ringpacking/pricing/heuriterlim",
957 "iteration limit for each heuristic pricing",
961 "ringpacking/pricing/totaltilim",
962 "total time limit for all pricing NLPs and heuristic calls",
978assert(pricer !=
NULL);
SCIP_Real SCIPgetDualsolLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPcreateConsQuadraticNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_Real lhs, SCIP_Real rhs, 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 SCIPisStopped(SCIP *scip)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddPricedVar(SCIP *scip, SCIP_VAR *var, SCIP_Real score)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_PROBDATA * SCIPgetProbData(SCIP *scip)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPsetMessagehdlrQuiet(SCIP *scip, SCIP_Bool quiet)
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 SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint value)
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 SCIPsetHeuristics(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemoryNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_PRICER * SCIPfindPricer(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetPricerInit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERINIT((*pricerinit)))
SCIP_PRICERDATA * SCIPpricerGetData(SCIP_PRICER *pricer)
SCIP_RETCODE SCIPsetPricerExit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICEREXIT((*pricerexit)))
SCIP_RETCODE SCIPactivatePricer(SCIP *scip, SCIP_PRICER *pricer)
SCIP_RETCODE SCIPsetPricerFree(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERFREE((*pricerfree)))
SCIP_RETCODE SCIPincludePricerBasic(SCIP *scip, SCIP_PRICER **pricerptr, const char *name, const char *desc, int priority, SCIP_Bool delay, SCIP_DECL_PRICERREDCOST((*pricerredcost)), SCIP_DECL_PRICERFARKAS((*pricerfarkas)), SCIP_PRICERDATA *pricerdata)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
int SCIPgetNSols(SCIP *scip)
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_Real SCIPgetDualbound(SCIP *scip)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Real SCIPgetTotalTime(SCIP *scip)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
int SCIPgetDepth(SCIP *scip)
void SCIPvarMarkDeletable(SCIP_VAR *var)
SCIP_RETCODE SCIPvarSetInitial(SCIP_VAR *var, SCIP_Bool initial)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPvarSetRemovable(SCIP_VAR *var, SCIP_Bool removable)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
void SCIPsortDownRealInt(SCIP_Real *realarray, int *intarray, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
#define BMSclearMemory(ptr)
SCIP_RETCODE SCIPpatternAddElement(SCIP_PATTERN *pattern, int type, SCIP_Real x, SCIP_Real y)
void SCIPpatternSetPackableStatus(SCIP_PATTERN *pattern, SCIP_PACKABLE packable)
SCIP_RETCODE SCIPpatternCreateRectangular(SCIP *scip, SCIP_PATTERN **pattern)
void SCIPpatternRelease(SCIP *scip, SCIP_PATTERN **pattern)
pattern data for ringpacking problem
@ SCIP_PATTERNTYPE_RECTANGULAR
static SCIP_DECL_PRICEREXIT(pricerExitRingpacking)
static SCIP_DECL_PRICERREDCOST(pricerRedcostRingpacking)
static SCIP_RETCODE solvePricingMINLP(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_Real *lambdas, SCIP_Real timelim, SCIP_Longint nodelim, SCIP_Bool *addedvar, SCIP_STATUS *solstat, SCIP_Real *dualbound)
static SCIP_DECL_PRICERFREE(pricerFreeRingpacking)
static SCIP_RETCODE addVariable(SCIP *scip, SCIP_PROBDATA *probdata, int *types, SCIP_Real *xs, SCIP_Real *ys, SCIP_Bool *ispacked, int nelems)
#define DEFAULT_PRICING_HEURTILIM
#define DEFAULT_PRICING_NLPNODELIM
static SCIP_DECL_PRICERFARKAS(pricerFarkasRingpacking)
static SCIP_RETCODE solvePricingHeuristic(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_PRICERDATA *pricerdata, SCIP_Real *lambdas, SCIP_Real timelim, int iterlim, SCIP_Bool *addedvar)
static SCIP_DECL_PRICERINIT(pricerInitRingpacking)
static void computeScores(SCIP *scip, SCIP_Real *rexts, SCIP_RANDNUMGEN *randnumgen, int *elements, int nelements, SCIP_Real *lambdas, SCIP_Real *scores, int iter, int iterlim)
#define DEFAULT_PRICING_NLPTILIM
static SCIP_Real getDensityUb(int n)
SCIP_RETCODE SCIPpricerRpaActivate(SCIP *scip)
SCIP_RETCODE SCIPincludePricerRpa(SCIP *scip)
#define DEFAULT_PRICING_TOTALTILIM
static SCIP_RETCODE extractVariablesMINLP(SCIP *scip, SCIP_PROBDATA *probdata, SCIP *subscip, SCIP_VAR **x, SCIP_VAR **y, SCIP_VAR **w, int *types, int nvars, SCIP_Bool *success)
static int getNCircles(SCIP *scip, SCIP_Real rext, int demand, SCIP_Real width, SCIP_Real height, SCIP_Real lambda)
#define DEFAULT_PRICING_HEURITERLIM
Ringpacking variable pricer.
SCIP_Real SCIPprobdataGetHeight(SCIP_PROBDATA *probdata)
SCIP_Bool SCIPprobdataIsDualboundInvalid(SCIP_PROBDATA *probdata)
int * SCIPprobdataGetDemands(SCIP_PROBDATA *probdata)
int SCIPprobdataGetNTypes(SCIP_PROBDATA *probdata)
SCIP_RETCODE SCIPprobdataAddVar(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_PATTERN *pattern, SCIP_VAR *var)
SCIP_Real * SCIPprobdataGetRexts(SCIP_PROBDATA *probdata)
SCIP_CONS ** SCIPprobdataGetPatternConss(SCIP_PROBDATA *probdata)
void SCIPprobdataUpdateDualbound(SCIP *scip, SCIP_PROBDATA *probdata, SCIP_Real dualbound)
void SCIPprobdataInvalidateDualbound(SCIP *scip, SCIP_PROBDATA *probdata)
void SCIPpackCirclesGreedy(SCIP *scip, SCIP_Real *rexts, SCIP_Real *xs, SCIP_Real *ys, SCIP_Real rbounding, SCIP_Real width, SCIP_Real height, SCIP_Bool *ispacked, int *elements, int nelements, SCIP_PATTERNTYPE patterntype, int *npacked, int ncalls)
SCIP_Real SCIPprobdataGetWidth(SCIP_PROBDATA *probdata)
Problem data for ringpacking problem.
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
@ SCIP_PARAMSETTING_AGGRESSIVE
struct SCIP_PricerData SCIP_PRICERDATA
struct SCIP_ProbData SCIP_PROBDATA
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Status SCIP_STATUS
@ SCIP_VARTYPE_CONTINUOUS
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4