jump-dev / HiGHS.jl

A Julia interface to the HiGHS solver
https://highs.dev
MIT License
104 stars 14 forks source link

error() in optimize! #47

Closed mlubin closed 3 years ago

mlubin commented 3 years ago

I have an instance that triggers this code path:

https://github.com/ERGO-Code/HiGHS/blob/cfe064e60fdca9dc8008fd956fff04d7b562e210/src/simplex/HApp.h#L281-L286

This causes run() to return HighsStatus::Error:

https://github.com/ERGO-Code/HiGHS/blob/cfe064e60fdca9dc8008fd956fff04d7b562e210/src/simplex/HApp.h#L316-L322

In Julia, this triggers an error from optimize! that supersedes the regular status reporting mechanism:

https://github.com/jump-dev/HiGHS.jl/blob/7a059816e40fcab256f13a1f6c05224f6e0b573a/src/MOI_wrapper.jl#L1521-L1528

This could be an issue with HiGHS not providing enough clarity in status codes, but I'll start the discussion on the Julia side. If you look at highsStatusFromHighsModelStatus, the statuses that map to HighsStatus::Error are better covered by MOI statuses instead of throwing a Julia error. Somehow this particular case should end up begin reported as an MOI.OTHER_ERROR or MOI.NUMERICAL_ERROR.

The underlying numerical issue is also related to failing to clean up unscaled infeasibilities (like #46). Here's the solve log with some level of verbose output: https://pastebin.com/bjBTAFg1

@jajhall

odow commented 3 years ago

I think I just made this an error for initial simplicity. HiGHS could return more information via the C API, but the MOI wrapper should also not throw an error like this.