Requires the Optimizer edition'.'

New to Analytica 5.0

ComparisonPart( c, item, n )

A Constraint node specifies a inequality or equality relationships that are used by solver engines when solving an optimization. These display as evaluated comparisons in the result table of a constraint node. For example, in a constraint defined as

x < y

The result view shows 10 < 20, rather than just 1 (for true), which can be helpful when debugging or when trying to understand the impact of proposed solutions. These values are called comparison terms. The ComparisonPart function gives you access to the separate components of these, such as the value on the left-hand side or right-hand side, or the type of comparison.

ComparisonPart can be useful in the Cell Format Expression attribute of a constraint node to color code constraint violations.



The «c» parameter takes a comparison value. This will typically need to be the identifier of a constraint node, although you can use Subscript or Slice operations, as well as any other Analytica expression logic, to extract a particular comparison. The result of a constraint node is really the only place you'll gain access to a comparison term, since these comparison terms are normally only maintained for the final results of a constraint node, It would not work to evaluate ComparisonPart( x<y, 'Slack') because the result of evaluating an inequality is simply a Boolean value.

If you pass anything other than a comparison term to «c», the result is Null.


The information requested, with the possible values of «item» being:

  • 'LHS': The left-hand side value.
  • 'RHS': The right-hand side value.
  • 'Sense': The type of comparison, which will be one of '<', '>' or '='.
  • 'Slack': For a constraint that is strictly satisfied, this is the amount that one side could change before the constraint is strictly violated as is a positive number. For a constraint that is strictly violated (even by a miniscule amount), this is a negative number, where the magnitude reveals by how far the constraint is violated.
  • 'Violated': A Boolean equal to 1 if the constraint is satisfied, or within Sys_ConstraintTolerance of being satisfied. This is equivalent the ComparisonPart(c,'Slack')>=-Sys_ConstraintTolerance.
  • 'N': The number of cascaded-comparison stages. For example, 0.0 < 0.5 < 1.0 has two stages.


Optional. For a cascaded comparison, use «n» to specify which stage you want information for. When requesting 'Slack' or 'Violated', the return value applies to that stage only when «n» is specified, or to the constraint as a whole when «n» is omitted.


Constraint Ct1 := w < x < y < z

This evaluates to: 10 < 20.0000001 < 20 < 50


ComparisonPart(Ct1, 'N') → 3
ComparisonPart( Ct1, 'LHS' ) → 10
ComparisonPart( Ct1, 'LHS',1 ) → 10
ComparisonPart( Ct1, 'RHS' ) → 20.0000001
ComparisonPart( Ct1, 'RHS' ,1) → 20.0000001
ComparisonPart( Ct1, 'Sense' ) → '<'
ComparisonPart( Ct1, 'LHS',2 ) → 20.0000001
ComparisonPart( Ct1, 'LHS',4 ) → 50
ComparisonPart( Ct1, 'Slack' ) → -0.0000001
ComparisonPart( Ct1, 'Violated' ) → 0 { When Sys_ComparisonTolerance = 1e-6 }
ComparisonPart( Ct1, 'Slack',3 ) → 30

To color code violated constraints in the result table of a constraint node, you can set the Cell Format Expression attribute to

If ComparisonPart(Self,'Violated') Then CellFill('Red')


If ComparisonPart(Self,'Violated') Then CellFont(color:'Red')

You could depict the amount of slack or violation as

CellBar(ComparisonPart(Self, 'Slack'))

See Also


You are not allowed to post comments.