HiGHS optimization solver: Difference between revisions

Content deleted Content added
Mixed integer programming: Added a link to the branch and cut method
Tags: Mobile edit Mobile web edit
 
(20 intermediate revisions by 6 users not shown)
Line 3:
{{use British English|date=March 2022}}
{{use dmy dates|date=March 2022}}
 
{{infobox software
| title = HiGHS
| repo = {{url|https://github.com/ERGO-Code/HiGHS}}
| website = {{url|https://ergo-code.github.io/HiGHS}}
| programming language = [[C++]]
| license = [[MIT License|MIT]]
| genre = Optimization solver suite
| latest_release_version = 1.5.3
}}
 
{{infobox organization
Line 32 ⟶ 22:
* Ivet Galabova
}}
| num_staff = 36
| budget =
| website = {{url|https://www.highs.dev}}
}}
 
{{infobox software
| title = HiGHS
| repo = {{url|https://github.com/ERGO-Code/HiGHS}}
| website = {{url|https://ergo-code.github.io/HiGHS}}
| programming language = [[C++]]
| license = [[MIT License|MIT]]
| genre = Optimization solver suite
| latest_release_version = 1.510.30
}}
 
'''HiGHS''' is open-source software to solve [[linear programming]] (LP), [[Integer programming|mixed-integer programming]] (MIP), and convex [[quadratic programming]] (QP) models.<ref name="hall-2020"/>
 
Written in [[C++]] and published under an [[MIT License|MIT]] license, HiGHS provides programming interfaces to [[C (programming language)|C]], [[Python (programming language)|Python]], [[Julia (programming language)|Julia]], [[Rust (programming language)|Rust]], [[R (programming language)|R]], [[JavaScript]], [[Fortran]], and [[C Sharp (programming language)|C#]]. It has no external dependencies. A{{nbsp}}convenient thin wrapper to Python is available via the {{url|https://pypi.org/project/highspy/|highspy}} [[Python Package Index|PyPI]] package. HiGHS is also callable via [[NuGet]].<ref name="nuget-repo">
{{cite web
| title = Highs.Native
| url = https://nuget.org/packages/Highs.Native/
| access-date = 2025-05-13
}}
</ref>
 
Although generally single-threaded, some solver components can utilize multi-core architectures and, from {{URL|https://github.com/ERGO-Code/HiGHS/releases/tag/v1.10.0|Version 1.10.0}}, can run its first order LP solver on NVIDIA GPUs. HiGHS is designed to solve large-scale models and exploits [[sparse matrix|problem sparsity]]. Its performance relative to commercial and other open-source software is reviewed periodically using industry-standard [[Benchmark (computing)|benchmarks]].<ref name="mittelmann-benchmarks"/>
 
The term '''HiGHS''' may also refer to both the underlying project and the small team leading the software development.
Line 47 ⟶ 53:
== History ==
 
HiGHS is based on solvers written by PhD students from the Optimization and Operational Research Group{{nnbsp}}<ref name="uoe-som-oor"/> in the School of Mathematics at the [[University of Edinburgh]]. Its origins can be traced back to late 2016, when Ivet Galabova combined her LP presolve with Julian Hall's simplex crash procedure and Huangfu Qi's dual simplex solver to solve a class of industrial LP problems faster than the best open-source solvers at that time.<ref Since then, a C++name="galabova-2022">
{{nbsp}}[[applicationcite programming interfacethesis
|API]] andlast1 other= languageGalabova interfaces have been developed, and modelling utilities and other categories of solver| havefirst1 been= added.Ivet
| title = Presolve, crash and software engineering for HiGHS
| type = PhD
| date = 2022
| publisher = The University of Edinburgh
| ___location = Edinburgh, United Kingdom
| url = https://era.ed.ac.uk/bitstream/handle/1842/39725/GalabovaI_2022.pdf
| access-date = 2025-05-13
}}
</ref> Since then, a C++{{nbsp}}[[application programming interface|API]] and other language interfaces have been developed, and modelling utilities and other categories of solver have been added.
 
In early{{nbhyph}}2022, the [[open energy system models#GenX|GenX]] and [[open energy system models#PyPSA|PyPSA]] open energy system modelling projects endorsed a funding application for the HiGHS solver in an effort to reduce their [[Open Energy Modelling Initiative|community]] reliance on proprietary libraries.<ref name="parzen-etal-2022"/> That appeal resulted in {{valcurrency|amount=76000|pcode=CAD|fmt=CAN$gaps}} in funding from Invenia Labs, Cambridge, United Kingdom in July{{nbsp}}2022.<ref name="invenia-donation"/>
 
== Solvers ==
Line 63 ⟶ 80:
=== Mixed integer programming ===
 
HiGHS has a [[branch and cut|branch-and-cut]] solver for MIP problems. Its performance relative to commercial and other open-source software is regularly reported using industry-standard benchmarks.<ref name="mittelmann-mip"/>
 
=== Quadratic programming ===
Line 75 ⟶ 92:
=== Numerical computing support ===
 
As powerful open{{nbhyph}}source software under active development, HiGHS is increasingly being adopted by [[application software]] projects that provide support for [[numerical analysis]]. The [[SciPy]] scientific library, for instance, uses HiGHS as its LP solver{{nnbsp}}<ref name="scipy-linprog"/> from release{{nbsp}}1.6.0{{nnbsp}}<ref name="scipy-1.6.0-lp"/> and the HiGHS MIP solver for [[discrete optimization]] from release{{nbsp}}1.9.0.<ref name="scipy-1.9.0-mip"/> As well as offering an interface to HiGHS, the [[JuMP]] modelling language for [[Julia (programming language)|Julia]]{{nnbsp}}<ref name="jump-home"/> also describes the specific use of HiGHS in its user documentation.<ref name="jump-models"/> The MIP solver in the [[NAG_Numerical_Library|NAG]] library is based on HiGHS{{nnbsp}},<ref name="nag-h02bkf"/> and HiGHS is the default LP and MIP solver in the {{nbsp}}[[MathWorks]] Optimization Toolbox{{nnbsp}}.<ref name="mathworks-R2024a"/>
 
=== Open energy system models ===
Line 222 ⟶ 239:
</ref>
 
<ref name="mittelmann-simplex">{{cite web
{{cite web
| title = Benchmark of Simplex LP solvers
| date = March 2022
Line 229 ⟶ 245:
| url = http://plato.asu.edu/ftp/lpsimp.html
| access-date = 2022-03-31
| archive-date = 11 November 2021
}}
| archive-url = https://web.archive.org/web/20211111222213/http://plato.asu.edu/ftp/lpsimp.html
</ref>
| url-status = dead
}}</ref>
 
<ref name="mittelmann-barrier">
Line 310 ⟶ 328:
| url = https://scipy.github.io/devdocs/release.1.9.0.html#highlights-of-this-release
| access-date = 2022-05-05
}}
</ref>
 
<ref name="nag-h02bkf">
{{cite web
| title = NAG Library Manual, Mark 29.3
| date = January 2024
| website = NAG Optimization Modelling Suite
| url = https://support.nag.com/numeric/nl/nagdoc_latest/flhtml/h/h02bkf.html
| access-date = 2024-03-25
}}
</ref>
 
<ref name="mathworks-R2024a">
{{cite web
| title = Optimization Toolbox Release Notes
| date = March 2024
| website = Mathworks Optimization Toolbox
| url = https://www.mathworks.com/help/optim/release-notes.html
| access-date = 2024-03-22
}}
</ref>
Line 358 ⟶ 396:
[[Category:Free and open-source software]]
[[Category:Optimization algorithms and methods]]
[[Category:Mathematical optimization software]]
[[Category:Software using the MIT license]]
[[Category:Free software programmed in C++]]