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

[RFC] Translate empty column rule and reduction to apply! syntax #18

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

mtanneau
Copy link
Owner

This is mostly straightforward.

One open question: how should we handle unbounded columns with close-to-zero objective?
For instance: if a problem has an empty column with no lower bound and objective coeff of 1e-30, should we declare it dual infeasible?

Since empty columns are just empty rows in the dual, I would suggest to follow the same idea: we use a dual feasibility tolerance ϵ_d, and declare dual infeasibility if column j is empty, has no lower (resp. upper) bound and its objective is greater (resp. smaller) than ϵ_d (resp. -ϵ_d).

Obviously, using a "dual feasibility" tolerance for MIPs could raise some eyebrows.

@@ -458,7 +458,7 @@ function presolve!(ps::PresolveData{T}) where {T}
@_return_if_inferred remove_dominated_columns!(ps)
end

@_return_if_inferred remove_empty_columns!(ps)
@_return_if_inferred apply!(ps, RemoveEmptyColumns(), config) # Why this here??
Copy link
Owner Author

Choose a reason for hiding this comment

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

I have no idea why this was here in the first place

Copy link
Collaborator

@joehuchette joehuchette left a comment

Choose a reason for hiding this comment

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

Seems fine, I only have a (very) minor suggestion :)


## Presolve

If column $j$ is empty, variable $x_{j}$ is fixed to $x_{j}^{*}$ as follows
Copy link
Collaborator

Choose a reason for hiding this comment

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

Nit:

Suggested change
If column $j$ is empty, variable $x_{j}$ is fixed to $x_{j}^{*}$ as follows
If column $j$ is empty, variable $x_{j}$ is fixed to $x_{j}^{*}$ as follows:


If column $j$ is empty, variable $x_{j}$ is fixed to $x_{j}^{*}$ as follows

| $c_{j}$ | $l_{j}$ | $u_{j}$ | $x^{*}_{j}$ |
Copy link
Collaborator

Choose a reason for hiding this comment

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

This is all assuming minimization, correct?

Copy link
Owner Author

Choose a reason for hiding this comment

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

Correct. I'll mention it in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants