diff --git a/.coin-or/Dependencies b/.coin-or/Dependencies index d49a359d..9c911348 100644 --- a/.coin-or/Dependencies +++ b/.coin-or/Dependencies @@ -1,12 +1,14 @@ -Data/Sample https://github.com/coin-or-tools/Data-Sample master -Data/miplib3 https://github.com/coin-or-tools/Data-miplib3 master +ThirdParty/Glpk https://github.com/coin-or-tools/ThirdParty-Glpk master +ThirdParty/Mumps https://github.com/coin-or-tools/ThirdParty-Mumps stable/3.0 +Data/Sample https://github.com/coin-or-tools/Data-Sample 1.2 +Data/miplib3 https://github.com/coin-or-tools/Data-miplib3 1.2 CoinUtils https://github.com/coin-or/CoinUtils master Osi https://github.com/coin-or/Osi master Clp https://github.com/coin-or/Clp master Cgl https://github.com/coin-or/Cgl master Alps https://github.com/coin-or/CHiPPS-ALPS stable/1.6 Bcps https://github.com/coin-or/CHiPPS-BiCePS stable/0.95 -Blis https://github.com/coin-or/CHiPPS-BLIS master +Blis https://github.com/coin-or/CHiPPS-BLIS stable/0.95 SYMPHONY https://github.com/coin-or/SYMPHONY master Cbc https://github.com/coin-or/Cbc master diff --git a/.coin-or/config.yml b/.coin-or/config.yml index 44fdc45c..79edd91f 100644 --- a/.coin-or/config.yml +++ b/.coin-or/config.yml @@ -20,28 +20,36 @@ Description: - Optimization deterministic linear discrete PaperCite: https://doi.org/10.1007/s12532-020-00183-6 Dependencies: + - Description: ThirdParty wrapper for building Glpk + URL: https://github.com/coin-or-tools/ThirdParty-Glpk + Version: master + Required: Optional + - Description: ThirdParty wrapper for building Mumps + URL: https://github.com/coin-or-tools/ThirdParty-Mumps + Version: 3.0 + Required: Optional - Description: Sample data files - URL: https://projects.coin-or.org/svn/Data/Sample/stable/1.2 + URL: https://github.com/coin-or-tools/Data-Sample Version: 1.2 Required: Required - - Description: miplib3 data files - URL: https://projects.coin-or.org/svn/Data/miplib3/stable/1.2 + - Description: Miplib3 data files + URL: https://github.com/coin-or-tools/Data-miplib3 Version: 1.2 Required: Required - Description: COIN-OR Utilities - URL: https://projects.coin-or.org/svn/CoinUtils/stable/2.11/CoinUtils + URL: https://github.com/coin-or/CoinUtils Version: master Required: Required - Description: Open Solver Interface - URL: https://projects.coin-or.org/svn/Osi/stable/0.108/Osi + URL: https://github.com/coin-or/Osi Version: master Required: Required - Description: COIN-OR Linear Programming Solver - URL: https://projects.coin-or.org/svn/Clp/stable/1.17/Clp + URL: https://github.com/coin-or/Clp Version: master Required: Required - Description: Cut Generation Library - URL: https://projects.coin-or.org/svn/Cgl/stable/0.60/Cgl + URL: https://github.com/coin-or/Cgl Version: master Required: Required - Description: Abstract Library for Parallel Search @@ -54,14 +62,14 @@ Dependencies: Required: Required - Description: BiCePS Linear Integer Solver URL: https://github.com/coin-or/CHiPPS-BLIS - Version: master + Version: 0.95 Required: Required - Description: SYMPHONY Mip Solver URL: https://github.com/coin-or/SYMPHONY Version: master Required: Required - Description: COIN-OR Branch-and-cut - URL: https://projects.coin-or.org/svn/Cbc/stable/2.10/Cbc + URL: https://github.com/coin-or/Cbc Version: master Required: Required - Description: Basic Linear Algebra Subroutines (BLAS) diff --git a/.coin-or/generate_readme b/.coin-or/generate_readme index 2efd5fc9..fe16a070 100644 --- a/.coin-or/generate_readme +++ b/.coin-or/generate_readme @@ -20,24 +20,43 @@ create_variables $SCRIPT_DIR/config.yml make_header -echo "MibS is a solver for stochastic mixed integer bilevel linear optimization problems. For an -introduction to bilevel optimization, see [this slide +echo "MibS is a solver for stochastic mixed integer bilevel linear optimization +problems. For an introduction to bilevel optimization, see [this slide deck](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-IWOBIP16.pdf). A somewhat outdated but still useful introduction to MibS is [here](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-INFORMS11.pdf). -A paper that contains a complete technical description of the algorithms in MibS is -[here](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf). +A paper that contains a complete technical description of the algorithms in +MibS is [here](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf). +A paper that discusses the cuts employed by MibS is +[here](http://coral.ie.lehigh.edu/~ted/files/papers/MibSCuts20.pdf). + +More detailed documentation is available [here](https://coin-or.github.io/MibS). " make_build_info_no_packages echo "## USING +### Modelling Systems + +MibS has interfaces to the following modelling systems that allow the user to +conveniently build the bilevel model in a high-level modelling language and +pass the model to MibS through the interface for solution. + +- Pyomo (Python) through the +[PAO](https://pao.readthedocs.io/en/latest/index.html#) package, +see [here](https://pao.readthedocs.io/en/latest/solvers.html) +- JuMP (Julia) through the [BilevelJuMP](https://github.com/joaquimg/BilevelJuMP.jl) package, see +[here](https://github.com/joaquimg/BilevelJuMP.jl/blob/master/docs/src/examples/MibS_example1.jl) +for an example. + +### Command Line + To solve a deterministic mixed integer bilevel linear optimization problem, you must provide both an MPS file and an auxiliary information file that specifies which variables and constraints are associated with the each level -(see -[here](http://coral.ise.lehigh.edu/wp-content/uploads/2016/02/MibS_inputFile.pdf)). +(see a description of the file format +[here](https://coin-or.github.io/MibS/input.html)). Then call \`mibs\` like this: \`\`\` /bin/mibs -Alps_instance file.mps -MibS_auxiliaryInfoFile aux_file.txt @@ -77,8 +96,15 @@ linear optimization problems. To solve these problems, there are two ways: [src/mibsStochastic.par.in]. " -make_links + echo " +## Project Links + * [Additional documentation](https://coin-or.github.io/MibS) + * [Code of Conduct](https://www.coin-or.org/code-of-conduct/) + * [COIN-OR Web Site](http://www.coin-or.org/) + * [Discussion forum](https://github.com/coin-or/$Description_Slug/discussions) + * [Report a bug](https://github.com/coin-or/$Description_Slug/issues/new) +" echo "## ACKNOWLEDGEMENT MibS was developed with support from diff --git a/.github/workflows/linux-ci.yml b/.github/workflows/linux-ci.yml index 68b1148c..4d060fec 100644 --- a/.github/workflows/linux-ci.yml +++ b/.github/workflows/linux-ci.yml @@ -7,7 +7,7 @@ on: - 'stable/*' pull_request: branches: - - '*' + - '**' release: types: - created @@ -18,32 +18,32 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-18.04, ubuntu-20.04] + os: [ubuntu-20.04, ubuntu-22.04] build_static: [true, false] flags: [ADD_CXXFLAGS=-fvisibility=hidden] download_requirements: [sudo apt install -y -qq gfortran liblapack-dev libmetis-dev libnauty2-dev] include: - - os: macos-10.15 + - os: macos-12 build_static: false - flags: CC=clang CXX=clang++ OSX=10.15 + flags: CC=clang CXX=clang++ OSX=12 download_requirements: brew install metis bash - - os: macos-10.15 + - os: macos-12 build_static: false - flags: CC=gcc-9 CXX=g++-9 OSX=10.15 + flags: CC=gcc-11 CXX=g++-11 OSX=12 download_requirements: brew install metis bash - - os: macos-10.15 + - os: macos-12 build_static: false - flags: CC=gcc-10 CXX=g++-10 OSX=10.15 + flags: CC=gcc-12 CXX=g++-12 OSX=12 download_requirements: brew install metis bash steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: ${{ github.event.repository.name }} - name: Install required packages from package manager run: ${{ matrix.download_requirements }} - name: Checkout coinbrew - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: coin-or/coinbrew path: coinbrew @@ -51,7 +51,6 @@ jobs: run: | export ${{ matrix.flags }} ADD_ARGS=() - ADD_ARGS+=( --no-prompt ) ADD_ARGS+=( --skip='ThirdParty/Metis ThirdParty/Mumps ThirdParty/Blas ThirdParty/Lapack' ) ADD_BUILD_ARGS=() ADD_BUILD_ARGS+=( --tests main --enable-relocatable ) @@ -71,7 +70,7 @@ jobs: cp ${{ github.event.repository.name }}/LICENSE dist/ tar -czvf release.tar.gz -C dist . - name: Checkout package name generation script - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: coin-or-tools/platform-analysis-tools path: tools @@ -86,7 +85,7 @@ jobs: echo "platform_string=${platform_str}" >> $GITHUB_ENV - name: Upload Artifact if: ${{ github.event_name == 'pull_request'}} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ github.event.repository.name }}-${{ github.head_ref }}-${{ env.platform_string }}.tar.gz path: release.tar.gz diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml index 6615e41a..57114adc 100644 --- a/.github/workflows/windows-ci.yml +++ b/.github/workflows/windows-ci.yml @@ -7,7 +7,7 @@ on: - 'stable/*' pull_request: branches: - - '*' + - '**' release: types: - created @@ -24,18 +24,16 @@ jobs: { os: windows-2019, arch: x86_64, msystem: mingw64, debug: false, suffix: "" }, { os: windows-2019, arch: i686, msystem: mingw32, debug: true, suffix: "-dbg" }, { os: windows-2019, arch: i686, msystem: mingw32, debug: false, suffix: "" }, - { os: windows-2019, arch: msvc, msystem: mingw64, debug: true, suffix: "-mdd" }, { os: windows-2019, arch: msvc, msystem: mingw64, debug: false, suffix: "-md" }, - { os: windows-2016, arch: msvc, msystem: mingw64, debug: true, suffix: "-mdd" }, - { os: windows-2016, arch: msvc, msystem: mingw64, debug: false, suffix: "-md" }, + { os: windows-2022, arch: msvc, msystem: mingw64, debug: false, suffix: "-md" }, ] steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: ${{ github.event.repository.name }} - name: Checkout coinbrew - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: coin-or/coinbrew path: coinbrew @@ -60,7 +58,6 @@ jobs: - name: Build project run: | ADD_ARGS=() - ADD_ARGS+=( --no-prompt ) ADD_ARGS+=( --skip='ThirdParty/Metis ThirdParty/Mumps ThirdParty/Blas ThirdParty/Lapack' ) ADD_BUILD_ARGS=() ADD_BUILD_ARGS+=( --build=x86_64-w64-mingw32 --tests main --enable-relocatable ) @@ -74,7 +71,7 @@ jobs: cp ${{ github.event.repository.name }}/LICENSE dist/ shell: msys2 {0} - name: Upload failed build directory - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: failure() with: name: ${{ matrix.os}}-{{ matrix.arch }}-debug=${{ matrix.debug }}-failedbuild @@ -92,7 +89,7 @@ jobs: if: ${{ matrix.arch != 'msvc' }} - name: Upload artifact if: ${{ github.event_name == 'pull_request'}} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ github.event.repository.name }}-${{ github.head_ref }}-${{ env.package_suffix }} path: dist diff --git a/CHANGELOG b/CHANGELOG index f3a4aee2..5ba52b85 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,11 +1,32 @@ MibS Change Log - + +## 1.1.0 + + * General improvements and fixes to cut generation + * Improvements to efficiency of feasibility checking and solving upper bounding problem. + * Introduce generalized version of increasing objective cut + * Introduce watermelon IC + * Improvements to structure detection + * This is the version used in the published revision of the [paper](http://dx.doi.org/10.1007/s12532-020-00183-6) + +## 1.0.0 + + * Adding support for name-based file format + * Improving robustness + * Better default parameters setting + * General refactoring and cleaning up + ## 0.95.1 * Updates for new experiments in updated draft. * Changed parameter names to match paper * Fixed bug in linking solution pool -##0.95.0 +## 0.95.0 - * Version used for initial draft of [paper](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf) + * Version used for initial draft of [paper](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf) + * Added linking solution pool + +## 0.9.0 + + * First official release! diff --git a/README b/README deleted file mode 100644 index f28708fa..00000000 --- a/README +++ /dev/null @@ -1,281 +0,0 @@ -# MibS (Mixed Integer Bilevel Solver) 1.1 - -## Build Status - -[![Build Status](https://travis-ci.org/coin-or/MibS.svg?branch=master)](https://travis-ci.org/coin-or/MibS) - -[![Build status](https://ci.appveyor.com/api/projects/status/aqxs9wcp2tjgpffd?svg=true)](https://ci.appveyor.com/project/tkralphs/mibs-gkymh/branch/master) -## Download - -[ ![Download](https://api.bintray.com/packages/coin-or/download/MibS/images/download.svg?version=1.1.2) ](https://bintray.com/coin-or/download/MibS/1.1.2/link) - -Binary packages are available for some platforms from [Bintray](https://bintray.com/coin-or/download/MibS). - -## Cite - -[![DOI](https://zenodo.org/badge/39053653.svg)](https://zenodo.org/badge/latestdoi/39053653) - -## DESCRIPTION - -MibS is a solver for mixed integelibrr bilevel optimization problems. For an -introduction to bilevel optimization, see [this slide -deck](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-IWOBIP16.pdf). A -somewhat outdated but still useful introduction to MibS is -[here](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-INFORMS11.pdf). - -## SUPPORTED PLATFORMS - -MiBS should work on all major patforms (OS X, Linux, and Windows), though the -software is in active development and most recent testing has been on Linux. - -## DEPENDENCIES - -MibS depends on the [CHiPPS](https://projects.coin-or.org/CHiPPS), -[Cbc](https://projects.coin-or.org/Cbc), and [SYMPHONY] -(https://projects.coin-or.org/SYMPHONY) projects of COIN-OR. If you already -have these installed, you can build and link MibS against the installed -version. Otherwise, by following the instruction below, you'll be able to -download, build, and install all dependencies. - -## BUILDING AND INSTALLING - -Most Linux distributions come with all the required tools installed. To obtain -the source code, the first step is to get the installer that will then -fetch the source for `MibS` and all its dependencies. *You do not need to -clone the repository first, just do the following!* Open a terminal and execute - -``` -git clone https://www.github.com/coin-or/coinbrew -``` - -Next, to check out source code for and build all the necessary projects -(including dependencies), execute the script in the `coinbrew` -subdirectory. To execute the script, do - -``` -cd coinbrew -chmod u+x coinbrew -./coinbrew -``` - -(Note: The `chmod` command is only needed if the execute permission is not -automatically set by git on cloning). Once you run the script, -you will be prompted interactively to select a project to fetch and build. The -rest should happen automagically. Alternatively, the following command-line -incantation will execute the procedure non-interactively. - -``` -./coinbrew fetch --no-prompt MibS:stable/x.y -./coinbrew build --no-prompt MibS --prefix=/path/to/install/dir -./coinbrew install MibS -``` -Note that the prefix specified above is the directory where the packages will be -installed. If the specified prefix is writable, then all packages will be -automatically installed immediately after building. If no prefix is specified, -the package will be installed in the directory dist/. Options that would have -been passed to the `configure` script under the old build system can simply be -added to the command-line. For example, to build with debugging symbols, do - -``` -./coinbrew build --no-prompt MibS --prefix=/path/to/install/dir --enable-debug -``` - -To get help with additional options available in running the script, do - -``` -./coinbrew --help -``` - -After installation, you will also need to add `/path/to/install/dir/bin` to your -`PATH` variable in your `.bashrc` and also add `/path/to/install/dir/lib` -to your `LD_LIBRARY_PATH` if you want to link to COIN libraries. - -### Building on Windows (MSys2/CYGWIN and MinGW/MSVC) - -By far, the easiest way to build on Windows is with the GNU autotools and the -GCC compilers. The first step is to install either - * [Msys2](https://msys2.github.io/) - * [CYGWIN](http://cygwin.org/) - * [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) -Bash and the gcc compilers also come with the [Anaconda Python distribution](https://www.anaconda.com/distribution/) - -If you don't already have CYGWIN installed and don't want to fool around with -WSL (which is a great option if you already know your way around Unix), it is -recommended to use MSys2, since it provides a minimal toolset that is easy to -install. To get MSys2, either download the installer -[here](https://msys2.github.io/) or download and unzip MSys2 base from -[here](http://kent.dl.sourceforge.net/project/msys2/Base/x86_64/msys2-base-x86_64-20190512.tar.xz) -(this is an out-of-date version, there may be a better place to get an archive -version). - -Following any of the above steps, you should have the `bash` command -(with Msys2, be sure to run `msys2_shell.bat` -or manually add `msys64\usr\bin`, `msys64\mingw32\bin`, and -`msys64\mingw64\bin` to your Windows path). - -Once you have bash installed and in your `PATH`, open a Windows terminal and -type - -``` -bash -pacman -S make wget tar patch dos2unix diffutils git svn -git clone https://www.github.com/coin-or/coinbrew -``` -Next, to check out source code for and build all the necessary projects -(including dependencies), execute the script in the `COIN-OR-OptimizationSuite` -subdirectory. To execute the script, do - -``` -cd coinbrew -chmod u+x coinbrew -./coinbrew -``` -(Note: The `chmod` command is only needed if the execute permission is not -automatically set by git on cloning). Once you run the script, -you will be prompted interactively to select a project to fetch and build. The -rest should happen automagically. Alternatively, the following command-line -incantation will execute the procedure non-interactively. - -``` -./coinbrew fetch --no-prompt MibS:stable/x.y -./coinbrew build --no-prompt MibS --prefix=C:\path\to\install\dir -./coinbrew install MibS -``` -Note that the prefix specified above is the directory where the packages will be -installed. If the specified prefix is writable, then all packages will be -automatically installed immediately after building. If no prefix is specified, -the package will be installed in the directory dist/. Options that would have -been passed to the `configure` script under the old build system can simply be -added to the command-line. For example, to build with debugging symbols, do -``` -./coinbrew build --no-prompt MibS --prefix=C:\path\to\install\dir --enable-debug -``` - -To get help with additional options available in running the script, do - -``` -./coinbrew --help -``` - -To use the resulting binaries and/or libraries, you will need to add the -full path of the directory `build\bin` to your Windows executable -search `PATH`, or, alternatively, copy the conents of the build directory to -`C:\Program Files (x86)\MibS` and add the directory -`C:\Program Files (x86)\MibS\bin` -to your Windows executable search `PATH`. You may also consider adding -`C:\Program Files (x86)\MibS\lib` to the `LIB` path and -`C:\Program Files (x86)\MibS\include` to the `INCLUDE` path. - -It is possible to use almost the exact same commands to build with the Visual -Studio compilers. Before doing any of the above commands in the Windows -terminal, first run the `vcvarsall.bat` script for your version of Visual -Studio. Note that you will also need a compatible Fortran compiler if you want -to build any projects requiring Fortran (`ifort` is recommended, but not -free). Then follow all the steps above, but replace the `build` command -with - -``` -./coinbrew build --no-prompt MibS --prefix=C:\path\to\install\dir --enable-msvc -``` -### Building on OS X - -OS X is a Unix-based OS and ships with many of the basic components needed to -build COIN-OR, but it's missing some things. For examples, the latest versions -of OS X come with the `clang` compiler but no Fortran compiler. You may also -be missing the `wget` utility and `subversion` and `git` clients (needed for -obtaining source code). The easiest way to get these missing utilitites is to -install Homebrew (see http://brew.sh). After installation, open a terminal and -do - -``` -brew install gcc wget svn git -``` - -To obtain -the source code, the first step is to get the installer that will then -fetch the source for MibS and all its dependencies. *You do not need to -clone MibS first, just do the following!* Open a terminal and execute - -``` -git clone https://www.github.com/coin-or/coinbrew -``` - -Next, to check out source code for and build all the necessary projects -(including dependencies), execute the script in the `coinbrew` -subdirectory. To execute the script, do - -``` -cd coinbrew -chmod u+x coinbrew -./coinbrew -``` - -(Note: The `chmod` command is only needed if the execute permission is not -automatically set by git on cloning). Once you run the script, -you will be prompted interactively to select a project to fetch and build. The -rest should happen automagically. Alternatively, the following command-line -incantation will execute the procedure non-interactively. - -``` -./coinbrew fetch --no-prompt MibS:stable/x.y -./coinbrew build --no-prompt MibS --prefix=/path/to/install/dir -./coinbrew install MibS -``` -Note that the prefix specified above is the directory where the packages will be -installed. If the specified prefix is writable, then all packages will be -automatically installed immediately after building. If no prefix is specified, -the package will be installed in the directory dist/. Options that would have -been passed to the `configure` script under the old build system can simply be -added to the command-line. For example, to build with debugging symbols, do - -``` -./coinbrew build --no-prompt MibS --prefix=/path/to/install/dir --enable-debug -``` - -To get help with additional options available in running the script, do - -``` -./coinbrew --help -``` -After installation, you will also need to add `/path/to/install/dir/bin` to your -`PATH` variable in your `.bashrc` and also add `/path/to/install/dir/lib` -to your `DYLD_LIBRARY_PATH` if you want to link to COIN libraries. - -## USING - -To solve a bilevel program, you must provide both an MPS file and an auxiliary -information file that specifies which variables and constraints are associated -with the each level (see [here](http://coral.ise.lehigh.edu/wp-content/uploads/2016/02/MibS_inputFile.pdf)). Then call `mibs` like this: -``` -/bin/mibs -Alps_instance file.mps -MibS_auxiliaryInfoFile aux_file.txt -``` -It is also possible to specify additional settings in a parameter file with, -e.g., -``` -/bin/mibs -param /MibS/src/mibs.par -``` -MibS has many parameters. See the example parameter file `mibs.par` and -the header file `MibParam.h` for explanations. You can also find a detailed -description of MibS -[here](http://www.optimization-online.org/DB_FILE/2017/04/5977.pdf). -Furthermore, to conduct the experiments illustrated in this report, see -the `README` file in the directory `scripts`. - -HELP - -Please post questions and issues to the github project page for MibS. - -ACKNOWLEDGEMENT - -MibS was developed with support from - -* National Science Foundation (Grants CMMI-1435453 and CMMI-0728011) -* Lehigh University -* Zuse Institute Berlin -* Research Campus Modal "Mathematical Optimization and Data Analysis -Laboratories" funded by the German Federal Ministry of Education and Research -(BMBF Grant 05M14ZAM) and by the DFG SFB/Transregio 154 - -http://github.com/coin-or/MibS - -Enjoy! diff --git a/README.md b/README.md index 16376e0f..2000369e 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,17 @@ _This file is auto-generated from [config.yml](.coin-or/config.yml) using the To make changes, please edit [config.yml](.coin-or/config.yml) or the generation scripts [here](.coin-or/generate_readme) and [here](https://github.com/coin-or/coinbrew/blob/master/scripts/generate_readme)._ -MibS is a solver for stochastic mixed integer bilevel linear optimization problems. For an -introduction to bilevel optimization, see [this slide +MibS is a solver for stochastic mixed integer bilevel linear optimization +problems. For an introduction to bilevel optimization, see [this slide deck](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-IWOBIP16.pdf). A somewhat outdated but still useful introduction to MibS is [here](http://coral.ie.lehigh.edu/~ted/files/talks/BILEVEL-INFORMS11.pdf). -A paper that contains a complete technical description of the algorithms in MibS is -[here](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf). +A paper that contains a complete technical description of the algorithms in +MibS is [here](http://coral.ie.lehigh.edu/~ted/files/papers/MIBLP16.pdf). +A paper that discusses the cuts employed by MibS is +[here](http://coral.ie.lehigh.edu/~ted/files/papers/MibSCuts20.pdf). + +More detailed documentation is available [here](https://coin-or.github.io/MibS). MibS is written in C++ and is released as open source under the [Eclipse Public License 2.0](http://www.opensource.org/licenses/EPL-2.0). @@ -87,7 +91,8 @@ The quick start assumes you are in a bash shell. ### Using `coinbrew` -To build MibS from source, obtain the `coinbrew` script, do +To download and build MibS from source, execute the +following on the command line. ``` wget https://raw.githubusercontent.com/coin-or/coinbrew/master/coinbrew chmod u+x coinbrew @@ -112,11 +117,26 @@ make install ## USING +### Modelling Systems + +MibS has interfaces to the following modelling systems that allow the user to +conveniently build the bilevel model in a high-level modelling language and +pass the model to MibS through the interface for solution. + +- Pyomo (Python) through the +[PAO](https://pao.readthedocs.io/en/latest/index.html#) package, +see [here](https://pao.readthedocs.io/en/latest/solvers.html) +- JuMP (Julia) through the [BilevelJuMP](https://github.com/joaquimg/BilevelJuMP.jl) package, see +[here](https://github.com/joaquimg/BilevelJuMP.jl/blob/master/docs/src/examples/MibS_example1.jl) +for an example. + +### Command Line + To solve a deterministic mixed integer bilevel linear optimization problem, you must provide both an MPS file and an auxiliary information file that specifies which variables and constraints are associated with the each level -(see -[here](http://coral.ise.lehigh.edu/wp-content/uploads/2016/02/MibS_inputFile.pdf)). +(see a description of the file format +[here](https://coin-or.github.io/MibS/input.html)). Then call `mibs` like this: ``` /bin/mibs -Alps_instance file.mps -MibS_auxiliaryInfoFile aux_file.txt @@ -158,10 +178,11 @@ linear optimization problems. To solve these problems, there are two ways: ## Project Links - * [COIN-OR Initiative](http://www.coin-or.org/) - * [Discussion formum](https://github.com/coin-or/MibS/discussions) + * [Additional documentation](https://coin-or.github.io/MibS) + * [Code of Conduct](https://www.coin-or.org/code-of-conduct/) + * [COIN-OR Web Site](http://www.coin-or.org/) + * [Discussion forum](https://github.com/coin-or/MibS/discussions) * [Report a bug](https://github.com/coin-or/MibS/issues/new) - * [Doxygen-generated html documentation](http://coin-or.github.io/MibS/Doxygen) ## ACKNOWLEDGEMENT diff --git a/src/MibSModel.cpp b/src/MibSModel.cpp index c1c39c3f..709fd5ee 100644 --- a/src/MibSModel.cpp +++ b/src/MibSModel.cpp @@ -18,6 +18,7 @@ #ifdef MIBS_HAS_SYMPHONY #include "symphony.h" #include "SymConfig.h" +#include "CoinUtilsConfig.h" #include "OsiSymSolverInterface.hpp" #endif #ifdef MIBS_HAS_CPLEX @@ -1105,8 +1106,13 @@ MibSModel::readProblemData() } case 1: // ampl/gmpl { +#ifdef COINUTILS_HAS_GLPK rc = mps->readGMPL(getUpperAmplModelFile().c_str(), getUpperAmplDataFile().c_str()); +#else + throw CoinError("Trying to read a GMPL file with when GMPL support is" + "not built in", "readInstance", "MibSModel"); +#endif break; } }