Common Definitions¶
Header: mp/common.h

enum
mp::var
::
Type
¶ Variable type.
Values:

CONTINUOUS
¶ A continuous variable.

INTEGER
¶ An integer variable.


enum
mp::obj
::
Type
¶ Objective type.
Values:

MIN
= 0¶ A minimization objective.

MAX
= 1¶ A maximization objective.


enum
mp::func
::
Type
¶ Function type.
Values:

NUMERIC
= 0¶ A numeric function.

SYMBOLIC
= 1¶ A symbolic function accepting numeric and string arguments.


class
ComplInfo
¶ Complementarity constraint information.

enum
mp::suf
::
Kind
¶ Suffix kind.
Values:

VAR
= 0¶ Applies to variables.

CON
= 1¶ Applies to constraints.

OBJ
= 2¶ Applies to objectives.

PROBLEM
= 3¶ Applies to problems.


enum
mp::sol
::
Status
¶ Solution status.
Values:

UNKNOWN
= 1¶ Unknown status.

SOLVED
= 0¶ An optimal solution found for an optimization problem or a feasible solution found for a satisfaction problem.

UNCERTAIN
= 100¶ Solution returned but it can be nonoptimal or even infeasible.

INFEASIBLE
= 200¶ Problem is infeasible.

UNBOUNDED
= 300¶ Problem is unbounded.

LIMIT
= 400¶ Stopped by a limit, e.g.
on iterations or time.

FAILURE
= 500¶ A solver error.

INTERRUPTED
= 600¶ Interrupted by the user.


enum
mp::expr
::
Kind
¶ Expression kind. Both AMPLlike and mathematical notation is given for each expression in the descriptions below as in \(\mathrm{abs}(x) = x\), unless they are identical such as \(\mathrm{sin}(x)\) or there is no standard mathematical notation.
Values:

UNKNOWN
= 0¶ An unknown expression.

FIRST_EXPR
¶ The first expression kind other than the unknown expression kind.

FIRST_NUMERIC
= FIRST_EXPR¶ The first numeric expression kind. Numeric expression kinds are in the range [
FIRST_NUMERIC
,LAST_NUMERIC
].

NUMBER
= FIRST_NUMERIC¶ A number such as 42 or 1.23e4.

FIRST_REFERENCE
¶ The first reference expression kind. Reference expression kinds are in the range [
FIRST_REFERENCE
,LAST_REFERENCE
].

VARIABLE
= FIRST_REFERENCE¶ A reference to a variable.

COMMON_EXPR
¶ A reference to a common expression.

LAST_REFERENCE
= COMMON_EXPR¶ The last reference expression kind.

FIRST_UNARY
¶ The first unary numeric expression kind. Unary numeric expression kinds are in the range [
FIRST_UNARY
,LAST_UNARY
].

MINUS
= FIRST_UNARY¶ A unary minus, \(x\).

ABS
¶ The absolute value function, \(\mathrm{abs}(x) = x\).

FLOOR
¶ The floor function, \(\mathrm{floor}(x) = \lfloor x \rfloor\).

CEIL
¶ The ceiling function, \(\mathrm{ceil}(x) = \lceil x \rceil\).

SQRT
¶ The square root function, \(\mathrm{sqrt}(x) = \sqrt{x}\).

POW2
¶ Squaring: \(x \mathop{\verb!^!} 2 = x^2\).

EXP
¶ The natural exponential function, \(\mathrm{exp}(x) = e^x\).

LOG
¶ The natural logarithmic function, \(\mathrm{log}(x) = \mathrm{ln}(x)\).

LOG10
¶ The base 10 logarithmic function, \(\mathrm{log10}(x) = \mathrm{log}_{10}(x)\).

SIN
¶ Sine, \(\mathrm{sin}(x)\).

SINH
¶ Hyperbolic sine, \(\mathrm{sinh}(x)\).

COS
¶ Cosine, \(\mathrm{cos}(x)\).

COSH
¶ Hyperbolic cosine, \(\mathrm{cosh}(x)\).

TAN
¶ Tangent, \(\mathrm{tan}(x)\).

TANH
¶ Hyperbolic tangent, \(\mathrm{tan}(x)\).

ASIN
¶ Inverse sine, \(\mathrm{asin}(x) = \mathrm{sin}^{1}(x)\).

ASINH
¶ Inverse hyperbolic sine, \(\mathrm{asinh}(x) = \mathrm{sinh}^{1}(x)\).

ACOS
¶ Inverse cosine, \(\mathrm{acos}(x) = \mathrm{cos}^{1}(x)\).

ACOSH
¶ Inverse hyperbolic cosine, \(\mathrm{acosh}(x) = \mathrm{cosh}^{1}(x)\).

ATAN
¶ Inverse tangent, \(\mathrm{atan}(x) = \mathrm{tan}^{1}(x)\).

ATANH
¶ Inverse hyperbolic tangent, \(\mathrm{atanh}(x) = \mathrm{tanh}^{1}(x)\).

LAST_UNARY
= ATANH¶ The last unary numeric expression kind.

FIRST_BINARY
¶ The first binary expression kind. Binary expression kinds are in the range [
FIRST_BINARY
,LAST_BINARY
].

ADD
= FIRST_BINARY¶ Addition, \(x + y\).

SUB
¶ Subtraction, \(x  y\).

LESS
¶ The \(\mathrm{less}\) operation, \(x \mathop{\rm less} y = \mathrm{max}(x  y, 0)\).

MUL
¶ Multiplication, \(x * y = x y\).

DIV
¶ Division, \(x / y\).

TRUNC_DIV
¶ Truncated division, \(x \mathop{\rm div} y = \mathrm{trunc}(x / y)\).

MOD
¶ The modulo operation, \(x \mathop{\rm mod} y\).

POW
¶ Exponentiation, \(x \mathop{\verb!^!} y = x^y\).

POW_CONST_BASE
¶ Exponentiation with a constant base, \(a^x\).

POW_CONST_EXP
¶ Exponentiation with a constant exponent \(x^a\).

ATAN2
¶ Inverse tangent, \(\mathrm{atan2}(y, x) = \mathrm{tan}^{1}(y/x)\).

PRECISION
¶ The function \(\mathrm{precision}(x, n)\) which returns \(x\) rounded to \(n\) significant decimal digits.

ROUND
¶ The function \(\mathrm{round}(x, n)\) which returns \(x\) rounded to \(n\) digits past decimal point.

TRUNC
¶ The function \(\mathrm{trunc}(x, n)\) which returns \(x\) truncated to \(n\) digits past decimal point.

LAST_BINARY
= TRUNC¶ The last binary numeric expression kind.

IF
¶ An ifthenelse expression, \(\mathrm{if}\;c\;\mathrm{then}\;e_1\;[\mathrm{else}\;e_2]\), where \(c\) is a logical expression representing condition, while \(e_1\) and \(e_2\) are numeric expressions. The expression evaluates to \(e_1\) if \(c\) is true and to \(e_2\) otherwise. If the else clause is omitted, \(e_2\) is assumed to be zero.

PLTERM
¶ A piecewiselinear term, \(\verb<<b_1, ..., b_n; s_1, ..., s_{n + 1}\verb>>  r\), where \(b_i\) are breakpoints, \(s_i\) are slopes and \(r\) is a
reference
.

CALL
¶ A function call, \(f(e_1, ..., e_n)\), where \(f\) is a function name and \(e_i\) are numeric or string expressions.

FIRST_ITERATED
¶ The first iterated expression kind. Iterated expression kinds are in the range [
FIRST_ITERATED
,LAST_ITERATED
].The term “iterated” in the context of operators and expressions comes from the article AMPL: A Mathematical Programming Language and is used to denote operators indexed over sets.

FIRST_VARARG
= FIRST_ITERATED¶ A vararg expression, \(\mathrm{min}\) or \(\mathrm{max}\). Vararg expression kinds are in the range [
FIRST_VARARG
,LAST_VARARG
].

MIN
= FIRST_VARARG¶ Minimum, \(\mathrm{min}(e_1, ..., e_n) = \min_{i=1,...,n} e_i\).

MAX
¶ Maximum, \(\mathrm{max}(e_1, ..., e_n) = \max_{i=1,...,n} e_i\).

LAST_VARARG
= MAX¶ The last vararg expression kind.

SUM
¶ Summation, \(\mathrm{sum}(e_1, ..., e_n) = \sum_{i=1}^n e_i\).

NUMBEROF
¶ A \(\mathrm{numberof}\) expression, \(\mathrm{numberof}\;e_0\;\mathrm{in}\;(e_1, ..., e_n)\), which evaluates to the number of times the value of \(e_0\) appears among the values of \(e_1, ..., e_n\).

LAST_ITERATED
= NUMBEROF¶ The last iterated expression kind.

NUMBEROF_SYM
¶ A symbolic \(\mathrm{numberof}\) expression. \(\mathrm{numberof}\;s_0\;\mathrm{in}\;(s_1, ..., s_n)\), which evaluates to the number of times the value of \(s_0\) appears among the values of \(s_1, ..., s_n\).

COUNT
¶ A \(\mathrm{count}\) expression, \(\mathrm{count}(l_1, ..., l_n)\), where \(l_i\) are logical expressions. This expression evaluates to the number of \(l_i\) whose values are true.

LAST_NUMERIC
= COUNT¶ The last numeric expression kind.

FIRST_LOGICAL
¶ The first logical expression kind. Logical expression kinds are in the range [
FIRST_LOGICAL
,LAST_LOGICAL
].

BOOL
= FIRST_LOGICAL¶ A Boolean (logical) constant, true or false.

NOT
¶ A logical not, \(!l\), where \(l\) is a logical expression.

FIRST_BINARY_LOGICAL
¶ The first binary logical expression kind. Binary logical expression kinds are in the range [
FIRST_BINARY_LOGICAL
,LAST_BINARY_LOGICAL
].

OR
= FIRST_BINARY_LOGICAL¶ Logical or, \(l_1\)  \(l_2\).

AND
¶ Logical and, \(l_1\) && \(l_2\).

IFF
¶ If and only if, \(l_1\) <==> \(l_2\).

LAST_BINARY_LOGICAL
= IFF¶ The last binary logical expression kind.

FIRST_RELATIONAL
¶ The first relational expression kind. Relational expression kinds are in the range [
FIRST_RELATIONAL
,LAST_RELATIONAL
].

LT
= FIRST_RELATIONAL¶ Less than, \(e_1\) < \(e_2\).

LE
¶ Less or equal to, \(e_1\) <= \(e_2\).

EQ
¶ Equal to, \(e_1\) = \(e_2\).

GE
¶ Greater or equal to, \(e_1\) >= \(e_2\).

GT
¶ Greater than, \(e_1\) > \(e_2\).

NE
¶ Not equal to, \(e_1\) != \(e_2\).

LAST_RELATIONAL
= NE¶ The last relational expression kind.

FIRST_LOGICAL_COUNT
¶ The first logical count expression kind. Logical count expression kinds are in the range [
FIRST_LOGICAL_COUNT
,LAST_LOGICAL_COUNT
].

ATLEAST
= FIRST_LOGICAL_COUNT¶ An \(\mathrm{atleast}\) expression, \(\mathrm{atleast}\;e\;(l_1, ..., l_n)\), where \(e\) is a numeric expression and \(l_i\) are logical expressions. It evaluates to true if at least \(e\) expressions \(l_i\) are true.

ATMOST
¶ An \(\mathrm{atmost}\) expression, \(\mathrm{atmost}\;e\;(l_1, ..., l_n)\), where \(e\) is a numeric expression and \(l_i\) are logical expressions. It evaluates to true if at most \(e\) expressions \(l_i\) are true.

EXACTLY
¶ An \(\mathrm{exactly}\) expression, \(\mathrm{exactly}\;e\;(l_1, ..., l_n)\), where \(e\) is a numeric expression and \(l_i\) are logical expressions. It evaluates to true if exactly \(e\) expressions \(l_i\) are true.

NOT_ATLEAST
¶ The negation of an \(\mathrm{atleast}\) expression, \(!\mathrm{atleast}\;e\;(l_1, ..., l_n)\).

NOT_ATMOST
¶ The negation of an \(\mathrm{atmost}\) expression, \(!\mathrm{atmost}\;e\;(l_1, ..., l_n)\).

NOT_EXACTLY
¶ The negation of an \(\mathrm{exactly}\) expression, \(!\mathrm{exactly}\;e\;(l_1, ..., l_n)\).

LAST_LOGICAL_COUNT
= NOT_EXACTLY¶ The last logical count expression kind.

IMPLICATION
¶ An implication expression, \(c\;\verb==>\;l_1\;[\mathrm{else}\;l_2]\), where \(c\) is a logical expression representing condition, while \(l_1\) and \(l_2\) are logical expressions. The expression evaluates to \(l_1\) if \(c\) is true and to \(l_2\) otherwise. If the else clause is omitted, \(l_2\) is assumed to be true.

FIRST_ITERATED_LOGICAL
¶ The first iterated logical expression kind. Iterated logical expression kinds are in the range [
FIRST_ITERATED_LOGICAL
,LAST_ITERATED_LOGICAL
].

EXISTS
= FIRST_ITERATED_LOGICAL¶ An \(\mathrm{exists}\) expression, \(\mathrm{exists}(l_1, ..., l_n)\), where \(l_i\) are logical expressions. It evaluates to true if at least one \(l_i\) is true.

FORALL
¶ A \(\mathrm{forall}\) expression, \(\mathrm{forall}(l_1, ..., l_n)\), where \(l_i\) are logical expressions. It evaluates to true if all \(l_i\) are true.

LAST_ITERATED_LOGICAL
= FORALL¶ The last iterated logical expression kind.

FIRST_PAIRWISE
¶ The first pairwise expression kind. Pairwise expression kinds are in the range [
FIRST_PAIRWISE
,LAST_PAIRWISE
].

ALLDIFF
= FIRST_PAIRWISE¶ An alldifferent expression, \(\mathrm{alldiff}(e_1, ..., e_n)\), where \(e_i\) are numeric expressions. It evaluates to true if all \(e_i\) take different values.

NOT_ALLDIFF
¶ The negation of an alldifferent expression, \(!\mathrm{alldiff}(e_1, ..., e_n)\).

LAST_PAIRWISE
= NOT_ALLDIFF¶ The last pairwise expression kind.

LAST_LOGICAL
= LAST_PAIRWISE¶ The last logical expression kind.

STRING
¶ A string such as “abc”.

IFSYM
¶ A symbolic ifthenelse expression. \(\mathrm{if}\;c\;\mathrm{then}\;e_1\;[\mathrm{else}\;e_2]\), where \(c\) is a logical expression representing condition, while \(e_1\) and \(e_2\) are numeric or string expressions. The expression evaluates to \(e_1\) if \(c\) is true and to \(e_2\) otherwise. If \(e_2\) is omitted, it is assumed to be zero.

LAST_EXPR
= IFSYM¶ The last expression kind.


const char *
mp::expr
::
str
(expr::Kind kind)¶ Returns the string representation of the given expression kind. Expressions of different kinds can have identical strings. For example,
POW
,POW_CONST_BASE
andPOW_CONST_EXP
all have the same representation “^”.

struct
ProblemInfo
¶ Information about an optimization problem.
Subclassed by mp::NLHeader
Public Functions

int
num_integer_vars
() const¶ Returns the number of integer variables (includes binary variable).

int
num_continuous_vars
() const¶ Returns the number of continuous variables.

int
num_common_exprs
() const¶ Returns the total number of common expressions.
Public Members

int
num_vars
¶ Total number of variables.

int
num_algebraic_cons
¶ Number of algebraic constraints including ranges and equality constraints.
It doesn’t include logical constraints.

int
num_objs
¶ Total number of objectives.

int
num_ranges
¶ Number of ranges (constraints with Infinity < LHS < RHS < Infinity).

int
num_eqns
¶ Number of equality constraints or 1 if unknown (AMPL prior to 19970627).

int
num_logical_cons
¶ Number of logical constraints.

int
num_nl_cons
¶ Total number of nonlinear constraints.

int
num_nl_objs
¶ Total number of nonlinear objectives.

int
num_compl_conds
¶ Total number of complementarity conditions.

int
num_nl_compl_conds
¶ Number of nonlinear complementarity conditions.

int
num_compl_dbl_ineqs
¶ Number of complementarities involving double inequalities.

int
num_compl_vars_with_nz_lb
¶ Number of complemented variables with a nonzero lower bound.

int
num_nl_net_cons
¶ Number of nonlinear network constraints.

int
num_linear_net_cons
¶ Number of linear network constraints.

int
num_nl_vars_in_cons
¶ Number of nonlinear variables in constraints including nonlinear variables in both constraints and objectives.

int
num_nl_vars_in_objs
¶ Number of nonlinear variables in objectives including nonlinear variables in both constraints and objectives.

int
num_nl_vars_in_both
¶ Number of nonlinear variables in both constraints and objectives.

int
num_linear_net_vars
¶ Number of linear network variables (arcs).

int
num_funcs
¶ Number of functions.

int
num_linear_binary_vars
¶ Number of linear binary variables.

int
num_linear_integer_vars
¶ Number of linear nonbinary integer variables.

int
num_nl_integer_vars_in_both
¶ Number of integer nonlinear variables in both constraints and objectives.

int
num_nl_integer_vars_in_cons
¶ Number of integer nonlinear variables just in constraints.

int
num_nl_integer_vars_in_objs
¶ Number of integer nonlinear variables just in objectives.

std::size_t
num_con_nonzeros
¶ Number of nonzeros in constraints’ Jacobian.

std::size_t
num_obj_nonzeros
¶ Number of nonzeros in all objective gradients.

int
max_con_name_len
¶ Length of longest constraint name if names are available.

int
max_var_name_len
¶ Length of longest variable name if names are available.

int
num_common_exprs_in_both
¶ Number of common expressions that appear both in constraints and objectives.

int
num_common_exprs_in_cons
¶ Number of common expressions that appear in multiple constraints and don’t appear in objectives.

int
num_common_exprs_in_objs
¶ Number of common expressions that appear in multiple objective and don’t appear in constraints.

int
num_common_exprs_in_single_cons
¶ Number of common expressions that only appear in a single constraint and don’t appear in objectives.

int
num_common_exprs_in_single_objs
¶ Number of common expressions that only appear in a single objective and don’t appear in constraints.

int