Releases: ERGO-Code/HiGHS
v1.8.1
Build changes
Added wheels for Python 3.13
Updated command line options and moved them out of the library and into the executable
Code changes
When primal infeasiblity is detected in presolve, no dual ray is available so, previously, the has_dual_ray
parameter of Highs::getDualRay
returned false and that was it. Now, if a null pointer is not passed for dual_ray_value
, Highs::getDualRay
will compute a dual ray - at the cost of solving the feasiblility LP without presolve. The same is now true for Highs::getPrimalRay
. Highs::getDualUnboundednessDirection
has been introduced to determine the product between the constraint matrix and the dual ray, forcing the calculation of the latter if necessary. Once a dual ray is known for the incumbent model in HiGHS, subsequent calls to Highs::getDualRay
and Highs::getDualUnboundednessDirection
will be vastly cheaper
The method Highs::getDualObjectiveValue
now exitsts to compute the dual objective value, returning HighsStatus::kError
if it is not possible.
The method Highs::getStandardFormLp
now exists to return the incumbent LP in standard form - overlooking any integrality or Hessian. To determine the sizes of the vectors of data, the method is called without specifying pointers to the data arrays.
Added documentation on the use of presolve when solving an incumbent model, and clarifying the use of the method Highs::presolve
.
HiGHS will now read a MIPLIB
solution file
Added time limit check to HPresolve::strengthenInequalities
Added getColIntegrality
to highspy
Now computing the primal-dual integral, reporting it, and making it available as HighsInfo::primal_dual_integral
Trivial primal heuristics "all zero", "all lower bound", "all upper bound", and "lock point" added to the MIP solver
v1.8.0
Code updates
We believe that the issue of HiGHS "hanging" when run on Windows with threads
not equal to 1 has been fixed!
Added int64_t mip_total_lp_iterations
to HighsCallbackDataOut
and modified accessor function
Highs::writeSolution
and Highs::writeBasis
now being done via HighsIO
logging, so can be redirected to logging callback.
Introduced const double kHighsUndefined
as value of undefined values in a user solution. It's equal to kHighsInf
Added Highs::setSolution(const HighsInt num_entries, const HighsInt* index, const double* value);
to allow a sparse primal solution to be defined. When a MIP is solved to do this, the value of (new) option mip_max_start_nodes
is used for mip_max_nodes
to avoid excessive cost
Added options write_presolved_model_to_file
and write_presolved_model_file
so that presolved model can be written via a command line option
Added Highs::feasibilityRelaxation
to solve the problem of minimizing a (possibly weighted) sum of (allowable) infeasibilities in an LP/MIP.
Added Python utility examples/plot_highs_log.py
(due to @Thell) to visualise progress of the MIP solver.
Added minimal documentation of solvers and how simplex variants can be run
Methods receiving matrix data where only small values are explicit zeros (so removed internally) are now silent and return HighsStatus::kOk
(since internal matrix is exact)
Now multiplying by pre-computed reciprocals rather than performing divisions in loops in simplex solver: LP performance improvement ~2.5%
Primal and dual residuals after IPM and cuPDLP-C are checked, and corrections applied to row solution and column duals
Highs::passModelName
added to allow name to be given to the incumbent model
Memory leaks in cuPDLP-C fixed
Bug fixed in MIP presolve
v1.7.2
Build changes
The python wrapper highspy is now available for aarch64 on manylinux
This allows highs to be run through Python on AWS arm64
Bug fix for fortran on macOS
Code changes
The accessor function Highs_getCallbackDataOutItem in the C API means
that pdlp_iteration_count
can be moved back to where it was inserted
into the HighsCallbackDataOut
struct in v1.7.0, which broke the C
API. This fixes #1812
Some duplicate code has been eliminated from the MIP solver, and
modifications made to eliminate compiler warnings
Declaration of the (deprecated) method char* highsCompilationDate()
has been corrected
Fixed bug when describing integrality status during the human-readable solution write
v1.7.1
Version 1.7.1 of HiGHS contains several updates
Build changes
HiGHS on nixpkgs
HiGHS now has a flake.nix
to build the binary, allowing nix
users to try it out.
Python build update
On PyPI, highspy is now available as v1.7.1, bringing the Python and C++ versions of HiGHS into line.
Windows versions
Fixed version info of shared library
Added version info to executable
Code changes
Inserting pdlp_iteration_count
into the struct HighsCallbackDataOut
(for v1.7.0) breaks the C API, so it has been moved to the end of the struct, and an accessor function Highs_getCallbackDataOutItem
has been added.
References to the compilation date have been removed from the build and code of HiGHS, so that binaries for the same version compiled on different days are identical. Methods to print compilation dates are deprecated.
setBasis
has been added to highspy
.
writePresolvedModel
has been added, allowing the presolved model to be exported as a file.
The saved MIP solution pool is now populated with the optimal solution when presolve reduces a MIP to empty.
There is now a logging message and error return when a user-supplied solution or basis is rejected due to the size of any vector being incompatible with the dimensions of the incumbent model.
Memory allocation errors in presolve are caught and Highs::run()
returns HighsStatus::kError
with model_status_ = HighsModelStatus::kMemoryLimit
.
QP solver logging is now neater and quieter.
Any Hessian for the incumbent model is modified with zero entries when adding columns to the model, and rows/columns are removed when columns are deleted from the model.
The has been a minor bug fix in the MIP presolve
QP solver will now hot start given a basis and solution
v1.7.0
Version 1.7.0 of HiGHS contains several new developments.
HiGHS now offers the exciting new first order LP solver (cuPDLP-c). Ours is currently only a serial CPU implementation, so performance isn't spectacular, but we aim to offer the GPU implementation in due course. To run PDLP, choose the option solver=pdlp. Note that there is currently no time-out available for PDLP, and the termination criteria for cuPDLP-c may mean that the HiGHS optimality conditions are not satisfied. See README.md .
The HiGHS interior point solver now allows analytic centre calculations to be performed. This is done by setting the HiGHS option run_centring to be true. Other new options allow the centring calculations to be controlled.
When Highs::run() is called, ranges of the matrix, costs, bounds and RHS are reported, together with advice on setting the new HiGHS options user_cost_scale and used_bound_scale if there are extreme values.
After solving an LP, the method Highs::getIllConditioning tries (in an approach similar to that used by Gurobi) to identify constraints or basic variables that contribute most to ill-conditioning of the basis matrix.
Logging from the interior point solver is now consistent with logging from the simplex and MIP solvers.
The Python interface has been updated, with several overlooked methods having been added
Considerable modifications and fixes have been added to the build system, in particular for Python. highspy is no longer built with meson, rather a combination of setuptools and cmake.
Bugs in the QP and MIP solvers have been fixed
Thanks are due to due to @fwesselm @feldmeier and @Coloquinte
v1.6.0
Added logging, improving solution and interrupt callbacks to C++ and C for a single user-defined callback method. Specifically
- New logging callback consistent with new callback method. Old logging callback is deprecated
- Callback when MIP logging takes place
- Callback when MIP solver finds an improving integer feasible solution
- Interrupt callbacks for simplex, interior point and MIP solvers
Added the use of the objective_target
option to terminate the MIP solver when an integer feasible solution at least as good as this value has been found.
Bug fixes