Skip to main content

Welcome to BOLIB3, a benchmarking library of continuous bilevel optimization problems.

Project description

BOLIB-3

Bilevel Optimisation Library

Bilevel optimisation

The bilevel program is defined as an upper-level program with a second lower-level program embedded in its constraints. It is written as follows:

minimise_{x,y} F(x,y);  
subject to     G(x,y)>=0;  
               H(x,y)==0;  
               y ∈ argmin_{y}{ f(x,y):
                             { g(x,y)>=0;  
                             { h(x,y)=0.

The choice between representing inequality constraints as non-negative (>=0) or non-positive (<=0) remains inconsistent throughout the literature. In this library we follow the non-negative (>=0) formulation. The notation defined in the table below is consistent thought the library:

Symbol Level Represent Dimension
x Upper-level Decision variables n_x
y Lower-level Decision variables n_x
F(x,y) Upper-level Objective function 1
f(x,y) Lower-level Objective function 1
G(x,y) Upper-level Inequality constraint functions m_G
g(x,y) Lower-level Inequality constraint functions m_g
H(x,y) Upper-level Equality constraint functions m_H
h(x,y) Lower-level Equality constraint functions m_h

Requirements

Depending on your usage, you may require:

Contributing

This is a community project to gather an extensive collection of bilevel programs for robust benchmarking. Please do contribute! There are a few things to note. You will need to request collaborator access from s.ward@soton.ac.uk. Please follow the standard file layouts found in the template folder.

  1. Clone the repository (git clone https://github.com/bolib3/bolib3)
  2. Create a personal branch (git checkout -b BranchName)
  3. Commit your Changes (git commit -m 'comment')
  4. Push to the Branch (git push origin BranchName)
  5. Open a Pull Request

ALL file and directory names are to be lowercase!!

Unit tests

The unit tests check that the library is set up correctly. From the top level directory run:

python -m unittest "automation\unit_tests\python_unit_tests.py"
matlab -r "run('automation\unit_tests\matlab_test_suite.m')"
  1. Test 001: Check that the file structure is consistent. For example the folder 'latex' should only contain '.tex' files.
  2. Test 002: Checks that each bilevel program has a complete set of non-empty files. For example every instance 'example' must have a corresponding 'example.json' and 'example.pdf' file.
  3. Test 003: Checks that each python module (respectively matlab class) representing a bilevel program implements all the necessary properties (e.g. 'name', 'category') and methods (e.g. F, G, ...).
  4. Test 004: Checks that the JSON metadata files are consistent. They should fulfill the schema file and the properties should match the properties in the python/matlab files.
  5. Test 005: Some bilevel programs have a list of datasets. This tests that there exists a file for each of them within /bolib3/data/.
  6. Test 006: Checks the functions F,G,H,f,g,h return arrays of the correct dimension.
  7. Test 007: Checks the solutions recorded in the JSON metadata are feasible.

Authors

Name Email
Samuel Ward s.ward@soton.ac.uk
Yaru Qian y.qian@soton.ac.uk
Jordan Fisher jdjfisher@outlook.com
Alain Zemkoho a.b.zemkoho@soton.ac.uk

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bolib3-3.0.1.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bolib3-3.0.1-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file bolib3-3.0.1.tar.gz.

File metadata

  • Download URL: bolib3-3.0.1.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for bolib3-3.0.1.tar.gz
Algorithm Hash digest
SHA256 fdfe85baf8fd10963e392ea2418f0e5ea0b3076b61d7b7212a3cb7e59fecb69f
MD5 2949b3190ccacaf7d36cb62f33a07f94
BLAKE2b-256 6642351c21241f3a3a3e50898d7e0fc8b809b4946230929d37c7b9c4c5e16ecf

See more details on using hashes here.

File details

Details for the file bolib3-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: bolib3-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for bolib3-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f463f6cd82fdd1ac722e1dc73c11ddfb36fd3d926a5f0144085f8c41322efe20
MD5 9faee041e72ac2d7ca81f6f5ac1be9b3
BLAKE2b-256 97b57e83a0442b6de05f4749577068a86c89f49bec5adc1c335db9d5a33598fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page