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

Some objective values for Maros Mezaros and QPLIB instances are incorrect #6

Open
loehndorf opened this issue Dec 31, 2021 · 3 comments

Comments

@loehndorf
Copy link

I ran the Maros Mezaros instances and some QPLIB (those that did not return errors). What I observed is that many objective values do not match those that are reported elsewhere, for example PRIMALC2, DUALC2, BOYD2, PRIMAC5 (MM) and 8792, 8559, 8567 (QPLIB), ... These examples are completely off and not just a little, so it cannot be accuracy.

My suspicion is that there is a problem with the instance parsers, for two reasons: (1) MOSEK returns the same (incorrect) objective values, and (2) QPLIB returns error messages for some problems that upper bound values exceed lower bound values.

@goulart-paul
Copy link
Collaborator

I (dimly) recall that we had the same issue with optimal obective values not matching those reported elsewhere, but I can't recall whether the conclusion was that there was an issue with 1) disagreements about the problem data that should be used in the Maros problems or 2) possible errors in one or more places in the objectives reported in some sources.

I think @bstellato eventually resolved the matter - pinging him for an answer.

@loehndorf
Copy link
Author

Take a look at the log from Mittelmann's benchmarks for http://plato.asu.edu/ftp/qpbench_logs/MISC/BOYD2.osqp which gives a different result.

I also looked at the QPLIB problems and could parse and run some after adding a hack that enforces l<=u, which is another reason why I think that there's something going on with the parser.

@bstellato
Copy link
Contributor

Thanks for reporting this @loehndorf! There are a few things to comment on here:

  • @goulart-paul is right. We had an issue with the Maros parser a while ago. However, it was a minor mistake because we were not adding the objective value constant while reporting the final objective. See

    # Add constant part to objective value
    # NB. This is needed to match the objective in the original
    # Maros Meszaros paper
    obj = results.obj_val
    if results.obj_val is not None:
    obj += instance.qp_problem["r"]

  • Maros problems are very badly scaled and a minor change in termination tolerance can cause huge changes in the objective value. That's why you see that behavior in OSQP. We found that the most accurate solver for the objective value on these problems is Gurobi. Have you tried to use that instead of Mosek?

  • QPLIB parser might have some issues and we did not extensively test it. That's why in the OSQP paper (and in the README of this repo) we do not report such tests. There might be some fixes needed here.

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

No branches or pull requests

3 participants