The Conic Optimization Solver
Predicates
A predicate asserts a fact about its subject. The OPTMODEL procedure accepts a set of predefined functions as constraints. Each of these functions can be specified by a predicate identifier in a constraint declaration. For more information about predicates, see the section Predicates in Chapter 12, The Constraint Programming Solver.
You can specify the following predicates for the conic solver:
Common Syntax Components
The following syntax components are used in multiple predicates. They depend on the definition of an identifier-expression. For more information, see the section Identifier Expressions in Chapter 9, The OPTMODEL Procedure.
SOC Predicate
SOC(variable-item, variable-list)
SOCONE(variable-item, variable-list)
Even though a second-order cone can be defined as a general constraint in its quadratic function format, it is more convenient to consider a second-order cone as a list of variables. Then use an SOC predicate in constraint declaration. For example, a second-order cone
can be defined as any one of the following predicates:
con soc1: soc(x[1], x[2] x[3] x[5]);
con soc2: soc(x[1], x[2] x[5] x[3]);
con soc3: soc(x[1], {i in 2..3} x[i] x[5]);
Any item in an SOC predicate can be a linear function. The SOC predicate
con soc4: soc(2*x[1]+3*x[2], (5*x[2]-1) 2);
defines a second-order cone:
RSOC Predicate
RSOC(variable-item1, variable-item2, variable-list)
RSOCONE(variable-item1, variable-item2, variable-list)
This predicate defines a rotated second-order cone. For example, the rotated second-order cone
can be defined as any one of the following predicates:
con rsoc1: rsoc(x[1], x[5], x[2] x[3]);
con rsoc2: rsoc(x[5], x[1], x[2] x[3]);
con rsoc3: rsoc(x[1], x[5], {i in 2..3} x[i]);
Any item in an RSOC predicate can be a linear function. The RSOC predicate
con rsoc4: rsoc(x[1], 1.0, (2*x[2]-1) (3*x[2]+5));
defines a rotated second-order cone: