All Projects → ERGO-Code → Highs

ERGO-Code / Highs

Licence: mit
Linear optimization software

Projects that are alternatives of or similar to Highs

Transducers.jl
Efficient transducers for Julia
Stars: ✭ 226 (+111.21%)
Mutual labels:  parallel, high-performance
Floops.jl
Fast sequential, threaded, and distributed for-loops for Julia—fold for humans™
Stars: ✭ 96 (-10.28%)
Mutual labels:  parallel, high-performance
Threadsx.jl
Parallelized Base functions
Stars: ✭ 126 (+17.76%)
Mutual labels:  parallel, high-performance
FoldsCUDA.jl
Data-parallelism on CUDA using Transducers.jl and for loops (FLoops.jl)
Stars: ✭ 48 (-55.14%)
Mutual labels:  high-performance, parallel
hatrack
Fast, multi-reader, multi-writer, lockless data structures for parallel programming
Stars: ✭ 55 (-48.6%)
Mutual labels:  high-performance, parallel
MultiHttp
This is a high performance , very useful multi-curl tool written in php. 一个超级好用的并发CURL工具!!!(httpful,restful, concurrency)
Stars: ✭ 79 (-26.17%)
Mutual labels:  high-performance, parallel
Corium
Corium is a modern scripting language which combines simple, safe and efficient programming.
Stars: ✭ 18 (-83.18%)
Mutual labels:  high-performance, parallel
data-parallelism
juliafolds.github.io/data-parallelism/
Stars: ✭ 22 (-79.44%)
Mutual labels:  high-performance, parallel
Ignite Book Code Samples
All code samples, scripts and more in-depth examples for the book high performance in-memory computing with Apache Ignite. Please use the repository "the-apache-ignite-book" for Ignite version 2.6 or above.
Stars: ✭ 86 (-19.63%)
Mutual labels:  high-performance
Scroll
Scroll - making scrolling through buffers fun since 2016
Stars: ✭ 100 (-6.54%)
Mutual labels:  parallel
Blog
Java Performance
Stars: ✭ 83 (-22.43%)
Mutual labels:  high-performance
Ion
A fast, cross-platform micro web framework. A successor of Iris v8
Stars: ✭ 87 (-18.69%)
Mutual labels:  high-performance
Jupiter
Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
Stars: ✭ 1,372 (+1182.24%)
Mutual labels:  high-performance
Redrun
✨🐌 🐎✨ fastest npm scripts runner
Stars: ✭ 85 (-20.56%)
Mutual labels:  parallel
Parallel Process
🏃 Run multiple processes simultaneously
Stars: ✭ 102 (-4.67%)
Mutual labels:  parallel
Napajs
Napa.js: a multi-threaded JavaScript runtime
Stars: ✭ 8,945 (+8259.81%)
Mutual labels:  parallel
Root
The official repository for ROOT: analyzing, storing and visualizing big data, scientifically
Stars: ✭ 1,377 (+1186.92%)
Mutual labels:  parallel
Hacl Star
HACL*, a formally verified cryptographic library written in F*
Stars: ✭ 1,360 (+1171.03%)
Mutual labels:  high-performance
Smmalloc Csharp
Blazing fast memory allocator designed for video games meets .NET
Stars: ✭ 81 (-24.3%)
Mutual labels:  high-performance
Statsderl
High-Performance Erlang StatsD Client
Stars: ✭ 92 (-14.02%)
Mutual labels:  high-performance

HiGHS - Linear optimization software

Build Status

HiGHS is a high performance serial and parallel solver for large scale sparse linear programming (LP) problems of the form

Minimize c^Tx subject to L <= Ax <= U; l <= x <= u

It is written in C++ with OpenMP directives, and has been developed and tested on various linux and Windows installations using both the GNU (g++) and Intel (icc) C++ compilers. Note that HiGHS requires (at least) version 4.9 of the GNU compiler. It has no third-party dependencies.

HiGHS is based on the dual revised simplex method implemented in HSOL, which was originally written by Qi Huangfu. Features such as presolve, crash and advanced basis start have been added by Julian Hall, Ivet Galabova. Other features, and interfaces to C, C#, FORTRAN, Julia and Python, have been written by Michael Feldmeier.

Although HiGHS is freely available under the MIT license, we would be pleased to learn about users' experience and give advice via email sent to [email protected].

Reference

Parallelizing the dual revised simplex method Q. Huangfu and J. A. J. Hall Mathematical Programming Computation, 10 (1), 119-142, 2018. DOI: 10.1007/s12532-017-0130-5

http://www.maths.ed.ac.uk/hall/HuHa13/

Performance

The performance of HiGHS relative to some commercial and open-source simplex solvers may be assessed via the Mittelmann benchmarks on http://plato.asu.edu/ftp/lpsimp.html

Documentation

The rest of this file gives brief documentation for HiGHS. Comprehensive documentation is available from https://www.highs.dev.

Compilation

HiGHS uses CMake as build system. First setup a build folder and call CMake as follows

mkdir build
cd build
cmake ..

Then compile the code using

make

This installs the executable bin/highs. The minimum CMake version required is 3.15.

Testing

To perform a quick test whether the compilation was successful, run

ctest

Run-time options

In the following discussion, the name of the executable file generated is assumed to be highs.

HiGHS can read plain text MPS files and LP files and the following command solves the model in ml.mps

highs ml.mps

HiGHS options

Usage: highs [OPTION...] [file]

  --model_file arg       File of model to solve.
  --presolve arg         Presolve: "choose" by default - "on"/"off" are alternatives.
  --solver arg           Solver: "choose" by default - "simplex"/"ipm"/"mip" are alternatives.
  --parallel arg         Parallel solve: "choose" by default - "on"/"off" are alternatives.
  --time_limit arg       Run time limit (double).
  --options_file arg     File containing HiGHS options.

-h, --help Print help.

Language interfaces and further documentation

There are HiGHS interfaces for C, C#, FORTRAN, and Python in HiGHS/src/interfaces, with example driver files in HiGHS/examples. Documentation beyond what is in this file is "work in progress", but we expect to have some available before summer 2020. However, we are happy to give a reasonable level of support via email sent to [email protected].

Parallel code

Parallel dual simplex is available in HiGHS under Linux, but not on Windows or MacOS due to issues relating to OpenMP. This situation should improve when parallelism in HiGHS is handled via the native C++ instructions. However, performance gain with the simplex solver is unlikely to be significant. At best, speed-up is limited to the number of memory channels, rather than the number of cores.

In order to use OpenMP if available, set-DOPENMP=ON during the configuration step (cmake ..).

When compiled with the parallel option on, the number of threads used at run time is the value of the environment variable OMP_NUM_THREADS. For example, to use HiGHS with eight threads to solve ml.mps execute

export OMP_NUM_THREADS=8
highs --parallel ml.mps

If OMP_NUM_THREADS is not set, either because it has not been set or due to executing the command

unset OMP_NUM_THREADS

then all available threads will be used.

If run with OMP_NUM_THREADS=1, HiGHS is serial. The --parallel run-time option will cause HiGHS to use serial minor iterations and, although this could lead to better performance on some problems, performance will typically be diminished.

When compiled with the parallel option and OMP_NUM_THREADS>1 or unset, HiGHS will use multiple threads. If OMP_NUM_THREADS is unset, HiGHS will try to use all available threads so performance may be very slow. Although the best value will be problem and architecture dependent, OMP_NUM_THREADS=8 is typically a good choice. Although HiGHS is slower when run in parallel than in serial for some problems, it is typically faster in parallel.

HiGHS Library

HiGHS is compiled in a shared library. Running

make install

from the build folder installs the library in lib/, as well as all header files in include/. For a custom installation in install_folder run

cmake -DCMAKE_INSTALL_PREFIX=install_folder ..

and then

make install

To use the library from a CMake project use

find_package(HiGHS)

and add the correct path to HIGHS_DIR.

Compiling and linking without CMake

An executable defined in the file use_highs.cpp is linked with the HiGHS library as follows. After running the code above, compile and run with

g++ -o use_highs use_highs.cpp -I install_folder/include/ -L install_folder/lib/ -lhighs

LD_LIBRARY_PATH=install_folder/lib/ ./use_highs

Interfaces

GAMS

Set custom options with -D<option>=<value> during the configuration step (cmake ..):

  • GAMS_ROOT: path to GAMS system: enables building of GAMS interface

If build with GAMS interface, then HiGHS can be made available as solver in GAMS by adding an entry for HiGHS to the file gmscmpun.txt in the GAMS system folder (gmscmpnt.txt on Windows):

HIGHS 11 5 0001020304 1 0 2 LP RMIP
gmsgenus.run
gmsgenux.out
/path/to/libhighs.so his 1 1

Julia

Rust

  • HiGHS can be used from rust through the highs crate. The rust linear programming modeler good_lp supports HiGHS.

Javascript

HiGHS can be used from javascript directly inside a web browser thanks to highs-js. See the demo and the npm package.

OSI

  • OSI_ROOT: path to COIN-OR/Osi build/install folder (OSI_ROOT/lib/pkg-config/osi.pc should exist)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].