Skip to content

Commit

Permalink
Merge branch 'optimize_twice' of https://github.com/atoptima/Coluna.jl
Browse files Browse the repository at this point in the history
…into optimize_twice
  • Loading branch information
laradicp committed Mar 5, 2021
2 parents 37523d2 + 2c60123 commit 189e704
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 23 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Coluna"
uuid = "88b4ec78-b192-11e8-04aa-4d367dd96a64"
authors = ["François Vanderbeck", "Guillaume Marques", "Vitor Nesello", "Ruslan Sadykov"]
version = "0.3.5"
version = "0.3.6"

[deps]
BlockDecomposition = "6cde8614-403a-11e9-12f1-c10d0f0caca0"
Expand Down
18 changes: 9 additions & 9 deletions docs/src/index.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Introduction

Coluna is a framework written in Julia to implement a decomposition approach to optimize
block structured mixed-integer programs (MIP).
block-structured mixed-integer programs (MIP).

Coluna relies on the tools of the JuMP-dev community at both ends of the problem treatment.
It uses the JuMP modeling language up front and MathOptInterface (MOI) to delegate master
It uses the JuMP modeling language upfront and MathOptInterface (MOI) to delegate master
and subproblems to MIP solvers.

The user introduces an original MIP that model his problem using the JuMP along our specific
The user introduces an original MIP that models his problem using the JuMP along our specific
extension BlockDecomposition that offers a syntax to specify the problem decomposition.
Coluna reformulates the original MIP using Dantzig-Wolfe and Benders decomposition
techniques.
Expand All @@ -19,7 +19,7 @@ Coluna offers a "black-box" implementation of the branch-and-cut-and-price algor
2. BlockDecomposition allows the user to provide to Coluna his decomposition of the model.
The BlockDecomposition syntax allows the user to implicilty define subsystems in the MIP on which the decomposition is based.
These subsystems are described by rows and/or columns indices.
3. The reformulation associated to the decomposition defined by the user is automatically generated by Coluna,
3. The reformulation associated with the decomposition defined by the user is automatically generated by Coluna,
without requiring any input from the user to define master columns, their reduced cost, pricing/separation problem, or Lagrangian bound.
4. A default column (and cut) generation procedure is implemented.
It relies on underlying MOI optimizers to handle master and subproblems.
Expand All @@ -43,18 +43,18 @@ You can install Coluna and its dependencies through the package manager of Julia

## Contributions

We welcome all contributions that help us to improve Coluna. You can suggest ways to enhance the package by talking with developers on the [discord chat](https://discordapp.com/invite/cg77wFW) dedicated to Coluna, or opening an issue via the [GitHub issues tracker](https://github.com/atoptima/Coluna.jl/issues)
We welcome all contributions that help us to improve Coluna. You can suggest ways to enhance the package by opening an issue via the [GitHub issues tracker](https://github.com/atoptima/Coluna.jl/issues)

Once the suggestion approved, you can open a Pull Request (PR) with the implementation of your suggestion.
Once the suggestion is approved, you can open a Pull Request (PR) with the implementation of your suggestion.

Before requesting the review, make sure that your code follows the style guide and passes tests.

Do no forget to update docstrings and the tests when necessary. It is very important to keep clear the goal of the PR to make the review fast. So we might close a PR that fixes two unrelated issues or more.
Do not forget to update the docstrings and the tests when necessary. It is very important to keep clear the goal of the PR to make the review fast. So we might close a PR that fixes two unrelated issues or more.

Coluna style follows the [blue style guide](https://github.com/invenia/BlueStyle) for Julia amended by the following instruction on naming :

> Names of variables and functions are treated equally. Use names that express what the variable/function do. > Either use :
> - `lowercasenospace` when the nam``is composed of three words or less with no ambiguity on words separation.
> Names of variables and functions are treated equally. Use names that express what the variable/function does. > Either use :
> - `lowercasenospace` when the name is composed of three words or less with no ambiguity on words separation.
> - `snake_case` otherwise
Note that the application of the style guide is a work in progress.
Expand Down
14 changes: 7 additions & 7 deletions docs/src/user/callbacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ algorithm.
The more classical callbacks in a branch-and-price solver are:

- Pricing callback that takes over the procedure to determine whether the current master LP
solution is optimum or produce an entering variable with negative reduced cost
solution is optimum or produces an entering variable with negative reduced cost
- Separation callback that takes over the procedure to determine whether the current master
LP solution is feasible or produce a valid problem constraint that is violated
LP solution is feasible or produces a valid problem constraint that is violated
- Branching callback that takes over the procedure to determine whether the current master
LP solution is integer or produce a valid branching disjunctive constraint that rules out
LP solution is integer or produces a valid branching disjunctive constraint that rules out
the current fractional solution.

In this page, we use following aliases :
On this page, we use the following aliases :
```julia
const BD = BlockDecomposition
const MOI = MathOptInterface
Expand All @@ -22,7 +22,7 @@ const MOI = MathOptInterface

The pricing callback let you define how to solve the subproblems of a Dantzig-Wolfe
decomposition to generate a new entering column in the master program.
This callback is usefull when you know an efficient algorithm to solve the subproblems,
This callback is useful when you know an efficient algorithm to solve the subproblems,
i.e. an algorithm better than solving the subproblem with a MIP solver.

Let us see an example with the generalized assignment problem for which the JuMP model takes the form:
Expand All @@ -40,10 +40,10 @@ J = 1:nb_jobs
@dantzig_wolfe_decomposition(model, dwdec, M)
```

where as you can see, we omitted the knapsack constraints.
where, as you can see, we omitted the knapsack constraints.
These constraints are implicitly defined by the algorithm called in the pricing callback.

Assume we have the following method that solves efficienlty a knapsack problem:
Assume we have the following method that solves efficiently a knapsack problem:

```julia
solve_knp(job_costs, lb_jobs, ub_jobs, capacity)
Expand Down
10 changes: 5 additions & 5 deletions docs/src/user/start.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Quick start

This quick start guide introduces the main features of Coluna through the example of the
Generalized Assignement Problem.
Generalized Assignment Problem.

## Problem

Expand Down Expand Up @@ -35,10 +35,10 @@ w = [61 70 57 82 51 74 98 64 86 80 69 79 60 76 78 71 50 99 92 83 53 91 68 61 63
Q = [1020 1460 1530 1190]
```

This model has a block structure : each knapsack constraint defines
an independent block and the set-partitionning constraints couple these independent
This model has a block structure: each knapsack constraint defines
an independent block and the set-partitioning constraints couple these independent
blocks. By applying the Dantzig-Wolfe reformulation, each knapsack constraint forms
a tractable subproblem and the set-partitionning constraints are handled in a master problem.
a tractable subproblem and the set-partitioning constraints are handled in a master problem.

To introduce the model, you need to load packages JuMP and BlockDecomposition. To optimize
the problem, you need Coluna and a Julia package that provides a MIP solver such as GLPK.
Expand All @@ -47,7 +47,7 @@ the problem, you need Coluna and a Julia package that provides a MIP solver such
using JuMP, BlockDecomposition, Coluna, GLPK
```

Next you instantiate the solver and define the algorithm that you use to optimize the problem.
Next, you instantiate the solver and define the algorithm that you use to optimize the problem.
In this case, the algorithm is a "simple" branch-and-cut-and-price provided by Coluna.

```julia
Expand Down
2 changes: 1 addition & 1 deletion src/optimize.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
function _welcome_message()
welcome = """
Coluna
Version 0.3.5 | 2021-02-12 | https://github.com/atoptima/Coluna.jl
Version 0.3.6 | 2021-03-03 | https://github.com/atoptima/Coluna.jl
"""
print(welcome)
end
Expand Down

0 comments on commit 189e704

Please sign in to comment.