Skip to content

Commit 08b58ed

Browse files
committed
Merge latest
2 parents 8428b64 + 2be4905 commit 08b58ed

36 files changed

+522
-322
lines changed

.github/workflows/hipo-macos.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ jobs:
8181
run: |
8282
ctest --parallel --timeout 300 --output-on-failure
8383
84-
macos_510:
84+
macos_510-ts:
8585
runs-on: macos-latest
8686
strategy:
8787
fail-fast: false
@@ -96,7 +96,7 @@ jobs:
9696
uses: actions/checkout@v4
9797
with:
9898
repository: galabovaa/METIS
99-
ref: 510-w
99+
ref: 510-ts
100100
path: METIS
101101

102102
- name: Create installs dir
@@ -150,7 +150,7 @@ jobs:
150150
run: |
151151
ctest --parallel --timeout 300 --output-on-failure
152152
153-
macos_ts:
153+
macos_521-ts:
154154
runs-on: macos-latest
155155
strategy:
156156
fail-fast: false
@@ -165,7 +165,7 @@ jobs:
165165
uses: actions/checkout@v4
166166
with:
167167
repository: galabovaa/METIS
168-
ref: 510-ts
168+
ref: 521-ts
169169
path: METIS
170170

171171
- name: Create installs dir

.github/workflows/hipo-ubuntu.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ jobs:
105105
run: |
106106
ctest --parallel --timeout 300 --output-on-failure
107107
108-
ubuntu_510:
108+
ubuntu_510-ts:
109109
runs-on: ubuntu-latest
110110
strategy:
111111
fail-fast: false
@@ -120,7 +120,7 @@ jobs:
120120
uses: actions/checkout@v4
121121
with:
122122
repository: galabovaa/METIS
123-
ref: 510-w
123+
ref: 510-ts
124124
path: METIS
125125

126126
- name: Create installs dir
@@ -181,7 +181,7 @@ jobs:
181181
run: |
182182
ctest --parallel --timeout 300 --output-on-failure
183183
184-
ubuntu_510-ts:
184+
ubuntu_521-ts:
185185
runs-on: ubuntu-latest
186186
strategy:
187187
fail-fast: false
@@ -196,7 +196,7 @@ jobs:
196196
uses: actions/checkout@v4
197197
with:
198198
repository: galabovaa/METIS
199-
ref: 510-ts
199+
ref: 521-ts
200200
path: METIS
201201

202202
- name: Create installs dir

.github/workflows/hipo-win.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
run: |
6666
ctest --parallel --timeout 300 --output-on-failure -C ${{ matrix.config }}
6767
68-
win-510:
68+
win-510-ts:
6969
runs-on: windows-latest
7070
strategy:
7171
fail-fast: false
@@ -80,7 +80,7 @@ jobs:
8080
uses: actions/checkout@v4
8181
with:
8282
repository: galabovaa/METIS
83-
ref: 510-w
83+
ref: 510-ts
8484
path: METIS
8585

8686
- name: Create installs dir
@@ -136,7 +136,7 @@ jobs:
136136
run: |
137137
ctest --parallel --timeout 300 --output-on-failure -C ${{ matrix.config }}
138138
139-
win-510-ts:
139+
win-521-ts:
140140
runs-on: windows-latest
141141
strategy:
142142
fail-fast: false
@@ -151,7 +151,7 @@ jobs:
151151
uses: actions/checkout@v4
152152
with:
153153
repository: galabovaa/METIS
154-
ref: 510-ts
154+
ref: 521-ts
155155
path: METIS
156156

157157
- name: Create installs dir

.github/workflows/valgrind-hipo-md.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
uses: actions/checkout@v4
1717
with:
1818
repository: galabovaa/METIS
19-
ref: 510-ts
19+
ref: 521-ts
2020
path: METIS
2121

2222
- name: Create installs dir
@@ -109,7 +109,7 @@ jobs:
109109
uses: actions/checkout@v4
110110
with:
111111
repository: galabovaa/METIS
112-
ref: 510-ts
112+
ref: 521-ts
113113
path: METIS
114114

115115
- name: Create installs dir
@@ -207,7 +207,7 @@ jobs:
207207
uses: actions/checkout@v4
208208
with:
209209
repository: galabovaa/METIS
210-
ref: 510-ts
210+
ref: 521-ts
211211
path: METIS
212212

213213
- name: Create installs dir

.github/workflows/valgrind-hipo.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
uses: actions/checkout@v4
1717
with:
1818
repository: galabovaa/METIS
19-
ref: 510-ts
19+
ref: 521-ts
2020
path: METIS
2121

2222
- name: Create installs dir
@@ -108,7 +108,7 @@ jobs:
108108
uses: actions/checkout@v4
109109
with:
110110
repository: galabovaa/METIS
111-
ref: 510-ts
111+
ref: 521-ts
112112
path: METIS
113113

114114
- name: Create installs dir
@@ -205,7 +205,7 @@ jobs:
205205
uses: actions/checkout@v4
206206
with:
207207
repository: galabovaa/METIS
208-
ref: 510-ts
208+
ref: 521-ts
209209
path: METIS
210210

211211
- name: Create installs dir

FEATURES.md

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,13 @@
11
## Code changes
22

3-
HiPO is out! Our new factorisation-based interior point solver, developed by Filippo Zanetti, is officially integrated in HiGHS! HiPO is multi-threaded and will improve the performance on many large instances. Metis and BLAS are required for HiPO. In this version, HiPO will be available when HiGHS is built from source with CMake. It can be accessed from C++, C and will also be available when HiGHS is called from JuMP. In a future release, HiPO will be available from Python, C# and more.
3+
The HiPO release exposed various issues flagged up via GitHub and email.
4+
- Fix some overflows when computing statistics of analyse phase.
5+
- Free memory used for normal equations, if augmented system is preferred.
6+
- Fix bug in supernode amalgamation.
7+
- Printing of BLAS library moved to HiGHS header, so it is printed when using HiPO without logging.
8+
- Recommend to install Metis branch `521-ts` due to better oredring quality on many problems. Update workflows and documentation accordingly.
9+
- Add option `hipo_metis_no2hop` to control option `no2hop` of Metis and add warning if the fill-in is large.
410

5-
Forcing column reduction now checks the bound on the column dual rather than whether the dual row activity is zero fixing [#2409](https://github.com/ERGO-Code/HiGHS/issues/2409)
6-
7-
Now handling correctly the case where an infeasible MIP has a feasible relaxation, so no ray is computed fixing [#2415](https://github.com/ERGO-Code/HiGHS/issues/2415)
8-
9-
Fixed minor bug exposed by [#2441](https://github.com/ERGO-Code/HiGHS/issues/2441) in `Highs::setSolution()` for a sparse user solution when the moidel is empty, and only clearing the dual data before solving with modified objective in `Highs::multiobjectiveSolve()` so that user-supplied solution is not cleared.
10-
11-
The irreducible infeasibility system (IIS) facility now detects infeasibility due to bounds on constraint activity values (implied by variable bounds) being incompatible with constraint bounds. A `kIisStrategyLight mode` for the `iis_strategy` option has been introduced so that only infeasibility due to incompatible variable/constraint bounds and constraint activity values is checked for. The LP corresponding to any known IIS is now formed and held as a data member of the `HighsIis` class. It can be obtained as a const reference using `Highs::getIisLp()`, and written to a file using `Highs::writeIisModel(const std::string& filename = "")`
12-
13-
Prompted by [#2463](https://github.com/ERGO-Code/HiGHS/issues/2463), the HiGHS solution and basis files now match data to any column and row names in the model, only assuming that the data are aligned with column and row indices if there are no names in the model. This requires a new version (v2) of the HiGHS basis file. Basis files from v1 are still read, but deprecated. Now, when writing out a model, basis or solution, column and row names are added to the model - previously they were created temporarily and inconsistentyly on the fly. If the model has existing names, then distinctive names are created to replace any blank names, but names with spaces or duplicate names yield an error status return.
14-
15-
Refactored strong branching to minimize duplicated code
16-
17-
Only for LPs is there a choice of solver. Previously, when setting the `solver` option to anything other than "choose", any incumbent model was solved as an LP, using that LP solver. This has caused confusiuon for users, and is unnecessary now that there is the `solve_relaxation` option. Now, if the incumbent model is a QP or MIP, it is solved as such (unless `solve_relaxation` is true for a MIP), and the value of the `solver` option only determines what solver is used to solve an LP. If the value of `solver` is "choose", then HiGHS will use what it expects to be the best solver for the problem; if value of `solver` is "ipm", then HiGHS will use what it expects to be the better IPM solver (of HiPO and IPX) for the problem; if value of `solver` is "hipo", then HiGHS will use the HiPO IPM solver (if available in the build); if value of `solver` is "ipx", then HiGHS will use the IPX IPM solver; if value of `solver` is "pdlp", then HiGHS will use the PDLP first-order solver. The option `mip_lp_solver` has been introduced to define which LP solver is used when solving LPs in the MIP solver for which an advanced basis is not known - typically the "root node" LP. Note that The PDLP solver cannot be used to solve such LPs, since it does not yield a basic solution. If an interior point solver fails to obtain a basic solution, the simplex solver will then be used. The option `mip_ipm_solver` has been introduced to define which IPM solver is used when solving LPs in the MIP solver for which IPM is mandatory - typically the analytic centre calculation. When LPs are to be solved by an IPM solver, the HiPO solver is used (if available in the build) unless IPX has been specified explicitly.
18-
19-
As per [#2487](https://github.com/ERGO-Code/HiGHS/issues/2487), trivial heuristics now run before feasibility jump (FJ), and FJ will use any existing incumbent. FJ will clip any finite variable values in the incumbent to lower and upper bounds, and falls back to the existing logic (lower bound if finite, else upper bound if finite, else 0) for any infinite values in the incumbent.
20-
21-
Prompted by [#2460](https://github.com/ERGO-Code/HiGHS/issues/2460), the options `user_objective_scale` and `user_bound_scale` apply uniform (power-of-two) scaling to the objective and bounds of a model, and now respect the following restrictions
22-
- For a MIP, column bounds cannot be scaled, so the scaling is achieved by scaling the cost and constraint matrix column
23-
- For a QP, Hessian entries must be scaled down (up) when bounds are scaled up (down) so that all terms in the objective are scaled by a constant.
24-
25-
Formerly the options `user_cost_scale` and `user_bound_scale` allowed uniform (power-of-two) scaling to the costs and bounds of an LP. The option `user_cost_scale` is now replaced by `user_objective_scale`.
26-
27-
After HiGHS determines and logs the coefficient ranges and warns about extreme values, it recommends values of `user_objective_scale` and `user_bound_scale` if
28-
- All the objective coefficients (bound values) are smaller than the "excessively small constant" `kExcessivelySmallObjectiveCoefficient` (`kExcessivelySmallBoundValue`) - both of which are 1e-4 - suggesting that they are scaled up so that the largest value becomes (just over) the excessively small constant. Since the smallest value can be arbitrarily small, scaling so that this becomes (just over) the small constant is inadvisable, as the largest value could then be scaled up to an extremely large value.
29-
- All the objective coefficients (bound values) are larger than the "excessively large constant" `kExcessivelyLargeObjectiveCoefficient` (`kExcessivelyLargeBoundValue`) - both of which are 1e6 - suggesting that they are scaled down so that the largest value becomes (just over) the excessively large constant.
30-
31-
The recommended objective scaling is determined with respect to the recommended bound scaling
32-
Users can obtain the recommended values of `user_objective_scale` and `user_bound_scale` by calling `Highs::getObjectiveBoundScaling`
33-
34-
The irreducible infeasibility system (IIS) facility now detects infeasibility due to bounds on constraint activity values being incompatible with constraint bounds. A `kIisStrategyLight` mode for the `iis_strategy` option has been introduced so that only infeasibility due to incompatible variable/constraint bounds and constraint activity values is checked for. The model corresponding to any known IIS is now formed and held as a data member of the `HighsIis` class. The `HighsIis` class is available via `highspy`, and its data members are available via the C API.
35-
36-
Prompted by [#2463](https://github.com/ERGO-Code/HiGHS/issues/2463), when HiGHS writes out a solution or basis for a model without column or row names, it creates names. This avoids a mis-match between the ordering of variables when such a model is written out as a .lp file, and then this and a solution or a basis is read in.
37-
38-
Prompted by [#2528](https://github.com/ERGO-Code/HiGHS/issues/2528), the logging for the HiGHS interior point method (IPM) solvers and PDLP solver has been standardised, and logging has been added to the IPM solver during time-consuming computational phases.
39-
40-
Prompted by [#2557](https://github.com/ERGO-Code/HiGHS/issues/2557), `Highs::getFixedLp` has been added so that, after solving a MIP, the LP with discrete variables fixed at their optimal values can be formed, allowing it to be passed to HiGHS and solved as an LP.
41-
42-
Prompted by [#2581](https://github.com/ERGO-Code/HiGHS/issues/2581), the QP example in `call_highs_from_csharp.cs` has been corrected
43-
44-
Prompted by [#2582](https://github.com/ERGO-Code/HiGHS/issues/2582), the C API constants are declared `static const` to prevent multiple definition linker errors
11+
Added singleton column stuffing to MIP presolve - see Gamrath et al., Progress in presolving for mixed integer programming. Math. Prog. Comp. 7, 367–398 (2015).
4512

4613
## Build changes
47-
48-
The Bazel build now supports building with Cuda with an optional parameter `cupdlp_gpu`.

app/HighsRuntimeOptions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ void setupCommandLineOptions(CLI::App& app,
103103
"Set solver option to:\n"
104104
"\"choose\" * default\n"
105105
"\"simplex\"\n"
106+
#ifdef HIPO
106107
"\"hipo\"\n"
108+
#endif
107109
"\"ipm\"");
108110

109111
app.add_option("--" + kParallelString, cmd_options.cmd_parallel,

cmake/FindHipoDeps.cmake

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,22 @@ else()
176176
if (metis_FOUND)
177177
message(STATUS "metis CMake config path: ${metis_DIR}")
178178
else()
179-
message(FATAL_ERROR "No Metis library found")
179+
# METIS_ROOT was not successful and there is no cmake config
180+
find_path(METIS_PATH
181+
NAMES "metis.h"
182+
REQUIRED)
183+
184+
message(STATUS "Found Metis header at ${METIS_PATH}")
185+
186+
find_library(METIS_LIB
187+
NAMES metis libmetis
188+
REQUIRED)
189+
190+
if(METIS_LIB)
191+
message(STATUS "Found Metis library at ${METIS_LIB}")
192+
else()
193+
message(FATAL_ERROR "No Metis library found")
194+
endif()
180195
endif()
181196
endif()
182197
endif()
@@ -225,14 +240,7 @@ if (NOT (GKLIB_ROOT STREQUAL ""))
225240
message(STATUS "Found GKlib library at ${GKLIB_LIB}")
226241
else()
227242
# GKLIB_ROOT was not successful
228-
message(STATUS "GKlib not found in GKLIB_PATH, fallback to default search.")
229-
find_package(GKlib CONFIG)
230-
231-
if (GKlib_FOUND)
232-
message(STATUS "GKlib CMake config path: ${GKlib_DIR}")
233-
else()
234-
message(FATAL_ERROR "No GKLib library found")
235-
endif()
243+
message(FATAL_ERROR "No GKlib library found at ${GKLIB_ROOT}")
236244
endif()
237245
endif()
238246
endif()

docs/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Documentation
2+
3+
This directory contains the source files for the [documentation](https://ergo-code.github.io/HiGHS).
4+
5+
## Editing the documentation
6+
7+
To edit the documentation, checkout a branch and edit the Markdown files in the
8+
`src` directory.
9+
10+
## Building the documentation
11+
12+
To build locally, [install Julia](https://julialang.org/downloads/), then (from the `docs` directory) run:
13+
14+
``` bash
15+
$ julia make.jl
16+
```
17+
18+
The first time you run this command, Julia will download and install the
19+
necessary packages. This may take a couple of minutes.
20+
21+
The website is generated in the `build/` folder. To check it out, load
22+
`build/index.html` in your browser.
23+
24+
## Deploying the documentation
25+
26+
The documentation is automatically built and deployed by a GitHub action. You
27+
should not check the `build/` directory into git.

docs/src/installation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ Note, that `[threads]` is required for HiPO.
3030
To specify explicitly which BLAS vendor to look for, `BLA_VENDOR` coud be set in CMake, e.g. `-DBLA_VENDOR=Apple` or `-DBLA_VENDOR=OpenBLAS`. Alternatively, to specify which BLAS library to use, set `BLAS_LIBRARIES` to the full path of the library e.g. `-DBLAS_LIBRARIES=/path_to/libopenblas.so`.
3131

3232
#### Metis
33-
There are some known issues with Metis so the recommented version is in [this fork](https://github.com/galabovaa/METIS/tree/510-ts), branch 510-ts. This is version 5.10 with several patches for more reliable build and execution. Clone the repository with
33+
There are some known issues with Metis so the recommented version is in [this fork](https://github.com/galabovaa/METIS/tree/521-ts), branch 521-ts. This is version 5.2.1 with several patches for more reliable build and execution. Clone the repository with
3434
```
3535
git clone https://github.com/galabovaa/METIS.git
3636
cd METIS
37-
git checkout 510-ts
37+
git checkout 521-ts
3838
```
3939

4040
Then build with

0 commit comments

Comments
 (0)