-
Notifications
You must be signed in to change notification settings - Fork 94
Description
When the status is InfeasibilityCertificate
, the results should be the result of the homogenized version.
For instance, for the problem
min x
x <= -1
x >= 0
with dual
max -y
1 - y >= 0
y <= 0
or equivalently
max -y
1 - y - z = 0
y <= 0
z >= 0
The dual has an infeasibility ray y = -1
(with z = 1
). When asking for the constraint dual of x >= 0
, this the value of the constraint 1 - y >= 0
in the first case or to the value of z
in the second case.
In the first case, one could think it should be 1 - (-1) = 2
but it should be z = 1
in the second case.
The reason is that since it is a ray, it is a feasible solution to the problem with the constant terms removed (which is equivalent to setting the objective of the primal to zero).
By consistency, the when asking for ConstraintPrimal
when the primal status is InfeasibilityRay
, it should also not take the constant of the function into account.
Moreover, if the objective function has a constant, then it should not be included in the value of the objective value / objective bound for InfeasibilityRay
.
Indeed, the objective can be moved to a constrant by adding a new variable and then by consistency, it should not be included since it is in a constraint.
Currently, in MOI.Test
, we have tests with infeasibility rays in the dual and the values expected by the tests are the correct ones. The reason is that the MOI definition of the dual is the second case of the introduction example above.
However, we have not test with the objective of the dual nor with infeasibility ray in the primal and for these it is might be much more confusing.
What do you think ? Do you agree that the constants should be removed from the results of rays in ConstraintPrimal
and objective value/bound ?
If yes, we should:
- Add a section about this in the doc
- Thoroughly test it
- Test
ConstraintPrimal
ofVectorizeBridge
with aDUAL_INFEASIBLE
example with nonzero constant for a scalar constraint