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:

SOC

specifies a second-order cone.

RSOC

specifies a rotated second-order cone.

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.

variable-item

is a single element of variable data. It can resolve to a variable, a linear expression, or a constant numeric value.

variable-list

is a space-separated list of variable-items. The values from the items are juxtaposed in a single list. If an item is a linear expression, it should be enclosed in parentheses.

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

x 1 squared greater than or equals x 2 squared plus x 3 squared plus x 5 squared comma x 1 greater than or equals 0

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:

StartLayout 1st Row 1st Column y 1 squared 2nd Column greater than or equals y 2 squared plus y 3 squared comma y 1 greater than or equals 0 2nd Row 1st Column y 1 2nd Column equals 2 x 1 plus 3 x 2 3rd Row 1st Column y 2 2nd Column equals 5 x 2 minus 1 4th Row 1st Column y 3 2nd Column equals 2 EndLayout

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

2 x 1 x 5 greater than or equals x 2 squared plus x 3 squared comma x 1 comma x 5 greater than or equals 0

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:

StartLayout 1st Row 1st Column 2 x 1 y 1 2nd Column greater than or equals y 2 squared plus y 3 squared comma x 1 comma y 1 greater than or equals 0 2nd Row 1st Column y 1 2nd Column equals 1.0 3rd Row 1st Column y 2 2nd Column equals 2 x 2 minus 1 4th Row 1st Column y 3 2nd Column equals 3 x 2 plus 5 EndLayout
Last updated: June 22, 2026