Scippy

SCIP

Solving Constraint Integer Programs

AMPLProblemHandler Class Reference

Detailed Description

implementation of AMPL/MPs NLHandler that constructs a SCIP problem while a .nl file is read

Definition at line 102 of file reader_nl.cpp.

implementation of AMPL/MPs NLHandler that constructs a SCIP problem while a .nl file is read More...

Data Structures

class  LinearExprHandler
 
class  LinearPartHandler
 
class  NumericArgHandler
 
class  SuffixHandler
 

Public Types

typedef SuffixHandler< int > IntSuffixHandler
 
typedef SuffixHandler< SCIP_RealDblSuffixHandler
 
typedef LinearPartHandler LinearObjHandler
 
typedef LinearPartHandler LinearConHandler
 

Public Member Functions

 AMPLProblemHandler (SCIP *scip_, const char *filename)
 
 ~AMPLProblemHandler ()
 
void OnHeader (const mp::NLHeader &h)
 
SCIP_EXPROnNumber (double value)
 receive notification of a number in a nonlinear expression More...
 
SCIP_EXPROnVariableRef (int variableIndex)
 receive notification of a variable reference in a nonlinear expression More...
 
SCIP_EXPROnUnary (mp::expr::Kind kind, SCIP_EXPR *child)
 receive notification of a unary expression More...
 
SCIP_EXPROnBinary (mp::expr::Kind kind, SCIP_EXPR *firstChild, SCIP_EXPR *secondChild)
 receive notification of a binary expression More...
 
NumericArgHandler BeginSum (int num_args)
 receive notification of the beginning of a summation More...
 
SCIP_EXPREndSum (NumericArgHandler handler)
 receive notification of the end of a summation More...
 
void OnObj (int objectiveIndex, mp::obj::Type type, SCIP_EXPR *nonlinearExpression)
 receive notification of an objective type and the nonlinear part of an objective expression More...
 
void OnAlgebraicCon (int constraintIndex, SCIP_EXPR *expr)
 receive notification of an algebraic constraint expression More...
 
LinearExprHandler BeginCommonExpr (int index, int num_linear_terms)
 receive notification of the beginning of a common expression (defined variable) More...
 
void EndCommonExpr (int index, SCIP_EXPR *expr, int)
 receive notification of the end of a common expression More...
 
SCIP_EXPROnCommonExprRef (int expr_index)
 receive notification of a common expression (defined variable) reference More...
 
void OnVarBounds (int variableIndex, double variableLB, double variableUB)
 receive notification of variable bounds More...
 
void OnConBounds (int index, double lb, double ub)
 receive notification of constraint sides More...
 
void OnInitialValue (int var_index, double value)
 receive notification of the initial value for a variable More...
 
void OnInitialDualValue (int, double)
 receives notification of the initial value for a dual variable More...
 
ColumnSizeHandler OnColumnSizes ()
 receives notification of Jacobian column sizes More...
 
IntSuffixHandler OnIntSuffix (fmt::StringRef name, mp::suf::Kind kind, int)
 receive notification of an integer suffix More...
 
DblSuffixHandler OnDblSuffix (fmt::StringRef name, mp::suf::Kind kind, int)
 receive notification of a double suffix More...
 
LinearPartHandler OnLinearObjExpr (int objectiveIndex, int)
 receive notification of the linear part of an objective More...
 
LinearConHandler OnLinearConExpr (int constraintIndex, int)
 receive notification of the linear part of a constraint More...
 
void EndInput ()
 
SCIP_RETCODE cleanup ()
 

Member Typedef Documentation

◆ IntSuffixHandler

Definition at line 1022 of file reader_nl.cpp.

◆ DblSuffixHandler

◆ LinearObjHandler

◆ LinearConHandler

Constructor & Destructor Documentation

◆ AMPLProblemHandler()

AMPLProblemHandler::AMPLProblemHandler ( SCIP scip_,
const char *  filename 
)
inline

constructor

initializes SCIP problem and problem data

Parameters
scip_SCIP data structure
filenamename of .nl file that is read

Definition at line 188 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, SCIPallocBlockMemoryArray, SCIPallocClearMemory, and SCIPcreateProb().

◆ ~AMPLProblemHandler()

AMPLProblemHandler::~AMPLProblemHandler ( )
inline

destructor

only asserts that cleanup() has been called, as we cannot throw an exception or return a SCIP_RETCODE here

Definition at line 251 of file reader_nl.cpp.

Member Function Documentation

◆ OnHeader()

void AMPLProblemHandler::OnHeader ( const mp::NLHeader &  h)
inline

◆ OnNumber()

SCIP_EXPR* AMPLProblemHandler::OnNumber ( double  value)
inline

receive notification of a number in a nonlinear expression

Parameters
valuevalue

Definition at line 393 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, and SCIPcreateExprValue().

◆ OnVariableRef()

SCIP_EXPR* AMPLProblemHandler::OnVariableRef ( int  variableIndex)
inline

receive notification of a variable reference in a nonlinear expression

Parameters
variableIndexAMPL index of variable

Definition at line 408 of file reader_nl.cpp.

References NULL.

◆ OnUnary()

SCIP_EXPR* AMPLProblemHandler::OnUnary ( mp::expr::Kind  kind,
SCIP_EXPR child 
)
inline

receive notification of a unary expression

Parameters
kindexpression operator
childargument

Definition at line 420 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, SCIP_Real, SCIPcreateExprAbs(), SCIPcreateExprCos(), SCIPcreateExprExp(), SCIPcreateExprLog(), SCIPcreateExprPow(), SCIPcreateExprSin(), SCIPcreateExprSum(), and SCIPreleaseExpr().

◆ OnBinary()

SCIP_EXPR* AMPLProblemHandler::OnBinary ( mp::expr::Kind  kind,
SCIP_EXPR firstChild,
SCIP_EXPR secondChild 
)
inline

receive notification of a binary expression

Parameters
kindexpression operand
firstChildfirst argument
secondChildsecond argument

Definition at line 488 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, SCIP_Real, SCIPcreateExprExp(), SCIPcreateExprLog(), SCIPcreateExprPow(), SCIPcreateExprProduct(), SCIPcreateExprSum(), SCIPgetValueExprValue(), SCIPisExprValue(), and SCIPreleaseExpr().

◆ BeginSum()

NumericArgHandler AMPLProblemHandler::BeginSum ( int  num_args)
inline

receive notification of the beginning of a summation

Parameters
num_argsnumber of terms to expect

Definition at line 601 of file reader_nl.cpp.

References h.

◆ EndSum()

SCIP_EXPR* AMPLProblemHandler::EndSum ( NumericArgHandler  handler)
inline

receive notification of the end of a summation

Parameters
handlerhandler that handled the sum

Definition at line 610 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, SCIPcreateExprSum(), and AMPLProblemHandler::NumericArgHandler::v.

◆ OnObj()

void AMPLProblemHandler::OnObj ( int  objectiveIndex,
mp::obj::Type  type,
SCIP_EXPR nonlinearExpression 
)
inline

receive notification of an objective type and the nonlinear part of an objective expression

Parameters
objectiveIndexindex of objective
typeobjective sense
nonlinearExpressionnonlinear part of objective function

Definition at line 622 of file reader_nl.cpp.

References MAX, NULL, SCIP_CALL_THROW, SCIP_OBJSENSE_MAXIMIZE, SCIP_OBJSENSE_MINIMIZE, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddVar(), SCIPcreateVarBasic(), SCIPgetValueExprValue(), SCIPisExprValue(), SCIPreleaseVar(), and SCIPsetObjsense().

◆ OnAlgebraicCon()

void AMPLProblemHandler::OnAlgebraicCon ( int  constraintIndex,
SCIP_EXPR expr 
)
inline

receive notification of an algebraic constraint expression

Parameters
constraintIndexindex of constraint
exprnonlinear part of constraint

Definition at line 652 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, and SCIPchgExprNonlinear().

◆ BeginCommonExpr()

LinearExprHandler AMPLProblemHandler::BeginCommonExpr ( int  index,
int  num_linear_terms 
)
inline

receive notification of the beginning of a common expression (defined variable)

Parameters
indexindex of common expression
num_linear_termsnumber of terms to expect

Definition at line 717 of file reader_nl.cpp.

◆ EndCommonExpr()

void AMPLProblemHandler::EndCommonExpr ( int  index,
SCIP_EXPR expr,
int   
)
inline

receive notification of the end of a common expression

Parameters
indexindex of common expression
exprnonlinear part of common expression

Definition at line 729 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, and SCIPappendExprSumExpr().

◆ OnCommonExprRef()

SCIP_EXPR* AMPLProblemHandler::OnCommonExprRef ( int  expr_index)
inline

receive notification of a common expression (defined variable) reference

Parameters
expr_indexindex of common expression

Definition at line 750 of file reader_nl.cpp.

References NULL.

◆ OnVarBounds()

void AMPLProblemHandler::OnVarBounds ( int  variableIndex,
double  variableLB,
double  variableUB 
)
inline

receive notification of variable bounds

Parameters
variableIndexAMPL index of variable
variableLBvariable lower bound
variableUBvariable upper bound

Definition at line 761 of file reader_nl.cpp.

References SCIP_CALL_THROW, SCIP_VARTYPE_BINARY, SCIPchgVarLbGlobal(), SCIPchgVarUbGlobal(), SCIPinfinity(), and SCIPvarGetType().

◆ OnConBounds()

void AMPLProblemHandler::OnConBounds ( int  index,
double  lb,
double  ub 
)
inline

receive notification of constraint sides

Parameters
indexAMPL index of constraint
lbconstraint left-hand-side
ubconstraint right-hand-side

Definition at line 784 of file reader_nl.cpp.

References SCIP_CALL_THROW, SCIPchgLhsLinear(), SCIPchgLhsNonlinear(), SCIPchgRhsLinear(), SCIPchgRhsNonlinear(), and SCIPisInfinity().

◆ OnInitialValue()

void AMPLProblemHandler::OnInitialValue ( int  var_index,
double  value 
)
inline

receive notification of the initial value for a variable

Parameters
var_indexAMPL index of variable
valueinitial primal value of variable

Definition at line 819 of file reader_nl.cpp.

References NULL, SCIP_CALL_THROW, SCIPcreateSol(), and SCIPsetSolVal().

◆ OnInitialDualValue()

void AMPLProblemHandler::OnInitialDualValue ( int  ,
double   
)
inline

receives notification of the initial value for a dual variable

Definition at line 833 of file reader_nl.cpp.

◆ OnColumnSizes()

ColumnSizeHandler AMPLProblemHandler::OnColumnSizes ( )
inline

receives notification of Jacobian column sizes

use ColumnSizeHandler from upper class, which does nothing

Definition at line 842 of file reader_nl.cpp.

◆ OnIntSuffix()

IntSuffixHandler AMPLProblemHandler::OnIntSuffix ( fmt::StringRef  name,
mp::suf::Kind  kind,
int   
)
inline

receive notification of an integer suffix

Parameters
namesuffix name, not null-terminated
kindsuffix kind

Definition at line 1024 of file reader_nl.cpp.

◆ OnDblSuffix()

DblSuffixHandler AMPLProblemHandler::OnDblSuffix ( fmt::StringRef  name,
mp::suf::Kind  kind,
int   
)
inline

receive notification of a double suffix

Parameters
namesuffix name, not null-terminated
kindsuffix kind

Definition at line 1035 of file reader_nl.cpp.

◆ OnLinearObjExpr()

LinearPartHandler AMPLProblemHandler::OnLinearObjExpr ( int  objectiveIndex,
int   
)
inline

receive notification of the linear part of an objective

Parameters
objectiveIndexindex of objective

Definition at line 1106 of file reader_nl.cpp.

◆ OnLinearConExpr()

LinearConHandler AMPLProblemHandler::OnLinearConExpr ( int  constraintIndex,
int   
)
inline

receive notification of the linear part of a constraint

Parameters
constraintIndexindex of constraint

Definition at line 1120 of file reader_nl.cpp.

◆ EndInput()

void AMPLProblemHandler::EndInput ( )
inline

receive notification of the end of the input

  • setup all nonlinear constraints and add them to SCIP
  • add linear constraints to SCIP (should be after nonlinear ones to respect order in .nl file)
  • add initial solution, if initial values were given

Definition at line 1133 of file reader_nl.cpp.

References NULL, SCIP_Bool, SCIP_CALL_THROW, SCIP_OBJSENSE_MAXIMIZE, SCIP_OBJSENSE_MINIMIZE, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPaddCons(), SCIPaddLinearVarNonlinear(), SCIPaddSolFree(), SCIPaddVar(), SCIPcreateConsBasicNonlinear(), SCIPcreateConsBasicSOS1(), SCIPcreateConsBasicSOS2(), SCIPcreateVarBasic(), SCIPgetObjsense(), SCIPinfinity(), SCIPreleaseCons(), and SCIPreleaseVar().

◆ cleanup()

SCIP_RETCODE AMPLProblemHandler::cleanup ( )
inline

releases expressions and linear constraints from data

should be called if there was an error while reading the .nl file this is not in the destructor, because we want to return SCIP_RETCODE

Definition at line 1240 of file reader_nl.cpp.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPfreeSol(), and SCIPreleaseExpr().

Referenced by SCIP_DECL_READERREAD().