[ library(eplex) | Reference Manual | Alphabetic Index ]
# lp_verify_solution(+Handle, -ViolatedCstrs, -ViolatedVars)

Verifies the current solution for the problem associated with Handle.
*Handle*
- Handle to a solver state
*ViolatedCstrs*
- List of violated Constraints.
*ViolatedVars*
- List of violated variables.

## Description

This predicate checks the current solution for the problem associated with
Handle. It verifies that all the constraints are satisfied by the
solution values for the problem variables, and that the solution values do
not violate their bounds, and the values are integral for integer variables.
Violated Constraints are returned in ViolatedCstrs, and violated variables in
ViolatedVars.

Under normal circumstances, if the external solver produces a solution, it
should produce no violations. Any violation probably indicates a problem
with the external solver. However, because the external solver is a complex
piece of software and may contain problems, it is a good idea to verify the
solution, and this predicate provides an easy way to do this.

Each violation is returned as a structure of the following form:

vio(type,delta,idx,item)

where
- type:
- the type of violation:
- norm:
- the violated item is a normal constraint.
- condcp:
- the violated item is an active cutpool constraint.
- int:
- the violated item is an integer variable whose
solution value is not integral.
- lower:
- the violated item is a variable whose solution value
is less than the lower bound.
- upper:
- the violated item is a variable whose solution value
is greater than the upper bound.

- delta:
- the absolute value of the violation.
- idx:
- the index used by the external solver for the item (most
likely the row/column number in the problem matrix). This
is needed to locate the violation in the solver for reporting
or investigating the problem.
- item:
- the violated item, i.e. the constraint or variable.

For checking of constraints, a fresh copy of the constraint is made with
the solution values, as this avoids binding the original variables. Any active
cutpool constraints in the (logically) last solve of the problem are checked,
along with the normal constraints. A constraint is considered to be violated
if the difference between the sum of the left-hand side and the right-hand side
for the constraint is greater than the feasibility tolerance (feasibility_tol)
parameter for the instance. For variables, a bound is considered violated if
the solution value falls outside the bound by more than feasibility tolerance,
and integrality is considered to be violated if the fractional part of the
soltuion is greater than the integrality parameter for the instance.

### Fail Conditions

no solution values are available.