Scippy

SCIP

Solving Constraint Integer Programs

cons_soc.c File Reference

Detailed Description

constraint handler for second order cone constraints \(\sqrt{\gamma + \sum_{i=1}^{n} (\alpha_i\, (x_i + \beta_i))^2} \leq \alpha_{n+1}\, (x_{n+1}+\beta_{n+1})\)

Author
Stefan Vigerske
Marc Pfetsch
Felipe Serrano
Benjamin Mueller

Definition in file cons_soc.c.

#include "blockmemshell/memory.h"
#include <ctype.h>
#include "nlpi/exprinterpret.h"
#include "nlpi/nlpi.h"
#include "nlpi/nlpi_ipopt.h"
#include "nlpi/pub_expr.h"
#include "nlpi/type_expr.h"
#include "scip/cons_linear.h"
#include "scip/cons_quadratic.h"
#include "scip/cons_soc.h"
#include "scip/heur_subnlp.h"
#include "scip/heur_trysol.h"
#include "scip/intervalarith.h"
#include "scip/pub_cons.h"
#include "scip/pub_event.h"
#include "scip/pub_heur.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_misc_sort.h"
#include "scip/pub_nlp.h"
#include "scip/pub_sol.h"
#include "scip/pub_tree.h"
#include "scip/pub_var.h"
#include "scip/scip_branch.h"
#include "scip/scip_cons.h"
#include "scip/scip_copy.h"
#include "scip/scip_cut.h"
#include "scip/scip_event.h"
#include "scip/scip_general.h"
#include "scip/scip_heur.h"
#include "scip/scip_lp.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_nlp.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_prob.h"
#include "scip/scip_sepa.h"
#include "scip/scip_sol.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_tree.h"
#include "scip/scip_var.h"
#include <string.h>

Go to the source code of this file.

Data Structures

struct  VarEventData
 

Macros

#define SCIP_PRIVATE_ROWPREP
 
#define CONSHDLR_NAME   "soc"
 
#define CONSHDLR_DESC   "constraint handler for second order cone constraints"
 
#define CONSHDLR_SEPAPRIORITY   10
 
#define CONSHDLR_ENFOPRIORITY   -40
 
#define CONSHDLR_CHECKPRIORITY   -10
 
#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_PROP_TIMING   SCIP_PROPTIMING_BEFORELP
 
#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_ALWAYS
 
#define QUADCONSUPGD_PRIORITY   10000
 
#define UPGSCALE   10 /* scale factor used in general upgrades of quadratic cons to soc */
 

Typedefs

typedef struct VarEventData VAREVENTDATA
 

Functions

static SCIP_RETCODE catchLhsVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons, int varidx)
 
static SCIP_RETCODE catchRhsVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_RETCODE catchVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_RETCODE dropLhsVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons, int varidx)
 
static SCIP_RETCODE dropRhsVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_RETCODE dropVarEvents (SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
 
static SCIP_DECL_EVENTEXEC (processVarEvent)
 
static SCIP_RETCODE createNlRow (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
 
static SCIP_RETCODE evalLhs (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
 
static SCIP_RETCODE computeViolation (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_SOL *sol)
 
static SCIP_RETCODE computeViolations (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_CONS **maxviolcons)
 
static SCIP_RETCODE generateCutSol (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_ROWPREP **rowprep)
 
static SCIP_RETCODE generateCutPoint (SCIP *scip, SCIP_CONS *cons, SCIP_Real *x, SCIP_ROWPREP **rowprep)
 
static SCIP_RETCODE generateCutProjectedPoint (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_ROWPREP **rowprep)
 
static SCIP_RETCODE generateSparseCut (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_ROWPREP **rowprep, SCIP_Real minefficacy)
 
static SCIP_RETCODE separatePoint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_Bool inenforcement, SCIP_Bool *cutoff, SCIP_Bool *success)
 
static SCIP_RETCODE addLinearizationCuts (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *ref, SCIP_Bool *separatedlpsol, SCIP_Real minefficacy, SCIP_Bool *cutoff)
 
static SCIP_DECL_EVENTEXEC (processNewSolutionEvent)
 
static SCIP_RETCODE presolveRemoveFixedVariables (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, int *ndelconss, int *nupgdconss, int *nchgbds, int *nfixedvars, SCIP_Bool *iscutoff, SCIP_Bool *isdeleted)
 
static SCIP_RETCODE presolveCreateGlineurApproxDim3 (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *x1, SCIP_VAR *x2, SCIP_VAR *x3, SCIP_Real alpha1, SCIP_Real alpha2, SCIP_Real alpha3, SCIP_Real offset1, SCIP_Real offset2, SCIP_Real offset3, int N, const char *basename, int *naddconss)
 
static SCIP_RETCODE presolveCreateBenTalNemirovskiApproxDim3 (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *x1, SCIP_VAR *x2, SCIP_VAR *x3, SCIP_Real alpha1, SCIP_Real alpha2, SCIP_Real alpha3, SCIP_Real offset1, SCIP_Real offset2, SCIP_Real offset3, int N, const char *basename, int *naddconss)
 
static SCIP_RETCODE presolveCreateOuterApproxDim3 (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *x1, SCIP_VAR *x2, SCIP_VAR *x3, SCIP_Real alpha1, SCIP_Real alpha2, SCIP_Real alpha3, SCIP_Real offset1, SCIP_Real offset2, SCIP_Real offset3, int N, SCIP_Bool glineur, const char *basename, int *naddconss)
 
static SCIP_RETCODE presolveCreateOuterApprox (SCIP *scip, int nlhsvars, SCIP_VAR **lhsvars, SCIP_Real *lhscoefs, SCIP_Real *lhsoffsets, SCIP_VAR *rhsvar, SCIP_Real rhscoeff, SCIP_Real rhsoffset, SCIP_Real constant, const char *basename, SCIP_CONS *origcons, int soc3_nr_auxvars, SCIP_Bool glineur, int *naddconss)
 
static SCIP_RETCODE propagateBounds (SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result, int *nchgbds, SCIP_Bool *redundant)
 
static SCIP_RETCODE polishSolution (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *success)
 
static SCIP_RETCODE disaggregate (SCIP *scip, SCIP_CONS *cons, SCIP_CONSDATA *consdata, int *naddconss, int *ndelconss, SCIP_Bool *success)
 
static SCIP_RETCODE enforceConstraint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result)
 
static SCIP_DECL_QUADCONSUPGD (upgradeConsQuadratic)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopySOC)
 
static SCIP_DECL_CONSFREE (consFreeSOC)
 
static SCIP_DECL_CONSINIT (consInitSOC)
 
static SCIP_DECL_CONSEXIT (consExitSOC)
 
static SCIP_DECL_CONSEXITPRE (consExitpreSOC)
 
static SCIP_DECL_CONSINITSOL (consInitsolSOC)
 
static SCIP_DECL_CONSEXITSOL (consExitsolSOC)
 
static SCIP_DECL_CONSDELETE (consDeleteSOC)
 
static SCIP_DECL_CONSTRANS (consTransSOC)
 
static SCIP_DECL_CONSSEPALP (consSepalpSOC)
 
static SCIP_DECL_CONSSEPASOL (consSepasolSOC)
 
static SCIP_DECL_CONSENFOLP (consEnfolpSOC)
 
static SCIP_DECL_CONSENFORELAX (consEnforelaxSOC)
 
static SCIP_DECL_CONSENFOPS (consEnfopsSOC)
 
static SCIP_DECL_CONSCHECK (consCheckSOC)
 
static SCIP_DECL_CONSPROP (consPropSOC)
 
static SCIP_DECL_CONSPRESOL (consPresolSOC)
 
static SCIP_DECL_CONSLOCK (consLockSOC)
 
static SCIP_DECL_CONSPRINT (consPrintSOC)
 
static SCIP_DECL_CONSCOPY (consCopySOC)
 
static SCIP_DECL_CONSPARSE (consParseSOC)
 
static SCIP_DECL_CONSGETVARS (consGetVarsSOC)
 
static SCIP_DECL_CONSGETNVARS (consGetNVarsSOC)
 
SCIP_RETCODE SCIPincludeConshdlrSOC (SCIP *scip)
 
SCIP_RETCODE SCIPcreateConsSOC (SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *coefs, SCIP_Real *offsets, SCIP_Real constant, SCIP_VAR *rhsvar, SCIP_Real rhscoeff, SCIP_Real rhsoffset, 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_RETCODE SCIPcreateConsBasicSOC (SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *coefs, SCIP_Real *offsets, SCIP_Real constant, SCIP_VAR *rhsvar, SCIP_Real rhscoeff, SCIP_Real rhsoffset)
 
SCIP_RETCODE SCIPgetNlRowSOC (SCIP *scip, SCIP_CONS *cons, SCIP_NLROW **nlrow)
 
int SCIPgetNLhsVarsSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_VAR ** SCIPgetLhsVarsSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_RealSCIPgetLhsCoefsSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_RealSCIPgetLhsOffsetsSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetLhsConstantSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_VARSCIPgetRhsVarSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetRhsCoefSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_Real SCIPgetRhsOffsetSOC (SCIP *scip, SCIP_CONS *cons)
 
SCIP_RETCODE SCIPaddToNlpiProblemSOC (SCIP *scip, SCIP_CONS *cons, SCIP_NLPI *nlpi, SCIP_NLPIPROBLEM *nlpiprob, SCIP_HASHMAP *scipvar2nlpivar, SCIP_Bool names)
 

Macro Definition Documentation

◆ SCIP_PRIVATE_ROWPREP

#define SCIP_PRIVATE_ROWPREP

Definition at line 30 of file cons_soc.c.

◆ CONSHDLR_NAME

◆ CONSHDLR_DESC

#define CONSHDLR_DESC   "constraint handler for second order cone constraints"

Definition at line 78 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_SEPAPRIORITY

#define CONSHDLR_SEPAPRIORITY   10

priority of the constraint handler for separation

Definition at line 79 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_ENFOPRIORITY

#define CONSHDLR_ENFOPRIORITY   -40

priority of the constraint handler for constraint enforcing

Definition at line 80 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_CHECKPRIORITY

#define CONSHDLR_CHECKPRIORITY   -10

priority of the constraint handler for checking feasibility

Definition at line 81 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_SEPAFREQ

#define CONSHDLR_SEPAFREQ   1

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

Definition at line 82 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_PROPFREQ

#define CONSHDLR_PROPFREQ   1

frequency for propagating domains; zero means only preprocessing propagation

Definition at line 83 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_EAGERFREQ

#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 84 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_MAXPREROUNDS

#define CONSHDLR_MAXPREROUNDS   -1

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

Definition at line 87 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_DELAYSEPA

#define CONSHDLR_DELAYSEPA   FALSE

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

Definition at line 88 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_DELAYPROP

#define CONSHDLR_DELAYPROP   FALSE

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

Definition at line 89 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_NEEDSCONS

#define CONSHDLR_NEEDSCONS   TRUE

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

Definition at line 90 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_PROP_TIMING

#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

propagation timing mask of the constraint handler

Definition at line 92 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ CONSHDLR_PRESOLTIMING

#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_ALWAYS

presolving timing of the constraint handler (fast, medium, or exhaustive)

Definition at line 93 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ QUADCONSUPGD_PRIORITY

#define QUADCONSUPGD_PRIORITY   10000

priority of the constraint handler for upgrading of quadratic constraints

Definition at line 95 of file cons_soc.c.

Referenced by SCIPincludeConshdlrSOC().

◆ UPGSCALE

#define UPGSCALE   10 /* scale factor used in general upgrades of quadratic cons to soc */

Definition at line 97 of file cons_soc.c.

Referenced by SCIP_DECL_QUADCONSUPGD().

Typedef Documentation

◆ VAREVENTDATA

typedef struct VarEventData VAREVENTDATA

Definition at line 110 of file cons_soc.c.

Function Documentation

◆ catchLhsVarEvents()

static SCIP_RETCODE catchLhsVarEvents ( SCIP scip,
SCIP_EVENTHDLR eventhdlr,
SCIP_CONS cons,
int  varidx 
)
static

catch left hand side variable events

Parameters
scipSCIP data structure
eventhdlrevent handler
consconstraint for which to catch bound change events
varidxindex of the variable which events to catch

Definition at line 169 of file cons_soc.c.

References catchRhsVarEvents(), VarEventData::cons, NULL, SCIP_CALL, SCIP_EVENTTYPE_BOUNDTIGHTENED, SCIP_OKAY, SCIPcatchVarEvent(), SCIPconsGetData(), SCIPmarkConsPropagate(), and VarEventData::varidx.

Referenced by catchVarEvents(), and presolveRemoveFixedVariables().

◆ catchRhsVarEvents()

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

catch right hand side variable events

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

Definition at line 201 of file cons_soc.c.

References catchVarEvents(), VarEventData::cons, NULL, SCIP_CALL, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, SCIPcatchVarEvent(), SCIPconsGetData(), and SCIPmarkConsPropagate().

Referenced by catchLhsVarEvents(), catchVarEvents(), and presolveRemoveFixedVariables().

◆ catchVarEvents()

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

catch variables events

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

Definition at line 229 of file cons_soc.c.

References catchLhsVarEvents(), catchRhsVarEvents(), dropLhsVarEvents(), NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemoryArray, and SCIPconsGetData().

Referenced by catchRhsVarEvents(), presolveRemoveFixedVariables(), SCIP_DECL_CONSTRANS(), and SCIPcreateConsSOC().

◆ dropLhsVarEvents()

static SCIP_RETCODE dropLhsVarEvents ( SCIP scip,
SCIP_EVENTHDLR eventhdlr,
SCIP_CONS cons,
int  varidx 
)
static

drop left hand side variable events

Parameters
scipSCIP data structure
eventhdlrevent handler
consconstraint for which to catch bound change events
varidxindex of the variable which events to catch

Definition at line 266 of file cons_soc.c.

References dropRhsVarEvents(), NULL, SCIP_CALL, SCIP_EVENTTYPE_BOUNDTIGHTENED, SCIP_OKAY, SCIPconsGetData(), SCIPdropVarEvent(), and VarEventData::varidx.

Referenced by catchVarEvents(), dropVarEvents(), and presolveRemoveFixedVariables().

◆ dropRhsVarEvents()

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

drop right hand side variable events

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

Definition at line 294 of file cons_soc.c.

References dropVarEvents(), NULL, SCIP_CALL, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, SCIPconsGetData(), and SCIPdropVarEvent().

Referenced by dropLhsVarEvents(), dropVarEvents(), and presolveRemoveFixedVariables().

◆ dropVarEvents()

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

drop variable events

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

Definition at line 318 of file cons_soc.c.

References dropLhsVarEvents(), dropRhsVarEvents(), NULL, SCIP_CALL, SCIP_DECL_EVENTEXEC(), SCIP_OKAY, SCIPconsGetData(), and SCIPfreeBlockMemoryArray.

Referenced by dropRhsVarEvents(), presolveRemoveFixedVariables(), and SCIP_DECL_CONSDELETE().

◆ SCIP_DECL_EVENTEXEC() [1/2]

static SCIP_DECL_EVENTEXEC ( processVarEvent  )
static

process variable bound tightening event

Definition at line 354 of file cons_soc.c.

References VarEventData::cons, createNlRow(), NULL, SCIP_CALL, SCIP_OKAY, and SCIPmarkConsPropagate().

Referenced by addLinearizationCuts(), and dropVarEvents().

◆ createNlRow()

◆ evalLhs()

static SCIP_RETCODE evalLhs ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol 
)
static

evaluates the left hand side of a SOC constraint

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

Definition at line 714 of file cons_soc.c.

References computeViolation(), NULL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPgetSolVal(), SCIPinfinity(), SCIPisInfinity(), and sqrt().

Referenced by addLinearizationCuts(), computeViolation(), and createNlRow().

◆ computeViolation()

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

computes violation of a SOC constraint

Parameters
scipSCIP data structure
conshdlrconstraint handler
consconstraint to evaluate
solsolution to evaluate, or NULL if LP solution should be used

Definition at line 754 of file cons_soc.c.

References computeViolations(), evalLhs(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPgetSolVal(), SCIPinfinity(), SCIPisInfinity(), SCIPrelDiff(), and SCIPupdateSolConsViolation().

Referenced by computeViolations(), evalLhs(), and SCIP_DECL_CONSCHECK().

◆ computeViolations()

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

computes violations for a set of constraints

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints to evaluate
nconssnumber of constraints to evaluate
solsolution to evaluate, or NULL if LP solution should be used
maxviolconsa buffer to store pointer to maximal violated constraint, or NULL if of no interest

Definition at line 820 of file cons_soc.c.

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

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

◆ generateCutSol()

static SCIP_RETCODE generateCutSol ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_ROWPREP **  rowprep 
)
static

◆ generateCutPoint()

static SCIP_RETCODE generateCutPoint ( SCIP scip,
SCIP_CONS cons,
SCIP_Real x,
SCIP_ROWPREP **  rowprep 
)
static

generate supporting hyperplane in a given point

Parameters
scipSCIP pointer
consconstraint
xpoint (lhs-vars) where to generate cut
rowprepplace to store cut

Definition at line 904 of file cons_soc.c.

References ABS, generateCutProjectedPoint(), NULL, SCIP_RowPrep::nvars, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_SIDETYPE_RIGHT, SCIPaddRowprepSide(), SCIPaddRowprepTerm(), SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsLocal(), SCIPcreateRowprep(), SCIPensureRowprepSize(), SCIPgetNLPs(), SCIPisInfinity(), SCIPisZero(), SCIPsnprintf(), sqrt(), SCIP_RowPrep::vars, and x.

Referenced by generateCutSol(), and generateSparseCut().

◆ generateCutProjectedPoint()

static SCIP_RETCODE generateCutProjectedPoint ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_ROWPREP **  rowprep 
)
static

generate supporting hyperplane w.r.t. solution projected on feasible set

Instead of linearizing the SOC constraint in the given solution point, this function projects the point first onto the feasible set of the SOC constraint (w.r.t. euclidean norm (scaled by alpha)) and linearizes the SOC constraint there. The hope is that this produces somewhat tighter cuts.

The projection has only be computed for the case gamma = 0. If gamma > 0, generateCut is called.

Let \(\hat x\) be sol or the LP solution if sol == NULL. Then the projected point \(\tilde x\) is given by

\[ \tilde x_i = \frac{\hat x_i + \lambda \beta_i}{1-\lambda}, \quad i=1,\ldots, n; \quad \tilde x_{n+1} = \frac{\hat x_{n+1} - \lambda \beta_{n+1}}{1+\lambda} \]

where

\[ \lambda = \frac{1-A}{1+A}, \qquad A = \frac{\alpha_{n+1}(\hat x_{n+1}+\beta_{n+1})}{\sqrt{\sum_{i=1}^n (\alpha_i(\hat x_i+\beta_i))^2}} \]

If lambda is very close to 1, generateCut is called.

The generated cut is very similar to the unprojected form. The only difference is in the right hand side, which is (in the case beta = 0) multiplied by 1/(1-lambda).

Parameters
scipSCIP pointer
consconstraint
solsolution to separate, or NULL for LP solution
rowprepplace to store cut

Definition at line 991 of file cons_soc.c.

References generateCutSol(), generateSparseCut(), NULL, SCIP_RowPrep::nvars, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_SIDETYPE_RIGHT, SCIPaddRowprepSide(), SCIPaddRowprepTerm(), SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsLocal(), SCIPcreateRowprep(), SCIPdebugMsg, SCIPensureRowprepSize(), SCIPgetNLPs(), SCIPgetSolVal(), SCIPisFeasEQ(), SCIPisInfinity(), SCIPisNegative(), SCIPisPositive(), SCIPisZero(), SCIPsnprintf(), and SCIP_RowPrep::vars.

Referenced by generateCutPoint(), and separatePoint().

◆ generateSparseCut()

static SCIP_RETCODE generateSparseCut ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_ROWPREP **  rowprep,
SCIP_Real  minefficacy 
)
static

generates sparsified supporting hyperplane

Parameters
scipSCIP pointer
conshdlrconstraint handler
consconstraint
solsolution to separate, or NULL for LP solution
rowprepplace to store cut
minefficacyminimal efficacy for a cut to be accepted

Definition at line 1060 of file cons_soc.c.

References ABS, generateCutPoint(), generateCutSol(), MAX, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeRowprep(), SCIPgetRowprepViolation(), SCIPgetSolVal(), SCIPgetSolVals(), SCIPisGT(), SCIPisInfinity(), SCIPisPositive(), SCIPsortRealInt(), separatePoint(), TRUE, and x.

Referenced by generateCutProjectedPoint(), and separatePoint().

◆ separatePoint()

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

separates a point, if possible

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints
nconssnumber of constraints
nusefulconssnumber of constraints that seem to be useful
solsolution to separate, or NULL for LP solution
inenforcementwhether we are in constraint enforcement
cutoffpointer to store whether a fixing leads to a cutoff
successbuffer to store whether the point was separated

Definition at line 1170 of file cons_soc.c.

References addLinearizationCuts(), FALSE, generateCutProjectedPoint(), generateCutSol(), generateSparseCut(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddRow(), SCIPcleanupRowprep(), SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdebugMsg, SCIPfeastol(), SCIPfreeRowprep(), SCIPgetCutEfficacy(), SCIPgetRowprepRowCons(), SCIPgetSepaMinEfficacy(), SCIPinfinity(), SCIPisCutApplicable(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPlpfeastol(), SCIPmarkRowNotRemovableLocal(), SCIPreleaseRow(), SCIPresetConsAge(), and TRUE.

Referenced by enforceConstraint(), generateSparseCut(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().

◆ addLinearizationCuts()

static SCIP_RETCODE addLinearizationCuts ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
SCIP_SOL ref,
SCIP_Bool separatedlpsol,
SCIP_Real  minefficacy,
SCIP_Bool cutoff 
)
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
cutoffpointer to store whether a cutoff was detected

Definition at line 1285 of file cons_soc.c.

References evalLhs(), FALSE, generateCutSol(), SCIP_RowPrep::local, NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_EVENTEXEC(), SCIP_OKAY, SCIPaddPoolCut(), SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsLocal(), SCIPdebugMsg, SCIPfreeRowprep(), SCIPgetRowprepRowCons(), SCIPgetRowprepViolation(), SCIPisInfinity(), SCIPisPositive(), SCIPreleaseRow(), and TRUE.

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

◆ SCIP_DECL_EVENTEXEC() [2/2]

static SCIP_DECL_EVENTEXEC ( processNewSolutionEvent  )
static

◆ presolveRemoveFixedVariables()

static SCIP_RETCODE presolveRemoveFixedVariables ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
int *  ndelconss,
int *  nupgdconss,
int *  nchgbds,
int *  nfixedvars,
SCIP_Bool iscutoff,
SCIP_Bool isdeleted 
)
static

removes fixed variables, replace aggregated and negated variables

repeats replacements until no further change is found; takes care of capture/release and locks, but not of variable events (assumes that var events are not caught yet)

Parameters
scipSCIP data structure
conshdlrconstraint handler for signpower constraints
consconstraint
ndelconsscounter for number of deleted constraints
nupgdconsscounter for number of upgraded constraints
nchgbdscounter for number of bound changes
nfixedvarscounter for number of fixed variables
iscutoffto store whether constraint cannot be satisfied
isdeletedto store whether constraint is redundant and can be deleted

Definition at line 1421 of file cons_soc.c.

References ABS, BMSclearMemoryArray, catchLhsVarEvents(), catchRhsVarEvents(), catchVarEvents(), dropLhsVarEvents(), dropRhsVarEvents(), dropVarEvents(), FALSE, SCIP_QuadVarTerm::lincoef, NULL, presolveCreateGlineurApproxDim3(), REALABS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIP_VARSTATUS_ORIGINAL, SCIPaddCons(), SCIPallocBufferArray, SCIPcaptureVar(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsLinear(), SCIPcreateConsQuadratic2(), SCIPdebugMsg, SCIPdebugPrintCons, SCIPdelCons(), SCIPfixVar(), SCIPfreeBufferArray, SCIPgetProbvarSum(), SCIPinfinity(), SCIPisFeasLE(), SCIPisNegative(), SCIPisZero(), SCIPlockVarCons(), SCIPreallocBlockMemoryArray, SCIPreleaseCons(), SCIPreleaseNlRow(), SCIPreleaseVar(), SCIPtightenVarLb(), SCIPtightenVarUb(), SCIPunlockVarCons(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarIsActive(), SCIP_QuadVarTerm::sqrcoef, sqrt(), TRUE, SCIP_QuadVarTerm::var, and x.

Referenced by SCIP_DECL_CONSPRESOL(), and SCIP_DECL_EVENTEXEC().

◆ presolveCreateGlineurApproxDim3()

static SCIP_RETCODE presolveCreateGlineurApproxDim3 ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR x1,
SCIP_VAR x2,
SCIP_VAR x3,
SCIP_Real  alpha1,
SCIP_Real  alpha2,
SCIP_Real  alpha3,
SCIP_Real  offset1,
SCIP_Real  offset2,
SCIP_Real  offset3,
int  N,
const char *  basename,
int *  naddconss 
)
static

adds the linear outer-approximation of Glineur et.al. for a SOC constraint of dimension 3

Input is the data for a constraint \(\sqrt{(\alpha_1(x_1+offset1))^2 + (\alpha_2(x_2+offset2))^2)} \leq \alpha_3(x_3+offset3)\). Here \(\alpha3 > 0\), and the lower bound of \(x_3 \geq -offset3\). Also x2 = NULL is allowed, in which case the second term is assumed to be constant, and \(offset2 \neq 0\) is needed.

Parameters
scipSCIP data structure
consoriginal constraint
x1variable x1
x2variable x2
x3variable x3
alpha1coefficient of x1
alpha2coefficient of x2
alpha3coefficient of x3
offset1offset of x1
offset2offset of x2
offset3offset of x3
Nsize of linear approximation, need to be >= 1
basenamestring to use for building variable and constraint names
naddconssbuffer where to add the number of added constraints

Definition at line 1858 of file cons_soc.c.

References ABS, cos(), FALSE, M_PI, NULL, presolveCreateBenTalNemirovskiApproxDim3(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPallocBufferArray, SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsLinear(), SCIPcreateVar(), SCIPdebugMsg, SCIPdebugPrintCons, SCIPfreeBufferArray, SCIPinfinity(), SCIPisGE(), SCIPisPositive(), SCIPisZero(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsnprintf(), SCIPtightenVarLb(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPwarningMessage(), sin(), and TRUE.

Referenced by presolveCreateOuterApproxDim3(), and presolveRemoveFixedVariables().

◆ presolveCreateBenTalNemirovskiApproxDim3()

static SCIP_RETCODE presolveCreateBenTalNemirovskiApproxDim3 ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR x1,
SCIP_VAR x2,
SCIP_VAR x3,
SCIP_Real  alpha1,
SCIP_Real  alpha2,
SCIP_Real  alpha3,
SCIP_Real  offset1,
SCIP_Real  offset2,
SCIP_Real  offset3,
int  N,
const char *  basename,
int *  naddconss 
)
static

adds the linear outer-approximation of Ben-Tal and Nemirovski for a SOC constraint of dimension 3

Input is the data for a constraint \(\sqrt{constant + (\alpha_1(x_1+offset1))^2 + (\alpha_2(x_2+offset2))^2)} \leq \alpha_3(x_3+offset3)\). Here \(\alpha3 > 0.0\), and the lower bound of \(x_3 \geq -offset3\). Also x2 = NULL is allowed, in which case the second term is assumed to be constant, and \(offset2 \neq 0\) is needed.

Parameters
scipSCIP data structure
consoriginal constraint
x1variable x1
x2variable x2
x3variable x3
alpha1coefficient of x1
alpha2coefficient of x2
alpha3coefficient of x3
offset1offset of x1
offset2offset of x2
offset3offset of x3
Nsize of linear approximation, need to be >= 1
basenamestring to use for building variable and constraint names
naddconssbuffer where to add the number of added constraints

Definition at line 2091 of file cons_soc.c.

References ABS, cos(), M_PI, NULL, pow(), presolveCreateOuterApproxDim3(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPallocBufferArray, SCIPchgVarLbGlobal(), SCIPchgVarLbNode(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsLinear(), SCIPcreateVar(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPinfinity(), SCIPisGE(), SCIPisPositive(), SCIPisZero(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), sin(), and TRUE.

Referenced by presolveCreateGlineurApproxDim3(), and presolveCreateOuterApproxDim3().

◆ presolveCreateOuterApproxDim3()

static SCIP_RETCODE presolveCreateOuterApproxDim3 ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR x1,
SCIP_VAR x2,
SCIP_VAR x3,
SCIP_Real  alpha1,
SCIP_Real  alpha2,
SCIP_Real  alpha3,
SCIP_Real  offset1,
SCIP_Real  offset2,
SCIP_Real  offset3,
int  N,
SCIP_Bool  glineur,
const char *  basename,
int *  naddconss 
)
static

adds a linear outer approx for a three dimensional SOC constraint

chooses between Ben-Tan/Nemirovski and Glineur and calls the corresponding function

Parameters
scipSCIP data structure
consoriginal constraint
x1variable x1
x2variable x2
x3variable x3
alpha1coefficient of x1
alpha2coefficient of x2
alpha3coefficient of x3
offset1offset of x1
offset2offset of x2
offset3offset of x3
Nsize of linear approximation, need to be >= 1
glineurwhether to prefer Glineur to Ben-Tal Nemirovski
basenamestring to use for building variable and constraint names
naddconssbuffer where to add the number of added constraints

Definition at line 2337 of file cons_soc.c.

References presolveCreateBenTalNemirovskiApproxDim3(), presolveCreateGlineurApproxDim3(), presolveCreateOuterApprox(), SCIP_CALL, and SCIP_OKAY.

Referenced by presolveCreateBenTalNemirovskiApproxDim3(), and presolveCreateOuterApprox().

◆ presolveCreateOuterApprox()

static SCIP_RETCODE presolveCreateOuterApprox ( SCIP scip,
int  nlhsvars,
SCIP_VAR **  lhsvars,
SCIP_Real lhscoefs,
SCIP_Real lhsoffsets,
SCIP_VAR rhsvar,
SCIP_Real  rhscoeff,
SCIP_Real  rhsoffset,
SCIP_Real  constant,
const char *  basename,
SCIP_CONS origcons,
int  soc3_nr_auxvars,
SCIP_Bool  glineur,
int *  naddconss 
)
static

adds linear outer approximation of Ben-Tal and Nemirovski for a constraint \(\gamma + \sum_{i=1}^n (\alpha_i (x_i + \beta_i))^2 \leq (\alpha_{n+1} (x_{n+1} + \beta_{n+1}))^2\) to the LP

if n > 2, calls same function recursively; if n = 2, calls presolveCreateBenTalNemirovskiApproxDim3

Parameters
scipSCIP data structure
nlhsvarsnumber of variables on left hand side (n)
lhsvarsvariables on left hand side (x_i)
lhscoefscoefficients of variables on left hand side (alpha_i)
lhsoffsetsoffsets of variable on left hand side (beta_i)
rhsvarvariable on right hand side (y)
rhscoeffcoefficient of variable on right hand side (alpha_{n+1})
rhsoffsetoffset of variable on right hand side (beta_{n+1})
constantconstant term (gamma)
basenameprefix for variable and constraint name
origconsoriginal constraint for which this SOC3 set is added
soc3_nr_auxvarsnumber of auxiliary variables to use for a SOC3 constraint, or 0 if automatic
glineurwhether Glineur should be preferred to Ben-Tal Nemirovski
naddconssbuffer where to add the number of added constraints

Definition at line 2373 of file cons_soc.c.

References FALSE, NULL, presolveCreateOuterApproxDim3(), propagateBounds(), SCIP_CALL, SCIP_OKAY, SCIP_VARTYPE_CONTINUOUS, SCIPaddVar(), SCIPcreateVar(), SCIPinfinity(), SCIPisNegative(), SCIPisPositive(), SCIPisZero(), SCIPreleaseVar(), SCIPsnprintf(), sqrt(), and TRUE.

Referenced by presolveCreateOuterApproxDim3(), and SCIP_DECL_CONSPRESOL().

◆ propagateBounds()

static SCIP_RETCODE propagateBounds ( SCIP scip,
SCIP_CONS cons,
SCIP_RESULT result,
int *  nchgbds,
SCIP_Bool redundant 
)
static

◆ polishSolution()

static SCIP_RETCODE polishSolution ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_Bool success 
)
static

tries to adjust a solution such that it satisfies a given constraint by increasing the value for the constraints right hand side variable

Parameters
scipSCIP data structure
consconstraint
solsolution to polish
successbuffer to store whether polishing was successful

Definition at line 2707 of file cons_soc.c.

References disaggregate(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPceil(), SCIPconsGetData(), SCIPconsGetName(), SCIPdebugMsg, SCIPfloor(), SCIPgetSolVal(), SCIPinfinity(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPisZero(), SCIPsetSolVal(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), SCIPvarMayRoundDown(), SCIPvarMayRoundUp(), and TRUE.

Referenced by propagateBounds(), and SCIP_DECL_CONSCHECK().

◆ disaggregate()

static SCIP_RETCODE disaggregate ( SCIP scip,
SCIP_CONS cons,
SCIP_CONSDATA consdata,
int *  naddconss,
int *  ndelconss,
SCIP_Bool success 
)
static

disaggregates a (sufficiently large) SOC constraint into smaller ones; for each term on the lhs we add a quadratic constraint \((\alpha_i * (x_i + \beta_i))^2 \leq \alpha_{n+1} (x_{n+1} + \beta_{n+1})\, z_i\) and a single linear constraint \(\sum_i z_i \leq \alpha_{n+1}\, (x_{n+1} + \beta_{n+1})\); each quadratic constraint might be upgraded to a SOC; since the violations of all quadratic constraints sum up we scale each constraint by the number of lhs terms + 1

Parameters
scipSCIP data structure
consconstraint
consdataconstraint data
naddconsspointer to count total number of added constraints
ndelconsspointer to count total number of deleted constraints
successpointer to store whether disaggregation was successful

Definition at line 2798 of file cons_soc.c.

References enforceConstraint(), FALSE, NULL, scalars, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPallocBufferArray, SCIPconsGetName(), SCIPcreateConsBasicLinear(), SCIPcreateConsBasicSOC(), SCIPcreateVar(), SCIPdebugMsg, SCIPdelCons(), SCIPfreeBufferArray, SCIPinfinity(), SCIPisZero(), SCIPmultiaggregateVar(), SCIPprintCons(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsnprintf(), SCIPvarGetName(), SQR, and TRUE.

Referenced by polishSolution(), and SCIP_DECL_CONSPRESOL().

◆ enforceConstraint()

static SCIP_RETCODE enforceConstraint ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS **  conss,
int  nconss,
int  nusefulconss,
SCIP_SOL sol,
SCIP_RESULT result 
)
static

helper function to enforce constraints

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints to process
nconssnumber of constraints
nusefulconssnumber of useful (non-obsolete) constraints to process
solsolution to enforce (NULL for the LP solution)
resultpointer to store the result of the enforcing call

Definition at line 2996 of file cons_soc.c.

References computeViolations(), CONSHDLR_NAME, NULL, propagateBounds(), SCIP_Bool, SCIP_BRANCHED, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_QUADCONSUPGD(), SCIP_FEASIBLE, SCIP_OKAY, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPcreateChild(), SCIPdebugMsg, SCIPfeastol(), SCIPgetCurrentNode(), SCIPisGT(), SCIPisStopped(), SCIPnodeGetEstimate(), SCIPwarningMessage(), separatePoint(), and TRUE.

Referenced by disaggregate(), SCIP_DECL_CONSENFOLP(), and SCIP_DECL_CONSENFORELAX().

◆ SCIP_DECL_QUADCONSUPGD()

static SCIP_DECL_QUADCONSUPGD ( upgradeConsQuadratic  )
static

tries to upgrade a quadratic constraint to a SOC constraint

We treat as special cases, quadratic with no bilinear terms and hyperbolic quadratic constraints with exactly on bilinear component containing nonnegative variables. For this we use the formula:

\[ x^T x \leq yz,\; y \geq 0,\; z \geq 0 \qquad\Leftrightarrow\qquad \left\| \left(\begin{array}{c} x \\ \frac{1}{2}(y - z)\end{array}\right) \right\| \leq \frac{1}{2}(y + z). \]

Definition at line 3118 of file cons_soc.c.

References a, SCIP_BilinTerm::coef, CONSHDLR_NAME, FALSE, LapackDsyev(), SCIP_QuadVarTerm::lincoef, MAX, MIN, NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_PRESOLTIMING_FAST, SCIP_PRESOLTIMING_MEDIUM, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddVar(), SCIPallocBufferArray, SCIPallocClearBufferArray, SCIPcomputeVarLbGlobal(), SCIPcomputeVarUbGlobal(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsLinear(), SCIPcreateConsQuadratic2(), SCIPcreateConsSOC(), SCIPcreateVar(), SCIPcreateVarBasic(), SCIPdebugMsg, SCIPdebugPrintCons, SCIPfindConshdlr(), SCIPfindQuadVarTermQuadratic(), SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetBilinTermsQuadratic(), SCIPgetCoefsLinearVarsQuadratic(), SCIPgetLhsQuadratic(), SCIPgetLinearVarsQuadratic(), SCIPgetNBilinTermsQuadratic(), SCIPgetNLinearVarsQuadratic(), SCIPgetNQuadVarTermsQuadratic(), SCIPgetQuadVarTermsQuadratic(), SCIPgetRhsQuadratic(), SCIPinfinity(), SCIPisEQ(), SCIPisGE(), SCIPisGT(), SCIPisInfinity(), SCIPisIpoptAvailableIpopt(), SCIPisLE(), SCIPisLT(), SCIPisNegative(), SCIPisZero(), SCIPmarkDoNotMultaggrVar(), SCIPmultiaggregateVar(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsnprintf(), SCIPsortQuadVarTermsQuadratic(), SCIPswapReals(), SCIPvarGetLbGlobal(), SCIPvarIsActive(), SCIP_QuadVarTerm::sqrcoef, sqrt(), TRUE, UPGSCALE, SCIP_QuadVarTerm::var, SCIP_BilinTerm::var1, and SCIP_BilinTerm::var2.

Referenced by enforceConstraint().

◆ SCIP_DECL_CONSHDLRCOPY()

static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopySOC  )
static

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

Definition at line 3942 of file cons_soc.c.

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

Referenced by SCIP_DECL_QUADCONSUPGD().

◆ SCIP_DECL_CONSFREE()

static SCIP_DECL_CONSFREE ( consFreeSOC  )
static

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

Definition at line 3958 of file cons_soc.c.

References CONSHDLR_NAME, NULL, SCIP_DECL_CONSINIT(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPfreeBlockMemory.

Referenced by SCIP_DECL_CONSHDLRCOPY().

◆ SCIP_DECL_CONSINIT()

static SCIP_DECL_CONSINIT ( consInitSOC  )
static

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

Definition at line 3977 of file cons_soc.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSEXIT(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPexprintGetName(), SCIPfindHeur(), and SCIPmarkConsPropagate().

Referenced by SCIP_DECL_CONSFREE().

◆ SCIP_DECL_CONSEXIT()

static SCIP_DECL_CONSEXIT ( consExitSOC  )
static

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

Definition at line 4005 of file cons_soc.c.

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

Referenced by SCIP_DECL_CONSINIT().

◆ SCIP_DECL_CONSEXITPRE()

static SCIP_DECL_CONSEXITPRE ( consExitpreSOC  )
static

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

Definition at line 4024 of file cons_soc.c.

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

Referenced by SCIP_DECL_CONSEXIT().

◆ SCIP_DECL_CONSINITSOL()

static SCIP_DECL_CONSINITSOL ( consInitsolSOC  )
static

solving process initialization method of constraint handler (called when branch and bound process is about to begin)

Definition at line 4048 of file cons_soc.c.

References CONSHDLR_NAME, createNlRow(), FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSEXITSOL(), SCIP_EVENTTYPE_SOLFOUND, SCIP_OKAY, SCIPaddNlRow(), SCIPcatchEvent(), SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconsIsEnabled(), SCIPfindEventhdlr(), and SCIPisNLPConstructed().

Referenced by SCIP_DECL_CONSEXITPRE().

◆ SCIP_DECL_CONSEXITSOL()

static SCIP_DECL_CONSEXITSOL ( consExitsolSOC  )
static

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

Definition at line 4103 of file cons_soc.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().

◆ SCIP_DECL_CONSDELETE()

◆ SCIP_DECL_CONSTRANS()

◆ SCIP_DECL_CONSSEPALP()

◆ SCIP_DECL_CONSSEPASOL()

static SCIP_DECL_CONSSEPASOL ( consSepasolSOC  )
static

separation method of constraint handler for arbitrary primal solutions

Definition at line 4396 of file cons_soc.c.

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

Referenced by SCIP_DECL_CONSSEPALP().

◆ SCIP_DECL_CONSENFOLP()

static SCIP_DECL_CONSENFOLP ( consEnfolpSOC  )
static

constraint enforcing method of constraint handler for LP solutions

Definition at line 4425 of file cons_soc.c.

References enforceConstraint(), NULL, SCIP_CALL, SCIP_DECL_CONSENFORELAX(), and SCIP_OKAY.

Referenced by SCIP_DECL_CONSSEPASOL().

◆ SCIP_DECL_CONSENFORELAX()

static SCIP_DECL_CONSENFORELAX ( consEnforelaxSOC  )
static

constraint enforcing method of constraint handler for relaxation solutions

Definition at line 4435 of file cons_soc.c.

References enforceConstraint(), SCIP_CALL, SCIP_DECL_CONSENFOPS(), and SCIP_OKAY.

Referenced by SCIP_DECL_CONSENFOLP().

◆ SCIP_DECL_CONSENFOPS()

static SCIP_DECL_CONSENFOPS ( consEnfopsSOC  )
static

constraint enforcing method of constraint handler for pseudo solutions

Definition at line 4445 of file cons_soc.c.

References computeViolations(), NULL, SCIP_CALL, SCIP_DECL_CONSCHECK(), SCIP_FEASIBLE, SCIP_INFEASIBLE, and SCIP_OKAY.

Referenced by SCIP_DECL_CONSENFORELAX().

◆ SCIP_DECL_CONSCHECK()

◆ SCIP_DECL_CONSPROP()

static SCIP_DECL_CONSPROP ( consPropSOC  )
static

domain propagation method of constraint handler

Definition at line 4574 of file cons_soc.c.

References NULL, propagateBounds(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSPRESOL(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, and SCIP_OKAY.

Referenced by SCIP_DECL_CONSCHECK().

◆ SCIP_DECL_CONSPRESOL()

◆ SCIP_DECL_CONSLOCK()

static SCIP_DECL_CONSLOCK ( consLockSOC  )
static

variable rounding lock method of constraint handler

Definition at line 4695 of file cons_soc.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_LOCKTYPE_MODEL, SCIP_OKAY, SCIPaddVarLocksType(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), and SCIPdebugMsg.

Referenced by SCIP_DECL_CONSPRESOL().

◆ SCIP_DECL_CONSPRINT()

static SCIP_DECL_CONSPRINT ( consPrintSOC  )
static

constraint display method of constraint handler

Definition at line 4728 of file cons_soc.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSCOPY(), SCIP_OKAY, SCIPconsGetData(), SCIPconshdlrGetName(), SCIPinfoMessage(), SCIPwriteVarName(), and TRUE.

Referenced by SCIP_DECL_CONSLOCK().

◆ SCIP_DECL_CONSCOPY()

static SCIP_DECL_CONSCOPY ( consCopySOC  )
static

constraint copying method of constraint handler

Definition at line 4771 of file cons_soc.c.

References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSPARSE(), SCIP_OKAY, SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetName(), SCIPcreateConsSOC(), SCIPfreeBufferArray, SCIPgetVarCopy(), and TRUE.

Referenced by SCIP_DECL_CONSPRINT().

◆ SCIP_DECL_CONSPARSE()

static SCIP_DECL_CONSPARSE ( consParseSOC  )
static

◆ SCIP_DECL_CONSGETVARS()

static SCIP_DECL_CONSGETVARS ( consGetVarsSOC  )
static

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

Definition at line 5046 of file cons_soc.c.

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

Referenced by SCIP_DECL_CONSPARSE().

◆ SCIP_DECL_CONSGETNVARS()

static SCIP_DECL_CONSGETNVARS ( consGetNVarsSOC  )
static

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

Definition at line 5067 of file cons_soc.c.

References NULL, SCIP_OKAY, SCIPconsGetData(), SCIPincludeConshdlrSOC(), and TRUE.

Referenced by SCIP_DECL_CONSGETVARS().