Scippy

SCIP

Solving Constraint Integer Programs

cons_abspower.c File Reference

Detailed Description

Constraint handler for absolute power constraints $\textrm{lhs} \leq \textrm{sign}(x+a) |x+a|^n + c z \leq \textrm{rhs}$.

Author
Stefan Vigerske

Definition in file cons_abspower.c.

#include <assert.h>
#include <string.h>
#include <ctype.h>
#include "scip/cons_abspower.h"
#include "scip/cons_nonlinear.h"
#include "scip/cons_indicator.h"
#include "scip/cons_quadratic.h"
#include "scip/cons_linear.h"
#include "scip/cons_varbound.h"
#include "scip/intervalarith.h"
#include "scip/heur_subnlp.h"
#include "scip/heur_trysol.h"
#include "scip/debug.h"

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "abspower"
 
#define CONSHDLR_DESC   "constraint handler for absolute power constraints lhs <= sign(x+offset)abs(x+offset)^n + c*z <= rhs"
 
#define CONSHDLR_SEPAPRIORITY   0
 
#define CONSHDLR_ENFOPRIORITY   -30
 
#define CONSHDLR_CHECKPRIORITY   -3500000
 
#define CONSHDLR_SEPAFREQ   1
 
#define CONSHDLR_PROPFREQ   1
 
#define CONSHDLR_EAGERFREQ   100
 
#define CONSHDLR_MAXPREROUNDS   -1
 
#define CONSHDLR_DELAYSEPA   FALSE
 
#define CONSHDLR_DELAYPROP   FALSE
 
#define CONSHDLR_NEEDSCONS   TRUE
 
#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_MEDIUM
 
#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_ALWAYS
 
#define QUADCONSUPGD_PRIORITY   50000
 
#define NONLINCONSUPGD_PRIORITY   50000
 
#define PROPVARTOL   SCIPepsilon(scip)
 
#define PROPSIDETOL   SCIPepsilon(scip)
 
#define INITLPMAXVARVAL   1000.0
 
#define DECL_MYPOW(x)   SCIP_Real x (SCIP_Real base, SCIP_Real exponent)
 
#define SIGN(x)   ((x) >= 0.0 ? 1.0 : -1.0)
 
#define ROOTS_KNOWN   10
 

Typedefs

typedef enum Proprule PROPRULE
 

Enumerations

enum  Proprule {
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_INVALID,
  PROPRULE_INVALID = 0,
  PROPRULE_1 = 1,
  PROPRULE_2 = 2,
  PROPRULE_3 = 3,
  PROPRULE_4 = 4,
  PROPRULE_1_CORETIMES = 1,
  PROPRULE_2_EDGEFINDING = 2,
  PROPRULE_3_TTEF = 3,
  PROPRULE_1_RHS = 1,
  PROPRULE_1_LHS = 2,
  PROPRULE_1_RANGEDROW = 3,
  PROPRULE_INVALID = 0,
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_INVALID,
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_0,
  PROPRULE_1,
  PROPRULE_INTLB,
  PROPRULE_INTUB,
  PROPRULE_INVALID
}
 

Functions

static DECL_MYPOW (square)
 
static SCIP_DECL_EVENTEXEC (processVarEvent)
 
static SCIP_RETCODE catchVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_RETCODE dropVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_DECL_HASHGETKEY (presolveFindDuplicatesGetKey)
 
static SCIP_DECL_HASHKEYEQ (presolveFindDuplicatesKeyEQ)
 
static SCIP_DECL_HASHKEYVAL (presolveFindDuplicatesKeyVal)
 
static SCIP_DECL_HASHKEYEQ (presolveFindDuplicatesKeyEQ2)
 
static SCIP_DECL_HASHKEYVAL (presolveFindDuplicatesKeyVal2)
 
static SCIP_RETCODE presolveFindDuplicatesUpgradeCons (SCIP *scip, SCIP_CONS *cons1, SCIP_CONS *cons2, SCIP_Bool *infeas, int *nupgdconss, int *ndelconss, int *naggrvars)
 
static void presolveFindDuplicatesSolveEquations (SCIP *scip, SCIP_Bool *infeas, SCIP_Real *xval, SCIP_Real *zval, SCIP_Real exponent, SCIP_Real xoffset1, SCIP_Real zcoef1, SCIP_Real rhs1, SCIP_Real xoffset2, SCIP_Real zcoef2, SCIP_Real rhs2)
 
static SCIP_RETCODE presolveFindDuplicates (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *nupgdconss, int *ndelconss, int *naddconss, int *nfixedvars, int *naggrvars, SCIP_Bool *success, SCIP_Bool *infeas)
 
static SCIP_RETCODE presolveDual (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *ndelconss, int *nfixedvars)
 
static SCIP_RETCODE tightenBounds (SCIP *scip, SCIP_VAR *var, SCIP_INTERVAL bounds, SCIP_Bool force, SCIP_CONS *cons, SCIP_RESULT *result, int *nchgbds, int *nfixedvars, int *naddconss)
 
static void computeBoundsZ (SCIP *scip, SCIP_CONS *cons, SCIP_INTERVAL xbnds, SCIP_INTERVAL *zbnds)
 
static void computeBoundsX (SCIP *scip, SCIP_CONS *cons, SCIP_INTERVAL zbnds, SCIP_INTERVAL *xbnds)
 
static SCIP_RETCODE checkFixedVariables (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, int *ndelconss, int *nupgdconss, int *nchgbds, int *nfixedvars, SCIP_RESULT *result)
 
static SCIP_Real getGradientMaxElement (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
 
static SCIP_RETCODE computeViolation (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Real *viol)
 
static SCIP_RETCODE computeViolations (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_CONS **maxviolcon)
 
static SCIP_Real proposeBranchingPoint (SCIP *scip, SCIP_CONS *cons, int preferzero, SCIP_Bool branchminconverror)
 
static SCIP_RETCODE registerBranchingCandidates (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *nnotify)
 
static SCIP_RETCODE registerLargeLPValueVariableForBranching (SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_VAR **brvar)
 
static SCIP_RETCODE resolvePropagation (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
 
static SCIP_RETCODE analyzeConflict (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BOUNDTYPE boundtype)
 
static SCIP_RETCODE propagateCons (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool canaddcons, SCIP_Bool *cutoff, int *nchgbds, int *naddconss)
 
static SCIP_RETCODE addVarbound (SCIP *scip, SCIP_CONS *cons, SCIP_Bool addcons, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *infeas, int *nbdchgs, int *naddconss)
 
static SCIP_RETCODE propagateVarbounds (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool *infeas, int *nbdchgs, int *naddconss)
 
static SCIP_RETCODE generateLinearizationCut (SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, SCIP_Real refpoint, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z, SCIP_Bool islocal)
 
static SCIP_RETCODE generateLinearizationCutProject (SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, SCIP_Real xref, SCIP_Real zref, SCIP_Real xmin, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z, SCIP_Bool islocal)
 
static SCIP_RETCODE generateSecantCut (SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_Real xlb, SCIP_Real xub, SCIP_Real exponent, SCIP_Real xoffset, DECL_MYPOW((*mypow)), SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z)
 
static SCIP_RETCODE generateSecantCutNoCheck (SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, SCIP_Real xlb, SCIP_Real xub, SCIP_Real exponent, SCIP_Real xoffset, DECL_MYPOW((*mypow)), SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z)
 
static SCIP_RETCODE generateCut (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_ROW **row, SCIP_Bool onlyinbounds)
 
static SCIP_RETCODE separatePoint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_Real minefficacy, SCIP_Bool inenforcement, SCIP_Bool onlyinbounds, SCIP_Bool *success, SCIP_Bool *cutoff, SCIP_Real *bestefficacy)
 
static SCIP_RETCODE addLinearizationCuts (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *ref, SCIP_Bool *separatedlpsol, SCIP_Real minefficacy)
 
static SCIP_DECL_EVENTEXEC (processNewSolutionEvent)
 
static SCIP_RETCODE proposeFeasibleSolution (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol)
 
static SCIP_RETCODE createNlRow (SCIP *scip, SCIP_CONS *cons)
 
static SCIP_DECL_QUADCONSUPGD (quadconsUpgdAbspower)
 
static SCIP_DECL_NONLINCONSUPGD (nonlinconsUpgdAbspower)
 
static SCIP_DECL_EXPRGRAPHNODEREFORM (exprgraphnodeReformAbspower)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyAbspower)
 
static SCIP_DECL_CONSFREE (consFreeAbspower)
 
static SCIP_DECL_CONSINIT (consInitAbspower)
 
static SCIP_DECL_CONSEXIT (consExitAbspower)
 
static SCIP_DECL_CONSINITPRE (consInitpreAbspower)
 
static SCIP_DECL_CONSEXITPRE (consExitpreAbspower)
 
static SCIP_DECL_CONSINITSOL (consInitsolAbspower)
 
static SCIP_DECL_CONSEXITSOL (consExitsolAbspower)
 
static SCIP_DECL_CONSDELETE (consDeleteAbspower)
 
static SCIP_DECL_CONSTRANS (consTransAbspower)
 
static SCIP_DECL_CONSINITLP (consInitlpAbspower)
 
static SCIP_DECL_CONSSEPALP (consSepalpAbspower)
 
static SCIP_DECL_CONSSEPASOL (consSepasolAbspower)
 
static SCIP_DECL_CONSENFOLP (consEnfolpAbspower)
 
static SCIP_DECL_CONSENFOPS (consEnfopsAbspower)
 
static SCIP_DECL_CONSPROP (consPropAbspower)
 
static SCIP_DECL_CONSPRESOL (consPresolAbspower)
 
static SCIP_DECL_CONSRESPROP (consRespropAbspower)
 
static SCIP_DECL_CONSLOCK (consLockAbspower)
 
static SCIP_DECL_CONSACTIVE (consActiveAbspower)
 
static SCIP_DECL_CONSENABLE (consEnableAbspower)
 
static SCIP_DECL_CONSDISABLE (consDisableAbspower)
 
static SCIP_DECL_CONSPRINT (consPrintAbspower)
 
static SCIP_DECL_CONSCHECK (consCheckAbspower)
 
static SCIP_DECL_CONSCOPY (consCopyAbspower)
 
static SCIP_DECL_CONSPARSE (consParseAbspower)
 
static SCIP_DECL_CONSGETVARS (consGetVarsAbspower)
 
static SCIP_DECL_CONSGETNVARS (consGetNVarsAbspower)
 
SCIP_RETCODE SCIPincludeConshdlrAbspower (SCIP *scip)
 
SCIP_RETCODE SCIPcreateConsAbspower (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *x, SCIP_VAR *z, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real zcoef, 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 stickingatnode)
 
SCIP_RETCODE SCIPcreateConsBasicAbspower (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *x, SCIP_VAR *z, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real zcoef, SCIP_Real lhs, SCIP_Real rhs)
 
SCIP_RETCODE SCIPgetNlRowAbspower (SCIP *scip, SCIP_CONS *cons, SCIP_NLROW **nlrow)
 
SCIP_VARSCIPgetNonlinearVarAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_VARSCIPgetLinearVarAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetExponentAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetOffsetAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetCoefLinearAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetLhsAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetRhsAbspower (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetViolationAbspower (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
 

Variables

static SCIP_Real roots [ROOTS_KNOWN+1]
 

Macro Definition Documentation

#define CONSHDLR_DESC   "constraint handler for absolute power constraints lhs <= sign(x+offset)abs(x+offset)^n + c*z <= rhs"

Definition at line 40 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_SEPAPRIORITY   0

priority of the constraint handler for separation

Definition at line 41 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_ENFOPRIORITY   -30

priority of the constraint handler for constraint enforcing

Definition at line 42 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_CHECKPRIORITY   -3500000

priority of the constraint handler for checking feasibility

Definition at line 43 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_SEPAFREQ   1

frequency for separating cuts; zero means to separate only in the root node

Definition at line 44 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_PROPFREQ   1

frequency for propagating domains; zero means only preprocessing propagation

Definition at line 45 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_EAGERFREQ   100

frequency for using all instead of only the useful constraints in separation, propagation and enforcement, -1 for no eager evaluations, 0 for first only

Definition at line 46 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_MAXPREROUNDS   -1

maximal number of presolving rounds the constraint handler participates in (-1: no limit)

Definition at line 49 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_DELAYSEPA   FALSE

should separation method be delayed, if other separators found cuts?

Definition at line 50 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_DELAYPROP   FALSE

should propagation method be delayed, if other propagators found reductions?

Definition at line 51 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_NEEDSCONS   TRUE

should the constraint handler be skipped, if no constraints are available?

Definition at line 52 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_MEDIUM

Definition at line 54 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_ALWAYS

when should the constraint handlers propagation routines be called?

Definition at line 55 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define QUADCONSUPGD_PRIORITY   50000

priority of the constraint handler for upgrading of quadratic constraints

Definition at line 57 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define NONLINCONSUPGD_PRIORITY   50000

priority of the constraint handler for upgrading of nonlinear constraints and reformulating expression graph nodes

Definition at line 58 of file cons_abspower.c.

Referenced by SCIPincludeConshdlrAbspower().

#define PROPVARTOL   SCIPepsilon(scip)

tolerance to add to variable bounds in domain propagation

Definition at line 64 of file cons_abspower.c.

Referenced by computeBoundsX(), computeBoundsZ(), and propagateCons().

#define PROPSIDETOL   SCIPepsilon(scip)

tolerance to add to constraint sides in domain propagation

Definition at line 65 of file cons_abspower.c.

Referenced by computeBoundsX(), computeBoundsZ(), and propagateCons().

#define INITLPMAXVARVAL   1000.0

maximal absolute value of variable for still generating a linearization cut at that point in initlp

Definition at line 66 of file cons_abspower.c.

Referenced by SCIP_DECL_CONSINITLP().

#define DECL_MYPOW (   x)    SCIP_Real x (SCIP_Real base, SCIP_Real exponent)

power function type to be used by a constraint instead of the general pow

Definition at line 69 of file cons_abspower.c.

#define ROOTS_KNOWN   10

up to which (integer) exponents precomputed roots have been stored

Definition at line 82 of file cons_abspower.c.

Referenced by SCIP_DECL_CONSINITSOL().

Typedef Documentation

typedef enum Proprule PROPRULE

Definition at line 170 of file cons_abspower.c.

Enumeration Type Documentation

enum Proprule
Enumerator
PROPRULE_1 

left hand side and bounds on z -> lower bound on x

PROPRULE_2 

left hand side and upper bound on x -> bound on z

PROPRULE_3 

right hand side and bounds on z -> upper bound on x

PROPRULE_4 

right hand side and lower bound on x -> bound on z

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

v_i = FALSE => r = FALSE

PROPRULE_2 

r = TRUE => v_i = TRUE for all i

PROPRULE_3 

v_i = TRUE for all i => r = TRUE

PROPRULE_4 

r = FALSE, v_i = TRUE for all i except j => v_j = FALSE

PROPRULE_1_CORETIMES 

core-time propagator

PROPRULE_2_EDGEFINDING 

edge-finder

PROPRULE_3_TTEF 

time-table edeg-finding

PROPRULE_1_RHS 

activity residuals of all other variables tighten bounds of single variable due to the right hand side of the inequality

PROPRULE_1_LHS 

activity residuals of all other variables tighten bounds of single variable due to the left hand side of the inequality

PROPRULE_1_RANGEDROW 

fixed variables and gcd of all left variables tighten bounds of a single variable in this reanged row

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

v_i = TRUE => r = TRUE

PROPRULE_2 

r = FALSE => v_i = FALSE for all i

PROPRULE_3 

v_i = FALSE for all i => r = FALSE

PROPRULE_4 

r = TRUE, v_i = FALSE for all i except j => v_j = TRUE

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

left hand side and bounds on y -> lower bound on x

PROPRULE_2 

left hand side and upper bound on x -> bound on y

PROPRULE_3 

right hand side and bounds on y -> upper bound on x

PROPRULE_4 

right hand side and lower bound on x -> bound on y

PROPRULE_0 

all variables are fixed => fix integral variable

PROPRULE_1 

all except one variable fixed => fix remaining variable

PROPRULE_INTLB 

lower bound propagation of integral variable

PROPRULE_INTUB 

upper bound propagation of integral variable

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

Definition at line 162 of file cons_abspower.c.

Function Documentation

static DECL_MYPOW ( square  )
static

power function for square, that should be faster than using pow(x, 2.0)

Definition at line 178 of file cons_abspower.c.

References SCIP_DECL_EVENTEXEC().

static SCIP_DECL_EVENTEXEC ( processVarEvent  )
static

process variable event

Definition at line 186 of file cons_abspower.c.

References catchVarEvents(), FALSE, NULL, SCIP_Bool, SCIP_EVENTTYPE_BOUNDTIGHTENED, SCIP_OKAY, and SCIPeventGetType().

Referenced by addLinearizationCuts(), and DECL_MYPOW().

static SCIP_RETCODE catchVarEvents ( SCIP scip,
SCIP_EVENTHDLR eventhdlr,
SCIP_CONS cons 
)
static

catch variable bound tightening events

Parameters
scipSCIP data structure
eventhdlrevent handler for variables
consconstraint for which to catch bound change events

Definition at line 204 of file cons_abspower.c.

References dropVarEvents(), FALSE, NULL, SCIP_CALL, SCIP_EVENTTYPE_DISABLED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, SCIP_VARSTATUS_MULTAGGR, SCIPcatchVarEvent(), SCIPconsGetData(), SCIPisInfinity(), SCIPvarGetStatus(), and TRUE.

Referenced by checkFixedVariables(), presolveFindDuplicates(), SCIP_DECL_CONSENABLE(), and SCIP_DECL_EVENTEXEC().

static SCIP_RETCODE dropVarEvents ( SCIP scip,
SCIP_EVENTHDLR eventhdlr,
SCIP_CONS cons 
)
static

drop variable bound tightening events

Parameters
scipSCIP data structure
eventhdlrevent handler for variables
consconstraint for which to drop bound change events

Definition at line 266 of file cons_abspower.c.

References NULL, SCIP_CALL, SCIP_DECL_HASHGETKEY(), SCIP_EVENTTYPE_DISABLED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, SCIP_VARSTATUS_MULTAGGR, SCIPconsGetData(), SCIPdropVarEvent(), SCIPisInfinity(), and SCIPvarGetStatus().

Referenced by catchVarEvents(), checkFixedVariables(), presolveFindDuplicates(), and SCIP_DECL_CONSDISABLE().

static SCIP_DECL_HASHGETKEY ( presolveFindDuplicatesGetKey  )
static

get key of hash element

Definition at line 324 of file cons_abspower.c.

References SCIP_DECL_HASHKEYEQ().

Referenced by dropVarEvents().

static SCIP_DECL_HASHKEYEQ ( presolveFindDuplicatesKeyEQ  )
static

checks if two constraints have the same x variable, the same exponent, and either the same offset or the same linear variable and are both equality constraint

Definition at line 331 of file cons_abspower.c.

References FALSE, NULL, SCIP_DECL_HASHKEYVAL(), SCIPconsGetData(), and TRUE.

Referenced by SCIP_DECL_HASHGETKEY(), and SCIP_DECL_HASHKEYVAL().

static SCIP_DECL_HASHKEYVAL ( presolveFindDuplicatesKeyVal  )
static

get value of hash element when comparing on x

Definition at line 355 of file cons_abspower.c.

References NULL, SCIP_DECL_HASHKEYEQ(), and SCIPconsGetData().

Referenced by SCIP_DECL_HASHKEYEQ().

static SCIP_DECL_HASHKEYEQ ( presolveFindDuplicatesKeyEQ2  )
static

checks if two constraints have the same z variable and the same exponent

Definition at line 367 of file cons_abspower.c.

References FALSE, NULL, SCIP_DECL_HASHKEYVAL(), SCIPconsGetData(), and TRUE.

static SCIP_DECL_HASHKEYVAL ( presolveFindDuplicatesKeyVal2  )
static

get value of hash element when comparing on z

Definition at line 388 of file cons_abspower.c.

References NULL, presolveFindDuplicatesUpgradeCons(), and SCIPconsGetData().

static SCIP_RETCODE presolveFindDuplicatesUpgradeCons ( SCIP scip,
SCIP_CONS cons1,
SCIP_CONS cons2,
SCIP_Bool infeas,
int *  nupgdconss,
int *  ndelconss,
int *  naggrvars 
)
static

upgrades a signpower constraint to a linear constraint if a second signpower constraint with same nonlinear term is available

Parameters
scipSCIP data structure
cons1constraint to upgrade to a linear constraint
cons2constraint which defines a relation for x|x|^{n-1}
infeasbuffer where to indicate if infeasibility has been detected
nupgdconssbuffer where to add number of upgraded conss
ndelconssbuffer where to add number of deleted conss
naggrvarsbuffer where to add number of aggregated variables

Definition at line 400 of file cons_abspower.c.

References NULL, presolveFindDuplicatesSolveEquations(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddCons(), SCIPaggregateVars(), SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsLinear(), SCIPdelCons(), SCIPisEQ(), SCIPisInfinity(), and SCIPreleaseCons().

Referenced by presolveFindDuplicates(), and SCIP_DECL_HASHKEYVAL().

static void presolveFindDuplicatesSolveEquations ( SCIP scip,
SCIP_Bool infeas,
SCIP_Real xval,
SCIP_Real zval,
SCIP_Real  exponent,
SCIP_Real  xoffset1,
SCIP_Real  zcoef1,
SCIP_Real  rhs1,
SCIP_Real  xoffset2,
SCIP_Real  zcoef2,
SCIP_Real  rhs2 
)
static

solves a system of two absolute power equations Given: (x+xoffset1)|x+xoffset1|^{exponent-1} + zcoef1 * z == rhs1 and (x+xoffset2)|x+xoffset2|^{exponent-1} + zcoef2 * z == rhs2 with xoffset1 != xoffset2 and zcoef1 * rhs2 == zcoef2 * rhs1 and exponent == 2, finds values for x and z that satisfy these equations, or reports infeasibility if no solution exists.

Multiplying the second equation by -zcoef1/zcoef2 and adding it to the first one gives (x+xoffset1)|x+xoffset1| - zcoef1/zcoef2 (x+offset2)|x+offset2| == 0

If zcoef1 == zcoef2, then there exists, due to monotonicity of x|x|, no x such that (x+xoffset1)|x+xoffset1| == (x+xoffset2)|x+xoffset2|.

In general, for zcoef1 / zcoef2 > 0.0, we get x = (xoffset2 - xoffset1) / (sqrt(zcoef2 / zcoef1) - 1.0) - xoffset1, and for zcoef1 / zcoef2 < 0.0, we get x = (xoffset2 - xoffset1) / (-sqrt(-zcoef2 / zcoef1) - 1.0) - xoffset1.

This then yields z = (rhs1 - (x+xoffset1)|x+xoffset1|) / zcoef1.

Parameters
scipSCIP data structure
infeasbuffer to indicate if the system of equations has no solution
xvalbuffer to store value of x in the solution, if any
zvalbuffer to store value of z in the solution, if any
exponentexponent in absolute power equations
xoffset1offset for x in first absolute power equation
zcoef1coefficient of z in first absolute power equation
rhs1right-hand-side in first absolute power equation
xoffset2offset for x in second absolute power equation
zcoef2coefficient of z in second absolute power equation
rhs2right-hand-side in second absolute power equation

Definition at line 517 of file cons_abspower.c.

References FALSE, NULL, presolveFindDuplicates(), REALABS, SCIPisEQ(), SCIPisFeasEQ(), sqrt(), and TRUE.

Referenced by presolveFindDuplicates(), and presolveFindDuplicatesUpgradeCons().

static SCIP_RETCODE presolveFindDuplicates ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
int *  nupgdconss,
int *  ndelconss,
int *  naddconss,
int *  nfixedvars,
int *  naggrvars,
SCIP_Bool success,
SCIP_Bool infeas 
)
static

finds and removes duplicates in a set of absolute power constraints

Parameters
scipSCIP data structure
conshdlrconstraint handler for absolute power constraints
conssconstraints
nconssnumber of constraints
nupgdconsspointer where to add number of upgraded constraints
ndelconsspointer where to add number of deleted constraints
naddconsspointer where to add number of added constraints
nfixedvarspointer where to add number of fixed variables
naggrvarspointer where to add number of aggregated variables
successpointer to store whether a duplicate was found (and removed)
infeaspointer to store whether infeasibility was detected

Definition at line 578 of file cons_abspower.c.

References catchVarEvents(), dropVarEvents(), FALSE, MAX, MIN, NULL, pow(), presolveDual(), presolveFindDuplicatesSolveEquations(), presolveFindDuplicatesUpgradeCons(), REALABS, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPaggregateVars(), SCIPblkmem(), SCIPcalcHashtableSize(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconsIsActive(), SCIPconsIsChecked(), SCIPconsIsDeleted(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsAbspower(), SCIPcreateConsLinear(), SCIPcreateVar(), SCIPdebugAddSolVal, SCIPdebugGetSolVal, SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelCons(), SCIPfixVar(), SCIPhashtableCreate(), SCIPhashtableFree(), SCIPhashtableInsert(), SCIPhashtableRemove(), SCIPhashtableRetrieveNext(), SCIPinfinity(), SCIPisEQ(), SCIPisGT(), SCIPisInfinity(), SCIPisZero(), SCIPlockVarCons(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsnprintf(), SCIPunlockVarCons(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetProbvar(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), SIGN, sqrt(), and TRUE.

Referenced by presolveFindDuplicatesSolveEquations(), and SCIP_DECL_CONSPRESOL().

static SCIP_RETCODE presolveDual ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool cutoff,
int *  ndelconss,
int *  nfixedvars 
)
static

fix variables not appearing in any other constraint

Parameters
scipSCIP data structure
consconstraint
cutoffbuffer to indicate whether a cutoff was detected
ndelconssbuffer to increase with the number of deleted constraint
nfixedvarsbuffer to increase with the number of fixed variables

Definition at line 1094 of file cons_abspower.c.

References MAX, MIN, NULL, SCIP_Bool, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIP_VARTYPE_INTEGER, SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsChecked(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelCons(), SCIPfixVar(), SCIPinfinity(), SCIPisEQ(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPisGE(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPisLT(), SCIPisZero(), SCIPvarGetBestBoundGlobal(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), SCIPvarGetObj(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SIGN, and tightenBounds().

Referenced by presolveFindDuplicates(), and SCIP_DECL_CONSPRESOL().

static SCIP_RETCODE tightenBounds ( SCIP scip,
SCIP_VAR var,
SCIP_INTERVAL  bounds,
SCIP_Bool  force,
SCIP_CONS cons,
SCIP_RESULT result,
int *  nchgbds,
int *  nfixedvars,
int *  naddconss 
)
static

given a variable and an interval, tightens the local bounds of this variable to the given interval

Parameters
scipSCIP data structure
varvariable which bounds to tighten
boundsnew bounds
forceforce tightening even if below bound strengthening tolerance
consconstraint that is propagated
resultpointer to store the result of the propagation call
nchgbdsbuffer where to add the number of changed bounds
nfixedvarsbuffer where to add the number of fixed variables, can be equal to nchgbds
naddconssbuffer where to add the number of added constraints, can be NULL if force is FALSE

Definition at line 1383 of file cons_abspower.c.

References computeBoundsZ(), FALSE, SCIP_Interval::inf, NULL, SCIP_Bool, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_STAGE_SOLVING, SCIPaddCons(), SCIPaddConsLocal(), SCIPconsGetName(), SCIPconsIsChecked(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsPropagated(), SCIPconsIsSeparated(), SCIPcreateConsLinear(), SCIPdebugMessage, SCIPfixVar(), SCIPgetCurrentNode(), SCIPgetStage(), SCIPinProbing(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPisEQ(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPnodeGetDepth(), SCIPreleaseCons(), SCIPtightenVarLb(), SCIPtightenVarUb(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetProbvar(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SCIP_Interval::sup, and TRUE.

Referenced by checkFixedVariables(), presolveDual(), and propagateCons().

static void computeBoundsZ ( SCIP scip,
SCIP_CONS cons,
SCIP_INTERVAL  xbnds,
SCIP_INTERVAL zbnds 
)
static

computes bounds on z in a absolute power constraints for given bounds on x

Parameters
scipSCIP data structure
consconstraint
xbndsbounds on x that are to be propagated
zbndsbuffer to store corresponding bounds on z

Definition at line 1537 of file cons_abspower.c.

References computeBoundsX(), SCIP_Interval::inf, NULL, PROPSIDETOL, PROPVARTOL, REALABS, SCIP_Real, SCIPconsGetData(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPinfinity(), SCIPintervalIsEmpty(), SCIPintervalSetEntire(), SCIPisInfinity(), SIGN, and SCIP_Interval::sup.

Referenced by checkFixedVariables(), propagateCons(), and tightenBounds().

static void computeBoundsX ( SCIP scip,
SCIP_CONS cons,
SCIP_INTERVAL  zbnds,
SCIP_INTERVAL xbnds 
)
static

computes bounds on x in a absolute power constraints for given bounds on z

Parameters
scipSCIP data structure
consconstraint
zbndsbounds on x that are to be propagated
xbndsbuffer to store corresponding bounds on z

Definition at line 1590 of file cons_abspower.c.

References checkFixedVariables(), SCIP_Interval::inf, NULL, pow(), PROPSIDETOL, PROPVARTOL, REALABS, SCIP_Real, SCIPconsGetData(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPinfinity(), SCIPintervalIsEmpty(), SCIPintervalSetEntire(), SCIPisInfinity(), SIGN, sqrt(), and SCIP_Interval::sup.

Referenced by checkFixedVariables(), computeBoundsZ(), and propagateCons().

static SCIP_RETCODE checkFixedVariables ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
int *  ndelconss,
int *  nupgdconss,
int *  nchgbds,
int *  nfixedvars,
SCIP_RESULT result 
)
static

checks if x or z is fixed and replaces them or deletes constraint

Parameters
scipSCIP data structure
conshdlrconstraint handler for absolute power constraints
consconstraint
ndelconsscounter for number of deleted constraints
nupgdconsscounter for number of upgraded constraints
nchgbdscounter for number of variable bound changes
nfixedvarscounter for number of variable fixations
resultto store result if we detect infeasibility or remove constraint

Definition at line 1643 of file cons_abspower.c.

References catchVarEvents(), computeBoundsX(), computeBoundsZ(), dropVarEvents(), FALSE, getGradientMaxElement(), SCIP_Interval::inf, MAX, MIN, NULL, pow(), REALABS, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPdebugMessage, SCIPdebugPrintCons, SCIPdelCons(), SCIPgetProbvarSum(), SCIPinfinity(), SCIPintervalSet(), SCIPisEQ(), SCIPisFeasEQ(), SCIPisFeasGT(), SCIPisFeasLT(), SCIPisGE(), SCIPisInfinity(), SCIPisLE(), SCIPisZero(), SCIPlockVarCons(), SCIPmarkDoNotMultaggrVar(), SCIPunlockVarCons(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsActive(), SCIPwarningMessage(), SIGN, sqrt(), SCIP_Interval::sup, tightenBounds(), and TRUE.

Referenced by computeBoundsX(), and SCIP_DECL_CONSPRESOL().

static SCIP_Real getGradientMaxElement ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol 
)
static

gets maximal absolute value in gradient of quadratic function thus, gives $max(n |x+offset|^{n-1}, |zcoef|)$.

Parameters
scipSCIP data structure
consconstraint
solsolution or NULL if LP solution should be used

Definition at line 1938 of file cons_abspower.c.

References computeViolation(), MAX, NULL, pow(), REALABS, SCIP_Real, SCIPconsGetData(), SCIPgetSolVal(), and SCIPisInfinity().

Referenced by checkFixedVariables(), and computeViolation().

static SCIP_RETCODE computeViolation ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_Real viol 
)
static

computes violation of a constraint

Parameters
scipSCIP data structure
conshdlrconstraint handler
consconstraint
solsolution or NULL if LP solution should be used
violpointer to store absolute (unscaled) constraint violation

Definition at line 1967 of file cons_abspower.c.

References computeViolations(), getGradientMaxElement(), MAX, MIN, NULL, REALABS, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPerrorMessage, SCIPgetSolVal(), SCIPinfinity(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPisInfinity(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and SIGN.

Referenced by computeViolations(), getGradientMaxElement(), proposeFeasibleSolution(), and SCIP_DECL_CONSCHECK().

static SCIP_RETCODE computeViolations ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
SCIP_SOL sol,
SCIP_CONS **  maxviolcon 
)
static

computes violation of a set of constraints

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints
nconssnumber of constraints
solsolution or NULL if LP solution should be used
maxviolconbuffer to store constraint with largest violation, or NULL if solution is feasible

Definition at line 2096 of file cons_abspower.c.

References computeViolation(), MAX, NULL, proposeBranchingPoint(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPfeastol(), and SCIPisGT().

Referenced by computeViolation(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().

static SCIP_Real proposeBranchingPoint ( SCIP scip,
SCIP_CONS cons,
int  preferzero,
SCIP_Bool  branchminconverror 
)
static

proposes branching point for constraint

Parameters
scipSCIP data structure
consconstraint which variable to get branching point for
preferzerohow much we prefer branching on -xoffset (0, 1, or 2) if sign is not fixed
branchminconverrorwhether to minimize convexification error if sign is fixed

Definition at line 2141 of file cons_abspower.c.

References MAX, MIN, NULL, pow(), registerBranchingCandidates(), SCIP_INVALID, SCIP_Real, SCIPconsGetData(), SCIPfeastol(), SCIPgetVarSol(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPisGE(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPisLT(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().

Referenced by computeViolations(), registerBranchingCandidates(), and SCIP_DECL_CONSENFOPS().

static SCIP_RETCODE registerBranchingCandidates ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
int *  nnotify 
)
static

registers branching variable candidates registers x for all violated absolute power constraints where x is not in convex region

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints to check
nconssnumber of constraints to check
nnotifycounter for number of notifications performed

Definition at line 2249 of file cons_abspower.c.

References FALSE, MAX, NULL, proposeBranchingPoint(), registerLargeLPValueVariableForBranching(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPaddExternBranchCand(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPdebugMessage, SCIPfeastol(), SCIPgetSolVal(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPisRelEQ(), SCIPvarGetLbLocal(), SCIPvarGetName(), and SCIPvarGetUbLocal().

Referenced by proposeBranchingPoint(), and SCIP_DECL_CONSENFOLP().

static SCIP_RETCODE registerLargeLPValueVariableForBranching ( SCIP scip,
SCIP_CONS **  conss,
int  nconss,
SCIP_VAR **  brvar 
)
static

registers a variable from a violated constraint as branching candidate that has a large absolute value in the LP relaxation

Parameters
scipSCIP data structure
conssconstraints
nconssnumber of constraints
brvarbuffer to store branching variable

Definition at line 2317 of file cons_abspower.c.

References NULL, REALABS, resolvePropagation(), SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPaddExternBranchCand(), SCIPconsGetData(), SCIPfeastol(), SCIPgetSolVal(), and SCIPisGT().

Referenced by registerBranchingCandidates(), and SCIP_DECL_CONSENFOLP().

static SCIP_RETCODE resolvePropagation ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR infervar,
PROPRULE  proprule,
SCIP_BOUNDTYPE  boundtype,
SCIP_BDCHGIDX bdchgidx 
)
static

resolves a propagation on the given variable by supplying the variables needed for applying the corresponding propagation rule (see propagateCons()): see cons_varbound

Parameters
scipSCIP data structure
consconstraint that inferred the bound change
infervarvariable that was deduced
proprulepropagation rule that deduced the bound change
boundtypethe type of the changed bound (lower or upper bound)
bdchgidxbound change index (time stamp of bound change), or NULL for current time

Definition at line 2365 of file cons_abspower.c.

References analyzeConflict(), NULL, PROPRULE_1, PROPRULE_2, PROPRULE_3, PROPRULE_4, PROPRULE_INVALID, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconsGetData(), SCIPconsGetName(), SCIPerrorMessage, and SCIPisInfinity().

Referenced by analyzeConflict(), registerLargeLPValueVariableForBranching(), and SCIP_DECL_CONSRESPROP().

static SCIP_RETCODE analyzeConflict ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR infervar,
PROPRULE  proprule,
SCIP_BOUNDTYPE  boundtype 
)
static

analyze infeasibility

Parameters
scipSCIP data structure
consvariable bound constraint
infervarvariable that was deduced
proprulepropagation rule that deduced the bound change
boundtypethe type of the changed bound (lower or upper bound)

Definition at line 2441 of file cons_abspower.c.

References NULL, propagateCons(), resolvePropagation(), SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPanalyzeConflictCons(), SCIPgetStage(), SCIPinitConflictAnalysis(), SCIPinProbing(), and SCIPisConflictAnalysisApplicable().

Referenced by propagateCons(), and resolvePropagation().

static SCIP_RETCODE propagateCons ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
SCIP_Bool  canaddcons,
SCIP_Bool cutoff,
int *  nchgbds,
int *  naddconss 
)
static

propagation method for absolute power constraint SCIPinferVarXbCons to allow for repropagation

Parameters
scipSCIP data structure
conshdlrconstraint handler
consvariable bound constraint
canaddconsare we allowed to add a linear constraint when enforcing bounds for a multiaggregated variable?
cutoffpointer to store whether the node can be cut off
nchgbdspointer to count number of bound changes
naddconsspointer to count number of added constraints

Definition at line 2480 of file cons_abspower.c.

References addVarbound(), analyzeConflict(), computeBoundsX(), computeBoundsZ(), FALSE, MAX, MIN, NULL, pow(), PROPRULE_1, PROPRULE_2, PROPRULE_3, PROPRULE_4, PROPSIDETOL, PROPVARTOL, REALABS, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_CUTOFF, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIPconsGetData(), SCIPconsGetName(), SCIPdebugMessage, SCIPdelConsLocal(), SCIPinferVarLbCons(), SCIPinferVarUbCons(), SCIPinfinity(), SCIPintervalSetBounds(), SCIPisFeasEQ(), SCIPisFeasGE(), SCIPisFeasGT(), SCIPisFeasLE(), SCIPisFeasLT(), SCIPisGT(), SCIPisInfinity(), SCIPisLbBetter(), SCIPisLT(), SCIPisRelEQ(), SCIPisUbBetter(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetProbvar(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SIGN, sqrt(), tightenBounds(), and TRUE.

Referenced by analyzeConflict(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), SCIP_DECL_CONSPRESOL(), and SCIP_DECL_CONSPROP().

static SCIP_RETCODE addVarbound ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool  addcons,
SCIP_VAR var,
SCIP_VAR vbdvar,
SCIP_Real  vbdcoef,
SCIP_Real  lhs,
SCIP_Real  rhs,
SCIP_Bool infeas,
int *  nbdchgs,
int *  naddconss 
)
static

notifies SCIP about a variable bound lhs <= x + c*y <= rhs

Parameters
scipSCIP data structure
consabsolute power constraint this variable bound is derived form
addconsshould the variable bound be added as constraint to SCIP?
varvariable x for which we want to add a variable bound
vbdvarvariable y which makes the bound a variable bound
vbdcoefcoefficient c of bounding variable vbdvar
lhsleft hand side of varbound constraint
rhsright hand side of varbound constraint
infeaspointer to store whether an infeasibility was detected
nbdchgspointer where to add number of performed bound changes
naddconsspointer where to add number of added constraints

Definition at line 3085 of file cons_abspower.c.

References FALSE, NULL, propagateVarbounds(), SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIPaddCons(), SCIPaddVarVlb(), SCIPaddVarVub(), SCIPconsGetName(), SCIPcreateConsVarbound(), SCIPdebugMessage, SCIPgetProbvarSum(), SCIPisEQ(), SCIPisInfinity(), SCIPisZero(), SCIPreleaseCons(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsActive(), SCIPvarIsIntegral(), and TRUE.

Referenced by propagateCons(), and propagateVarbounds().

static SCIP_RETCODE propagateVarbounds ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
SCIP_Bool infeas,
int *  nbdchgs,
int *  naddconss 
)
static

propagates varbounds of variables Let f(x) = sign(x+offset)|x+offset|^n, f^{-1}(y) = sign(y)|y|^(1/n) - offset. Thus, constraint is lhs <= f(x) + c*z <= rhs.

Given a variable bound constraint x <= a*y + b with y a binary variable, one obtains y = 0 -> f(x) <= f(b) -> lhs <= f(b) + c*z y = 1 -> f(x) <= f(a+b) -> lhs <= f(a+b) + c*z => lhs <= f(b) + y * (f(a+b)-f(b)) + c*z

Given a variable bound constraint x >= a*y + b with y a binary variable, one obtains analogously f(b) + y * (f(a+b)-f(b)) + c*z <= rhs

Given a variable bound constraint c*z <= a*y + b with y a binary variable, one obtains y = 0 -> lhs <= f(x) + b -> x >= f^{-1}(lhs - b) y = 1 -> lhs <= f(x) + a+b -> x >= f^{-1}(lhs - (a+b)) => x >= f^{-1}(lhs - b) + y * (f^{-1}(lhs - (a+b)) - f^{-1}(lhs - b))

Given a variable bound constraint c*z >= a*y + b with y a binary variable, one obtains analogously x <= f^{-1}(rhs - b) + y * (f^{-1}(rhs - (a+b)) - f^{-1}(rhs - b))

Parameters
scipSCIP data structure
conshdlrconstraint handler
consabsolute power constraint
infeaspointer to store whether an infeasibility was detected
nbdchgspointer where to add number of performed bound changes
naddconsspointer where to add number of added constraints

Definition at line 3192 of file cons_abspower.c.

References addVarbound(), FALSE, generateLinearizationCut(), NULL, pow(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdebugMessage, SCIPinfinity(), SCIPisFeasZero(), SCIPisInfinity(), SCIPisZero(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetNVlbs(), SCIPvarGetNVubs(), SCIPvarGetUbGlobal(), SCIPvarGetVlbCoefs(), SCIPvarGetVlbConstants(), SCIPvarGetVlbVars(), SCIPvarGetVubCoefs(), SCIPvarGetVubConstants(), SCIPvarGetVubVars(), SCIPvarIsBinary(), and SIGN.

Referenced by addVarbound(), and SCIP_DECL_CONSPRESOL().

static SCIP_RETCODE generateLinearizationCut ( SCIP scip,
SCIP_ROW **  row,
SCIP_CONSHDLR conshdlr,
SCIP_Real  refpoint,
SCIP_Real  exponent,
SCIP_Real  xoffset,
SCIP_Real  xmult,
SCIP_Real  zcoef,
SCIP_Real  rhs,
SCIP_VAR x,
SCIP_VAR z,
SCIP_Bool  islocal 
)
static

computes linear underestimator for (x+offset)^n + c*z <= rhs by linearization in x

the generated cut is xmul * n * (refpoint+offset)^(n-1) * x + c*z <= rhs + ((n-1)*refpoint-offset) * (refpoint+offset)^(n-1)

Parameters
scipSCIP data structure
rowbuffer to store row
conshdlrconstraint handler
refpointbase point for linearization
exponentexponent n in sign(x)abs(x)^n
xoffsetoffset of x
xmultmultiplier for coefficient of x
zcoefcoefficient of z
rhsright hand side
xvariable x
zvariable z
islocalwhether the cut is valid only locally

Definition at line 3410 of file cons_abspower.c.

References FALSE, generateLinearizationCutProject(), NULL, pow(), SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddVarToRow(), SCIPconshdlrGetData(), SCIPcreateEmptyRowCons(), SCIPdebugMessage, SCIPinfinity(), SCIPisFeasNegative(), SCIPisInfinity(), SCIPsnprintf(), and TRUE.

Referenced by generateCut(), generateLinearizationCutProject(), propagateVarbounds(), and SCIP_DECL_CONSINITLP().

static SCIP_RETCODE generateLinearizationCutProject ( SCIP scip,
SCIP_ROW **  row,
SCIP_CONSHDLR conshdlr,
SCIP_Real  xref,
SCIP_Real  zref,
SCIP_Real  xmin,
SCIP_Real  exponent,
SCIP_Real  xoffset,
SCIP_Real  xmult,
SCIP_Real  zcoef,
SCIP_Real  rhs,
SCIP_VAR x,
SCIP_VAR z,
SCIP_Bool  islocal 
)
static

computes linear underestimator for (x+xoffset)^n + c*z <= rhs by linearization in x

the generated cut is xmul * n * (refpoint+offset)^(n-1) * x + c*z <= rhs + ((n-1)*refpoint-offset) * (refpoint+offset)^(n-1) where refpoint is computed by projecting (xref, zref) onto the graph of (x+offset)^n w.r.t. euclidean norm

Thus, the projection is computed by minimizing 1/2(x-xref)^2 + 1/2(((x+offset)^n-rhs)/(-c) - zref)^2. I.e., we aim to find a root of g(x) = x - xref + n/c (x+offset)^(n-1) (zref - rhs/c) + n/c^2 (x+offset)^(2n-1) We do this numerically by executing up to five newton iterations. It is g'(x) = 1 + n(n-1)/c (x+offset)^(n-2) (zref - rhs/c) + n(2n-1)/c^2 (x+offset)^(2n-2)

Parameters
scipSCIP data structure
rowbuffer to store row
conshdlrconstraint handler
xrefreference point for x
zrefreference point for z
xminminimal value x is allowed to take
exponentexponent n in sign(x+offset)abs(x+offset)^n
xoffsetoffset of x
xmultmultiplier for coefficient of x
zcoefcoefficient of z
rhsright hand side
xvariable x
zvariable z
islocalwhether the cut is valid only locally

Definition at line 3479 of file cons_abspower.c.

References generateLinearizationCut(), generateSecantCut(), NULL, pow(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPisFeasNegative(), SCIPisFeasPositive(), and SCIPisInfinity().

Referenced by generateCut(), and generateLinearizationCut().

static SCIP_RETCODE generateSecantCut ( SCIP scip,
SCIP_ROW **  row,
SCIP_CONSHDLR conshdlr,
SCIP_SOL sol,
SCIP_Real  xlb,
SCIP_Real  xub,
SCIP_Real  exponent,
SCIP_Real  xoffset,
DECL_MYPOW((*mypow))  ,
SCIP_Real  xmult,
SCIP_Real  zcoef,
SCIP_Real  rhs,
SCIP_VAR x,
SCIP_VAR z 
)
static

computes secant underestimator for sign(x+offset)abs(x+offset)^n + c*z <= rhs

the generated cut is slope*xmult*x + c*z <= rhs + (-xlb-offset)^n + slope*xlb, where slope = (sign(xub+offset)*abs(xub+offset)^n + (-xlb-offset)^n) / (xub - xlb).

the cut is not generated if the given solution (or the LP solution) would not be cutoff

Parameters
scipSCIP data structure
rowbuffer to store row
conshdlrconstraint handler
solpoint we want to cut off, or NULL for LP solution
xlblower bound of x
xubupper bound of x
exponentexponent n in sign(x+offset)abs(x+offset)^n
xoffsetoffset of x
xmultmultiplier for coefficient of x
zcoefcoefficient of z
rhsright hand side
xvariable x
zvariable z

Definition at line 3554 of file cons_abspower.c.

References FALSE, generateSecantCutNoCheck(), NULL, REALABS, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddVarToRow(), SCIPchgRowRhs(), SCIPconshdlrGetData(), SCIPcreateEmptyRowCons(), SCIPgetCurrentNode(), SCIPgetSolVal(), SCIPinfinity(), SCIPisFeasPositive(), SCIPisInfinity(), SCIPisLE(), SCIPisPositive(), SCIPisRelEQ(), SCIPnodeGetDepth(), SCIPsnprintf(), SIGN, and TRUE.

Referenced by generateCut(), and generateLinearizationCutProject().

static SCIP_RETCODE generateSecantCutNoCheck ( SCIP scip,
SCIP_ROW **  row,
SCIP_CONSHDLR conshdlr,
SCIP_Real  xlb,
SCIP_Real  xub,
SCIP_Real  exponent,
SCIP_Real  xoffset,
DECL_MYPOW((*mypow))  ,
SCIP_Real  xmult,
SCIP_Real  zcoef,
SCIP_Real  rhs,
SCIP_VAR x,
SCIP_VAR z 
)
static

computes secant underestimator for sign(x+xoffset)abs(x+xoffset)^n + c*z <= rhs

The generated cut is slope*xmult*x + c*z <= rhs + (-xlb-xoffset)^n + slope*xlb, where slope = (sign(xub+xoffset)*abs(xub+xoffset)^n + (-xlb-xoffset)^n) / (xub - xlb).

Parameters
scipSCIP data structure
rowbuffer to store row
conshdlrconstraint handler
xlblower bound of x
xubupper bound of x
exponentexponent n in sign(x)abs(x)^n
xoffsetoffset of x
xmultmultiplier for coefficient of x
zcoefcoefficient of z
rhsright hand side
xvariable x
zvariable z

Definition at line 3618 of file cons_abspower.c.

References FALSE, generateCut(), NULL, REALABS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddVarToRow(), SCIPchgRowRhs(), SCIPcreateEmptyRowCons(), SCIPgetCurrentNode(), SCIPinfinity(), SCIPisInfinity(), SCIPisLE(), SCIPisPositive(), SCIPisRelEQ(), SCIPnodeGetDepth(), SIGN, and TRUE.

Referenced by generateSecantCut(), and SCIP_DECL_CONSINITLP().

static SCIP_RETCODE generateCut ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_ROW **  row,
SCIP_Bool  onlyinbounds 
)
static

generates a cut based on Liberti and Pantelides, Convex Envelopes of Monomials of Odd Degree, J. Global Optimization 25, 157-168, 2003, and previous publications

Parameters
scipSCIP data structure
consconstraint
solsolution to separate, or NULL if LP solution should be used
rowstorage for cut
onlyinboundswhether linearization is allowed only in variable bounds

Definition at line 3667 of file cons_abspower.c.

References generateLinearizationCut(), generateLinearizationCutProject(), generateSecantCut(), NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_SIDETYPE_LEFT, SCIP_SIDETYPE_RIGHT, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconsIsGlobal(), SCIPdebug, SCIPdebugMessage, SCIPdebugPrintCons, SCIPfeastol(), SCIPgetCurrentNode(), SCIPgetRowMaxCoef(), SCIPgetRowMinCoef(), SCIPgetSolVal(), SCIPisGT(), SCIPisInfinity(), SCIPisNegative(), SCIPisPositive(), SCIPnodeGetDepth(), SCIPprintRow(), SCIPreleaseRow(), SCIProwGetRhs(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and separatePoint().

Referenced by addLinearizationCuts(), generateSecantCutNoCheck(), and separatePoint().

static SCIP_RETCODE separatePoint ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
int  nusefulconss,
SCIP_SOL sol,
SCIP_Real  minefficacy,
SCIP_Bool  inenforcement,
SCIP_Bool  onlyinbounds,
SCIP_Bool success,
SCIP_Bool cutoff,
SCIP_Real bestefficacy 
)
static

tries to separate solution or LP solution by a linear cut assumes that constraint violations have been computed

Parameters
scipSCIP data structure
conshdlrquadratic constraints handler
conssconstraints
nconssnumber of constraints
nusefulconssnumber of constraints that seem to be useful
solsolution to separate, or NULL if LP solution should be used
minefficacyminimal efficacy of a cut if it should be added to the LP
inenforcementwhether we are in constraint enforcement
onlyinboundswhether linearization is allowed only in variable bounds
successresult of separation: separated point (TRUE) or not (FALSE)
cutoffwhether a cutoff has been detected
bestefficacybuffer to store best efficacy of a cut that was added to the LP, if found; or NULL if not of interest

Definition at line 3826 of file cons_abspower.c.

References addLinearizationCuts(), FALSE, generateCut(), MAX, MIN, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPaddCut(), SCIPaddRowIndicator(), SCIPconsGetData(), SCIPconshdlrGetData(), SCIPerrorMessage, SCIPfeastol(), SCIPgetRelaxFeastolFactor(), SCIPgetRowMaxCoef(), SCIPgetRowSolFeasibility(), SCIPgetSolVal(), SCIPisCutApplicable(), SCIPisFeasPositive(), SCIPisGT(), SCIPisInfinity(), SCIPisNegative(), SCIPisPositive(), SCIPmarkRowNotRemovableLocal(), SCIPreleaseRow(), SCIProwGetLhs(), SCIProwGetRhs(), SCIProwIsLocal(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by generateCut(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().

static SCIP_RETCODE addLinearizationCuts ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
SCIP_SOL ref,
SCIP_Bool separatedlpsol,
SCIP_Real  minefficacy 
)
static

adds linearizations cuts for convex constraints w.r.t. a given reference point to cutpool and sepastore if separatedlpsol is not NULL, then a cut that separates the LP solution is added to the sepastore and is forced to enter the LP if separatedlpsol is not NULL, but cut does not separate the LP solution, then it is added to the cutpool only if separatedlpsol is NULL, then cut is added to cutpool only

Parameters
scipSCIP data structure
conshdlrquadratic constraints handler
conssconstraints
nconssnumber of constraints
refreference point where to linearize, or NULL for LP solution
separatedlpsolbuffer to store whether a cut that separates the current LP solution was found and added to LP, or NULL if adding to cutpool only
minefficacyminimal efficacy of a cut when checking for separation of LP solution

Definition at line 3972 of file cons_abspower.c.

References FALSE, generateCut(), MAX, MIN, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_EVENTEXEC(), SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPaddCut(), SCIPaddPoolCut(), SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconsIsLocal(), SCIPerrorMessage, SCIPgetRowLPFeasibility(), SCIPgetRowMaxCoef(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPreleaseRow(), SCIProwGetLhs(), SCIProwGetRhs(), SCIProwIsLocal(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and TRUE.

Referenced by SCIP_DECL_CONSSEPALP(), SCIP_DECL_EVENTEXEC(), and separatePoint().

static SCIP_DECL_EVENTEXEC ( processNewSolutionEvent  )
static
static SCIP_RETCODE proposeFeasibleSolution ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
SCIP_SOL sol 
)
static

given a solution, try to make absolute power constraints feasible by shifting the linear variable z and pass this solution to the trysol heuristic

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints to process
nconssnumber of constraints
solsolution to process

Definition at line 4143 of file cons_abspower.c.

References computeViolation(), createNlRow(), MAX, NULL, REALABS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_STAGE_INITPRESOLVE, SCIP_STAGE_SOLVED, SCIP_VARSTATUS_MULTAGGR, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPcreateLPSol(), SCIPcreateSolCopy(), SCIPdebugMessage, SCIPfeastol(), SCIPfreeSol(), SCIPgetSolTransObj(), SCIPgetSolVal(), SCIPgetStage(), SCIPheurPassSolTrySol(), SCIPisFeasGT(), SCIPisFeasLT(), SCIPisGT(), SCIPisInfinity(), SCIPsetSolVal(), SCIPunlinkSol(), SCIPvarGetLbGlobal(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), and SIGN.

Referenced by SCIP_DECL_CONSCHECK(), and SCIP_DECL_EVENTEXEC().

static SCIP_DECL_NONLINCONSUPGD ( nonlinconsUpgdAbspower  )
static

tries to upgrade a nonlinear constraint into a absolute power constraint

Definition at line 4557 of file cons_abspower.c.

References FALSE, SCIP_Interval::inf, NULL, pow(), REALABS, SCIP_CALL, SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SQUARE, SCIP_EXPR_VARIDX, SCIP_EXPRCURV_UNKNOWN, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCoefLinear(), SCIPaddVar(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsAbspower(), SCIPcreateConsLinear(), SCIPcreateConsNonlinear2(), SCIPcreateVar(), SCIPdebugAddSolVal, SCIPdebugGetSolVal, SCIPdebugMessage, SCIPexprGetMonomialCoef(), SCIPexprGetMonomialExponents(), SCIPexprGetMonomialNFactors(), SCIPexprgraphGetNodeBounds(), SCIPexprgraphGetNodeChildren(), SCIPexprgraphGetNodeCurvature(), SCIPexprgraphGetNodeDepth(), SCIPexprgraphGetNodeIntPowerExponent(), SCIPexprgraphGetNodeLinearCoefs(), SCIPexprgraphGetNodeLinearConstant(), SCIPexprgraphGetNodeNChildren(), SCIPexprgraphGetNodeOperator(), SCIPexprgraphGetNodePolynomialConstant(), SCIPexprgraphGetNodePolynomialMonomials(), SCIPexprgraphGetNodePolynomialNMonomials(), SCIPexprgraphGetNodePosition(), SCIPexprgraphGetNodeRealPowerExponent(), SCIPexprgraphGetNodeSignPowerExponent(), SCIPexprgraphGetNodeVal(), SCIPexprgraphGetNodeVar(), SCIPgetExprgraphNodeNonlinear(), SCIPgetExprgraphNonlinear(), SCIPgetLhsNonlinear(), SCIPgetLinearCoefsNonlinear(), SCIPgetLinearVarsNonlinear(), SCIPgetNLinearVarsNonlinear(), SCIPgetRhsNonlinear(), SCIPinfinity(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPisInfinity(), SCIPisIntegral(), SCIPisZero(), SCIPreleaseVar(), SCIPround(), SCIPsnprintf(), SCIP_Interval::sup, and TRUE.

Referenced by SCIP_DECL_QUADCONSUPGD().

static SCIP_DECL_EXPRGRAPHNODEREFORM ( exprgraphnodeReformAbspower  )
static

tries to reformulate a expression graph node via introducing a absolute power constraint if node fits to absolute power and has indefinte curvature and has no nonlinear parents and has siblings, then replace by auxvar and absolute power constraint if it still has nonlinear parents, then we wait to see if reformulation code move node into auxiliary constraint, so we do not add unnessary auxiliary variables for something like an x^2 in an exp(x^2) if it has no siblings, then we let the upgrading for nonlinear constraints take care of it, since it may be able to upgrade the constraint as a whole and can take the constraint sides into account too (may need only <=/>= auxcons)

Definition at line 4910 of file cons_abspower.c.

References FALSE, SCIP_Interval::inf, NULL, pow(), REALABS, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SQUARE, SCIP_EXPR_VARIDX, SCIP_EXPRCURV_UNKNOWN, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPblkmem(), SCIPcreateConsAbspower(), SCIPcreateConsNonlinear2(), SCIPcreateVar(), SCIPdebugAddSolVal, SCIPdebugGetSolVal, SCIPdebugMessage, SCIPdebugPrintCons, SCIPexprGetMonomialCoef(), SCIPexprGetMonomialExponents(), SCIPexprGetMonomialNFactors(), SCIPexprgraphAddNode(), SCIPexprgraphAddVars(), SCIPexprgraphCreateNodeLinear(), SCIPexprgraphGetNodeBounds(), SCIPexprgraphGetNodeChildren(), SCIPexprgraphGetNodeCurvature(), SCIPexprgraphGetNodeDepth(), SCIPexprgraphGetNodeIntPowerExponent(), SCIPexprgraphGetNodeLinearCoefs(), SCIPexprgraphGetNodeLinearConstant(), SCIPexprgraphGetNodeNChildren(), SCIPexprgraphGetNodeOperator(), SCIPexprgraphGetNodePolynomialConstant(), SCIPexprgraphGetNodePolynomialMonomials(), SCIPexprgraphGetNodePolynomialNMonomials(), SCIPexprgraphGetNodePosition(), SCIPexprgraphGetNodeRealPowerExponent(), SCIPexprgraphGetNodeSignPowerExponent(), SCIPexprgraphGetNodeVal(), SCIPexprgraphGetNodeVar(), SCIPexprgraphHasNodeNonlinearAncestor(), SCIPexprgraphHasNodeSibling(), SCIPexprgraphSetVarNodeValue(), SCIPfeastol(), SCIPinfinity(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPisIntegral(), SCIPisZero(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPround(), SCIPsnprintf(), SIGN, SCIP_Interval::sup, and TRUE.

Referenced by SCIP_DECL_NONLINCONSUPGD().

static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyAbspower  )
static

copy method for constraint handler plugins (called when SCIP copies plugins)

Definition at line 5173 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSFREE(), SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrAbspower(), and TRUE.

Referenced by SCIP_DECL_EXPRGRAPHNODEREFORM().

static SCIP_DECL_CONSFREE ( consFreeAbspower  )
static

destructor of constraint handler to free constraint handler data (called when SCIP is exiting)

Definition at line 5189 of file cons_abspower.c.

References NULL, SCIP_DECL_CONSINIT(), SCIP_OKAY, SCIPconshdlrGetData(), and SCIPfreeMemory.

Referenced by SCIP_DECL_CONSHDLRCOPY().

static SCIP_DECL_CONSINIT ( consInitAbspower  )
static

initialization method of constraint handler (called after problem was transformed)

Definition at line 5206 of file cons_abspower.c.

References NULL, SCIP_DECL_CONSEXIT(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPfindConshdlr(), and SCIPfindHeur().

Referenced by SCIP_DECL_CONSFREE().

static SCIP_DECL_CONSEXIT ( consExitAbspower  )
static

deinitialization method of constraint handler (called before transformed problem is freed)

Definition at line 5227 of file cons_abspower.c.

References NULL, SCIP_DECL_CONSINITPRE(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSINIT().

static SCIP_DECL_CONSINITPRE ( consInitpreAbspower  )
static

presolving initialization method of constraint handler (called when presolving is about to begin)

Definition at line 5246 of file cons_abspower.c.

References NULL, SCIP_DECL_CONSEXITPRE(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSEXIT().

static SCIP_DECL_CONSEXITPRE ( consExitpreAbspower  )
static

presolving deinitialization method of constraint handler (called after presolving has been finished)

Definition at line 5263 of file cons_abspower.c.

References NULL, SCIP_DECL_CONSINITSOL(), SCIP_OKAY, SCIPconsIsAdded(), and SCIPenableNLP().

Referenced by SCIP_DECL_CONSINITPRE().

static SCIP_DECL_CONSINITSOL ( consInitsolAbspower  )
static
static SCIP_DECL_CONSEXITSOL ( consExitsolAbspower  )
static

solving process deinitialization method of constraint handler (called before branch and bound process data is freed)

Definition at line 5395 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSDELETE(), SCIP_EVENTTYPE_SOLFOUND, SCIP_OKAY, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdropEvent(), SCIPfindEventhdlr(), and SCIPreleaseNlRow().

Referenced by SCIP_DECL_CONSINITSOL().

static SCIP_DECL_CONSDELETE ( consDeleteAbspower  )
static

frees specific constraint data

Definition at line 5437 of file cons_abspower.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSTRANS(), SCIP_OKAY, SCIPfreeMemory, and SCIPreleaseNlRow().

Referenced by SCIP_DECL_CONSEXITSOL().

static SCIP_DECL_CONSINITLP ( consInitlpAbspower  )
static
static SCIP_DECL_CONSSEPASOL ( consSepasolAbspower  )
static

separation method of constraint handler for arbitrary primal solutions

Definition at line 5816 of file cons_abspower.c.

References computeViolations(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSENFOLP(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SEPARATED, SCIPconshdlrGetData(), and separatePoint().

Referenced by SCIP_DECL_CONSSEPALP().

static SCIP_DECL_CONSPROP ( consPropAbspower  )
static

domain propagation method of constraint handler

Definition at line 6109 of file cons_abspower.c.

References FALSE, NULL, propagateCons(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSPRESOL(), SCIP_DIDNOTFIND, SCIP_OKAY, and SCIP_REDUCEDDOM.

Referenced by SCIP_DECL_CONSENFOPS().

static SCIP_DECL_CONSRESPROP ( consRespropAbspower  )
static

resolves a propagation on the given variable by supplying the variables needed for applying the corresponding propagation rule (see propagateCons()): (1) left hand side and bounds on z -> lower bound on x (2) left hand side and upper bound on x -> bound on z (3) right hand side and bounds on z -> upper bound on x (4) right hand side and lower bound on x -> bound on z

Definition at line 6435 of file cons_abspower.c.

References NULL, resolvePropagation(), SCIP_CALL, SCIP_DECL_CONSLOCK(), SCIP_OKAY, and SCIP_SUCCESS.

Referenced by SCIP_DECL_CONSPRESOL().

static SCIP_DECL_CONSLOCK ( consLockAbspower  )
static

variable rounding lock method of constraint handler

Definition at line 6448 of file cons_abspower.c.

References NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSACTIVE(), SCIP_OKAY, SCIPaddVarLocks(), SCIPconsGetData(), and SCIPisInfinity().

Referenced by SCIP_DECL_CONSRESPROP().

static SCIP_DECL_CONSACTIVE ( consActiveAbspower  )
static

constraint activation notification method of constraint handler

Definition at line 6506 of file cons_abspower.c.

References FALSE, NULL, SCIP_DECL_CONSENABLE(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSLOCK().

static SCIP_DECL_CONSENABLE ( consEnableAbspower  )
static

constraint enabling notification method of constraint handler

Definition at line 6523 of file cons_abspower.c.

References catchVarEvents(), NULL, SCIP_CALL, SCIP_DECL_CONSDISABLE(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSACTIVE().

static SCIP_DECL_CONSDISABLE ( consDisableAbspower  )
static

constraint disabling notification method of constraint handler

Definition at line 6542 of file cons_abspower.c.

References dropVarEvents(), NULL, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSENABLE().

static SCIP_DECL_CONSPRINT ( consPrintAbspower  )
static

constraint display method of constraint handler

Definition at line 6561 of file cons_abspower.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSCHECK(), SCIP_OKAY, SCIPconsGetData(), SCIPinfoMessage(), SCIPisEQ(), SCIPisInfinity(), SCIPwriteVarName(), and TRUE.

Referenced by SCIP_DECL_CONSDISABLE().

static SCIP_DECL_CONSCOPY ( consCopyAbspower  )
static

constraint copying method of constraint handler

Definition at line 6672 of file cons_abspower.c.

References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSPARSE(), SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPcreateConsAbspower(), SCIPgetVarCopy(), and TRUE.

Referenced by SCIP_DECL_CONSCHECK().

static SCIP_DECL_CONSPARSE ( consParseAbspower  )
static
static SCIP_DECL_CONSGETVARS ( consGetVarsAbspower  )
static

constraint method of constraint handler which returns the variables (if possible)

Definition at line 6873 of file cons_abspower.c.

References FALSE, NULL, SCIP_DECL_CONSGETNVARS(), SCIP_OKAY, SCIPconsGetData(), and TRUE.

Referenced by SCIP_DECL_CONSPARSE().

static SCIP_DECL_CONSGETNVARS ( consGetNVarsAbspower  )
static

constraint method of constraint handler which returns the number of variables (if possible)

Definition at line 6897 of file cons_abspower.c.

References SCIP_OKAY, SCIPincludeConshdlrAbspower(), and TRUE.

Referenced by SCIP_DECL_CONSGETVARS().

SCIP_RETCODE SCIPincludeConshdlrAbspower ( SCIP scip)
SCIP_RETCODE SCIPcreateConsAbspower ( SCIP scip,
SCIP_CONS **  cons,
const char *  name,
SCIP_VAR x,
SCIP_VAR z,
SCIP_Real  exponent,
SCIP_Real  xoffset,
SCIP_Real  zcoef,
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  stickingatnode 
)

creates and captures a absolute power constraint

Note
the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
Parameters
scipSCIP data structure
conspointer to hold the created constraint
namename of constraint
xnonlinear variable x in constraint
zlinear variable z in constraint
exponentexponent n of |x+offset|^n term in constraint
xoffsetoffset in |x+offset|^n term in constraint
zcoefcoefficient of z in constraint
lhsleft hand side of constraint
rhsright hand side of constraint
initialshould the LP relaxation of constraint be in the initial LP? Usually set to TRUE. Set to FALSE for 'lazy constraints'.
separateshould the constraint be separated during LP processing? Usually set to TRUE.
enforceshould the constraint be enforced during node processing? TRUE for model constraints, FALSE for additional, redundant constraints.
checkshould the constraint be checked for feasibility? TRUE for model constraints, FALSE for additional, redundant constraints.
propagateshould the constraint be propagated during node processing? Usually set to TRUE.
localis constraint only valid locally? Usually set to FALSE. Has to be set to TRUE, e.g., for branching constraints.
modifiableis constraint modifiable (subject to column generation)? Usually set to FALSE. In column generation applications, set to TRUE if pricing adds coefficients to this constraint.
dynamicis constraint subject to aging? Usually set to FALSE. Set to TRUE for own cuts which are seperated as constraints.
removableshould the relaxation be removed from the LP due to aging or cleanup? Usually set to FALSE. Set to TRUE for 'lazy constraints' and 'user cuts'.
stickingatnodeshould the constraint always be kept at the node where it was added, even if it may be moved to a more global node? Usually set to FALSE. Set to TRUE to for constraints that represent node data.

Definition at line 7032 of file cons_abspower.c.

References BMSclearMemory, CONSHDLR_NAME, NULL, pow(), REALABS, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPallocMemory, SCIPcreateCons(), SCIPcreateConsBasicAbspower(), SCIPerrorMessage, SCIPfindConshdlr(), SCIPisEQ(), SCIPisInfinity(), SCIPisZero(), SCIPmarkDoNotMultaggrVar(), SCIPvarIsActive(), and square().

Referenced by presolveFindDuplicates(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSPARSE(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), SCIP_DECL_QUADCONSUPGD(), SCIPcreateConsBasicAbspower(), and SCIPincludeConshdlrAbspower().

SCIP_RETCODE SCIPcreateConsBasicAbspower ( SCIP scip,
SCIP_CONS **  cons,
const char *  name,
SCIP_VAR x,
SCIP_VAR z,
SCIP_Real  exponent,
SCIP_Real  xoffset,
SCIP_Real  zcoef,
SCIP_Real  lhs,
SCIP_Real  rhs 
)

creates and captures an absolute power constraint in its most basic version, i. e., all constraint flags are set to their basic value as explained for the method SCIPcreateConsAbspower(); all flags can be set via SCIPsetConsFLAGNAME-methods in scip.h

See also
SCIPcreateConsAbspower() for information about the basic constraint flag configuration
Note
the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
Parameters
scipSCIP data structure
conspointer to hold the created constraint
namename of constraint
xnonlinear variable x in constraint
zlinear variable z in constraint
exponentexponent n of |x+offset|^n term in constraint
xoffsetoffset in |x+offset|^n term in constraint
zcoefcoefficient of z in constraint
lhsleft hand side of constraint
rhsright hand side of constraint

Definition at line 7133 of file cons_abspower.c.

References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPcreateConsAbspower(), SCIPgetNlRowAbspower(), and TRUE.

Referenced by SCIPcreateConsAbspower().

SCIP_RETCODE SCIPgetNlRowAbspower ( SCIP scip,
SCIP_CONS cons,
SCIP_NLROW **  nlrow 
)

gets the absolute power constraint as a nonlinear row representation

Parameters
scipSCIP data structure
consconstraint
nlrowa buffer where to store pointer to nonlinear row

Definition at line 7155 of file cons_abspower.c.

References CONSHDLR_NAME, createNlRow(), NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetNonlinearVarAbspower().

Referenced by SCIPcreateConsBasicAbspower().

SCIP_VAR* SCIPgetNonlinearVarAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets nonlinear variable x in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7181 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetLinearVarAbspower().

Referenced by SCIPgetNlRowAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_VAR* SCIPgetLinearVarAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets linear variable z in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7198 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetExponentAbspower().

Referenced by SCIPgetNonlinearVarAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetExponentAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets exponent in power term in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7215 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetOffsetAbspower().

Referenced by SCIPgetLinearVarAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetOffsetAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets offset in power term in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7232 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetCoefLinearAbspower().

Referenced by SCIPgetExponentAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetCoefLinearAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets coefficient of linear variable in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7249 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetLhsAbspower().

Referenced by SCIPgetOffsetAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetLhsAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets left hand side in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7266 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetRhsAbspower().

Referenced by SCIPgetCoefLinearAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetRhsAbspower ( SCIP scip,
SCIP_CONS cons 
)

gets right hand side in absolute power constraint

Parameters
scipSCIP data structure
consabsolute power constraint

Definition at line 7283 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and SCIPgetViolationAbspower().

Referenced by SCIPgetLhsAbspower(), SCIPwriteGms(), and SCIPwritePip().

SCIP_Real SCIPgetViolationAbspower ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol 
)

gets the absolute violation of a absolute power constraint by a solution

Parameters
scipSCIP data structure
consabsolute power constraint
solLP solution

Definition at line 7300 of file cons_abspower.c.

References CONSHDLR_NAME, NULL, pow(), REALABS, SCIP_Real, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), SCIPdebugMessage, SCIPgetSolVal(), and SIGN.

Referenced by SCIPgetRhsAbspower().

Variable Documentation

SCIP_Real roots[ROOTS_KNOWN+1]
static
Initial value:
= {
-1.0,
-1.0,
0.41421356237309504880,
0.5,
0.56042566045031785945,
0.60582958618826802099,
0.64146546982884663257,
0.67033204760309682774,
0.69428385661425826738,
0.71453772716733489700,
0.73192937842370733350
}

The positive root of the polynomial (n-1) y^n + n y^(n-1) - 1 is needed in separation. Here we store these roots for small integer values of n.

Definition at line 88 of file cons_abspower.c.

Referenced by SCIP_DECL_CONSINITSOL().