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

[docs] refactor and re-organize the documentation #574

Merged
merged 2 commits into from
Jan 19, 2024
Merged

Conversation

odow
Copy link
Member

@odow odow commented Jan 18, 2024

No description provided.

Comment on lines +18 to +19
global optimality of the resulting solution (if the solver succeeds. For some
models, the solver may experience numerical difficulty).
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 definitely better, but note both solutions said they were "OPTIMAL". I'm not really sure it's just a numeric issue as much as an algorithmic issue; e.g. https://optimization-online.org/wp-content/uploads/2018/07/6695.pdf shows SDPA-GMP failing on some SDP's with a duality gap. Although I've seen SDPA-GMP fail easily on many problems without sufficient presolve so maybe that is a factor there too.

Copy link

@araujoms araujoms Jan 18, 2024

Choose a reason for hiding this comment

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

Thanks for citing my blog! I second this comment: I had in fact a similar issue with MOSEK: the problem was not strictly feasible, and as expected MOSEK failed to solve it, but then falsely claimed that it was "OPTIMAL". I submitted a bug report to MOSEK but only managed to get insulted by the CEO.

Choose a reason for hiding this comment

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

As for the proof, there's a simpler argument: a matrix A is positive semidefinite iff A = B'*B for some matrix B. Now if A has a diagonal element equal to zero, then v'*A*v = 0 for some basis vector v. But v'*A*v = v'*B'*B*v = norm(B*v)^2, so B*v = 0, which implies B'*B*v = A*v = 0, so the entire column must be zero.

Copy link
Collaborator

Choose a reason for hiding this comment

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

ah, that is a nice argument. It may be worth adding that to your blog post, or at least noting that the entire column is zero (and therefore X13 = 0) rather than jumping to X13=0, since providing the intermediate step can help readers figure it out (or figure out what to look up).

Choose a reason for hiding this comment

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

Fair enough, I added it to the blog post (as a footnote).

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't want to derail this PR with a discussion, so I've added a TODO to #344. Once this PR is merged I'm happy to review other changes.

Copy link
Member Author

Choose a reason for hiding this comment

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

You could also argue that "if the solver succeeds" is true, and that solvers reporting OPTIMAL are a bug. That's their problem, not ours.

@odow odow merged commit c76d342 into master Jan 19, 2024
4 checks passed
@odow odow deleted the od/doc-refactor branch January 19, 2024 00:34
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.

3 participants