The implementation of the algorithm described in the paper can be found in the HiGHS repository, in the folder highs/ipm/hipo/.
To run the numerical experiments described in the paper, follow the instructions below.
Given that the solvers in HiGHS are continuously evolving, and that the performance is highly dependant on the machine used, the results may not match exactly the ones presented in the paper. However, they should be very close.
-
Build HiGHS 1.12:
-
Download and install METIS 5.2.1
git clone git@github.com:galabovaa/METIS.git cd METIS git checkout 521-ts cmake -S . -B build -DGKLIB_PATH=GKlib -DCMAKE_INSTALL_PREFIX=/installation/directory/ cmake --build build cmake --install build cd .. -
Install a BLAS library following the instructions at https://ergo-code.github.io/HiGHS/stable/installation/#BLAS
Notice that the BLAS reference implementation, shipped with some Linux distributions, is not suitable to obtain high performance. We recommend installing OpenBLAS instead. -
Download and build HiGHS 1.12
git clone git@github.com:ERGO-Code/HiGHS.git cd HiGHS cmake -S . -B build -DHIPO=ON -DMETIS_ROOT=/installation/directory/ cmake --build build cd ..Notice that you don't need to install HiGHS on your machine. Notice also that the version of METIS recommended in the official HiGHS installation instructions is different from the one recommended in the instructions above. Please, use the one recommended here.
-
-
In
Makefile, edithighs_pathwith the path to the HiGHS directory. -
The Netlib and PyPSA collections of problems are provided within this repository.
The Mittelmann collection of problems is too large to be included here, but can be downloaded from the links at https://plato.asu.edu/ftp/lpfeas.html
Put the downloaded mps files in the foldermittelman_pb/data. -
To compile the script, type
make. This produces the executablerun. -
To run a particular
solveron a particularcollectionof problems, use./run collection solvercollectioncan benetlib,pypsa,mittelmann.solvercan behipo,ipx,simplex.- You can pass a third option to the executable, indicating which linear system to use for HiPO. This can be
ASfor augmented system orNEfor normal equations. If it not specified, an automatic selection is performed. If the solver is nothipo, the option is ignored.
For example,./run netlib ipxruns the entire Netlib collection using the solver IPX;./run pypsa hipo NEruns the entire PyPSA collection with the solver HiPO using the normal equations approach.
The results are saved in a file namedresults_collection_solver_system.txt.
-
Specific HiGHS options can be set within the function
runHighsin the fileRunHighs.cpp. They are already set to the options used in the paper. -
Once multiple solvers have been run on a given collection, use the Matlab script
display_results.mto visualise the results. To do so, the variablecollectionshould contain the name of the collection of problems. The variablesolversshould contain pairs [solversystem], wheresystemisASorNE. If solver is nothipo, or if the automatic selection of the system was used, any string can be used forsystem.
The script produces a filetable_collection.texcontaining a table similar to the ones in the paper, that can be compiled into a PDF using a latex engine. The script also produces a logarithmic plot of the computational times, with an indication of the measured computational complexity.
For example, Table 2 and Figure 5 of the paper can be produced as follows:
- Run
make ./run pypsa hipo NE ./run pypsa hipo AS ./run pypsa ipx ./run pypsa simplex - In
display_results.m, setcollection = "pypsa";. - In
display_results.m, setsolvers = ["hipo" "NE"; "hipo" "AS"; "ipx" "any string"; "simplex" "any string"]; - Run the Matlab script
display_results.m. This will generate a filetable_pypsa.texcontaining the table and the figure will appear as a Matlab figure.