Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add comprehensive tests for Farkas certificates #1190

Merged
merged 2 commits into from
Nov 27, 2020
Merged

Add comprehensive tests for Farkas certificates #1190

merged 2 commits into from
Nov 27, 2020

Conversation

odow
Copy link
Member

@odow odow commented Nov 5, 2020

Copy link
Member

@blegat blegat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this closes #433 ?

@odow
Copy link
Member Author

odow commented Nov 12, 2020

I think it resolves the general issue and adds tests. I'm pretty happy with the convention of removing objective constants.

I don't understand the question about constants in ConstraintPrimal or ObjectiveValue.

@blegat
Copy link
Member

blegat commented Nov 14, 2020

This is for unbounded rays, in that case, the equivalent of "removing objective coefficients" is "remove constraints constants".

@odow
Copy link
Member Author

odow commented Nov 16, 2020

Does it make sense to query ConstraintPrimal and ObjectiveValue for a ray though? Isn't it really just VariablePrimal?

@blegat
Copy link
Member

blegat commented Nov 16, 2020

Can't you query DualObjectiveValue for infeasibility ray ? I need it to create infeasibility cut in SDDP. There is a get_fallback for ObjectiveValue and ConstraintPrimal if the solver does not provide that.

@odow
Copy link
Member Author

odow commented Nov 26, 2020

Ah. DualObjectiveValue is a reasonable thing to query. I guess the decision is whether to query the "beta" term here, or whether to query the complete RHS.

image

@blegat
Copy link
Member

blegat commented Nov 26, 2020

If you have the problem
c1: x + y = 1
c2: x >= 1
c3: y >= 1
The dual is
max y1 + y2 + y3
y1 + y2 == 0
y1 + y3 == 0
y2, y3 >= 0
You are wondering whether we should include y2 + y3 in the objective ?
An infeasibility ray is y = (-1, 1, 1). If we only include y1, we have -1 and with the full objective, we have 1. The correct answer is 1 IMO

@odow
Copy link
Member Author

odow commented Nov 26, 2020

Yes, the DualObjectiveValue should be 1.

Let's merge this for now. It adds tests that the solvers already support. I'll need to go through and fix DualObjectiveValue in the solvers before we can add tests in MOI, so that can be done in a separate PR.

@odow odow merged commit c424201 into master Nov 27, 2020
@odow odow deleted the od/farkas branch November 27, 2020 03:14
@blegat blegat added this to the v0.9.19 milestone Dec 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants