Skip to content

Commit

Permalink
add bilevel and robust to current features
Browse files Browse the repository at this point in the history
  • Loading branch information
hlefebvr committed Jun 24, 2024
1 parent 179ec32 commit b932489
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
2 changes: 1 addition & 1 deletion docs/_static/design.css
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ h1, h2, h3, h4, h5, h6 {
"Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans",
"Droid Sans", "Helvetica Neue", sans-serif;
font-weight:800;
font-weight:300;
font-size :2.25em;
overflow-wrap: break-word;
}
Expand Down
41 changes: 32 additions & 9 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

<div style="padding-bottom:25px;margin-bottom:25px;border-bottom:1px solid #eeebee;">

<h1 style="font-size:2.5em;">A C++ framework for optimization and complex decision making</h1>
<h1 style="font-size:2.5em;">A C++ framework for optimization</h1>

<h2 style="font-size:1.5em;color:gray;">
Idol is a powerful and flexible library designed to help you build new mathematical optimization algorithms and solve more and more challenging problems.
Idol is a powerful and flexible library designed to help you build new mathematical optimization algorithms and solve more and more challenging problems efficiently.
</h2>

<span style="font-size:1.2em;">
Expand All @@ -19,12 +19,12 @@
What Is Idol?
-------------

Idol is a C++ library for **mathematical optimization** and **complex decision making**. It is designed to help you build new
algorithms easily for solving more and more challenging problems. It is a **versatile** and **powerful tool** that can be
Idol is a C++ library for **mathematical optimization** and complex decision making. It is designed to help you build new
algorithms easily for solving more and more challenging problems. It is a versatile and powerful tool that can be
used to solve a wide range of optimization problems, including mixed-integer linear programming (MILP), quadratically constrained
problems (MIQCQP and MIQP), bilevel problems (BO), robust optimization problems (RO and ARO) and many more.

It is designed to be **easy to use** and to **integrate with other software**, so that you can use it
It is designed to be easy to use and to integrate with other software, so that you can use it
to build new algorithms and solve new problems without having to start from scratch. For instance, here is a piece of
code which create a Branch-and-Price algorithm.

Expand Down Expand Up @@ -82,7 +82,7 @@ The idea is to work hand in hand with existing fine-tuned and well-engineered op
software to enhance their possibilities. By doing so, we aim at solving larger and more complex problems than what is currently possible,
or even problems for which theoretical evidence indicate that no MIP of reasonable size can model them completely (e.g., :math:`\Sigma_i^P`-hard problems).

Even though idol is not a MIP solver, it can be used to solve standalone LPs, QPs, MILPs, MIQPs, and MIQCQPs though the
Even though idol is not a MIP solver, it can be used to solve standalone LPs, QPs, MILPs, MIQPs, and MIQCQPs through the
many external solvers it interfaces with.
A clear advantage of using idol to solve these problems is that it offers a unified and common interface to every solver.
Thus, you can write your code once and test it with different solvers!
Expand All @@ -97,8 +97,11 @@ The following solvers are currently supported by idol
Current Features
----------------

Mixed-Integer Optimization
^^^^^^^^^^^^^^^^^^^^^^^^^^

Interfacing External Optimization Solvers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"""""""""""""""""""""""""""""""""""""""""

The idol library can be used to interface external solvers like `GLPK <https://www.gnu.org/software/glpk/>`_
or `Gurobi <https://www.gurobi.com/>`_ to solve standalone LPs, QPs, MILPs, MIQPs, and MIQCQPs.
Expand All @@ -107,7 +110,7 @@ It also provides classical callbacks one would need to implement when solving ha
or lazy constraints. Simply give idol the separation model and let it handle the rest.

Branch-and-Bound Algorithms
^^^^^^^^^^^^^^^^^^^^^^^^^^^
"""""""""""""""""""""""""""

Idol can be used to create a custom branch-and-bound scheme very easily in which virtually anything can be tweaked.

Expand All @@ -125,7 +128,7 @@ Idol can be used to create a custom branch-and-bound scheme very easily in which
problem as quick as possible.

Column Generation and Dantzig-Wolfe Decomposition
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"""""""""""""""""""""""""""""""""""""""""""""""""

Idol can be used to build and custom CG algorithms with the following features.

Expand All @@ -142,6 +145,26 @@ Idol can be used to build and custom CG algorithms with the following features.
As such, a CG algorithm can easily be "plugged in" any algorithmic phase. For instance, solving the pricing of
a CG algorithm can be done by yet another CG algorithm.

Bilevel Optimization
^^^^^^^^^^^^^^^^^^^^

Interfacing External Optimization Solvers
"""""""""""""""""""""""""""""""""""""""""

Currently, idol can interface with the mixed-integer bilevel solver `coin-or/MibS <https://github.com/coin-or/MibS>`_.

Robust Optimization
^^^^^^^^^^^^^^^^^^^^

Column-and-Constraint Generation
""""""""""""""""""""""""""""""""

Idol can be used to build and custom CCG algorithms with the following features.

* **Separation Sub-Routine**: Different separation strategies are implemented in idol to solve the separation problem in
the CCG algorithm. Most importantly, any bilevel solver can be used to solve the max-min separation problem. If needed, the user can also easily implement its own separation strategy.
* **Trust Region Stabilization**: The CCG algorithm can be stabilized using trust region if the first-stage decisions are binary.

Table of Contents
-----------------

Expand Down

0 comments on commit b932489

Please sign in to comment.