Boscia

Mixed-Integer Convex Programming: Branch-and-bound with Frank-Wolfe-based convex relaxations

https://github.com/zib-iol/boscia.jl

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org, zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.7%) to scientific vocabulary

Keywords

first-order-methods frank-wolfe julia mixed-integer-programming nonlinear-optimization optimization optimization-algorithms
Last synced: 4 months ago · JSON representation ·

Repository

Mixed-Integer Convex Programming: Branch-and-bound with Frank-Wolfe-based convex relaxations

Basic Info
  • Host: GitHub
  • Owner: ZIB-IOL
  • License: mit
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 204 MB
Statistics
  • Stars: 29
  • Watchers: 2
  • Forks: 6
  • Open Issues: 22
  • Releases: 39
Topics
first-order-methods frank-wolfe julia mixed-integer-programming nonlinear-optimization optimization optimization-algorithms
Created over 3 years ago · Last pushed 4 months ago
Metadata Files
Readme License Citation

README.md

Boscia.jl

Build Status Dev Stable Coverage DOI Aqua QA

A solver for Mixed-Integer Convex Optimization that uses Frank-Wolfe methods for convex relaxations and a branch-and-bound algorithm.

Overview

The Boscia.jl solver combines (a variant of) the Frank-Wolfe algorithm with a branch-and-bound-like algorithm to solve mixed-integer convex optimization problems of the form $\min{x ∈ C, xI ∈ \mathbb{Z}^n} f(x)$, where $f$ is a differentiable convex function, $C$ is a convex and compact set, and $I$ is a set of indices of integral variables.

This approach is especially effective when we have a method to optimize a linear function over $C$ and the integrality constraints in a computationally efficient way. The set C can modelled using the Julia package MathOptInterface (or JuMP). We also implemented simple polytopes like the hypercube, the unit simplex and the probability simplex. Also, we intend to extend this list by combinatorial polytopes, e.g. the matching polytope.

The paper presenting the package with mathematical explanations and numerous examples can be found here:

Convex mixed-integer optimization with Frank-Wolfe methods: 2208.11010

Boscia.jl uses FrankWolfe.jl for solving the convex subproblems, Bonobo.jl for managing the search tree, and oracles optimizing linear functions over the feasible set, for instance calling SCIP or any MOI-compatible solver to solve MIP subproblems.

Installation

Add the Boscia stable release with:

julia import Pkg Pkg.add("Boscia")

Or get the latest master branch with: julia import Pkg Pkg.add(url="https://github.com/ZIB-IOL/Boscia.jl", rev="main")

For the installation of SCIP.jl, see here. Note, for Windows users, you do not need to download the SCIP binaries, you can also use the installer provided by SCIP.

Getting started

Here is a simple example to get started. For more examples, see the examples folder in the package.

```julia using Boscia using FrankWolfe using Random using SCIP using LinearAlgebra import MathOptInterface const MOI = MathOptInterface

n = 6

const diffw = 0.5 * ones(n) o = SCIP.Optimizer()

MOI.set(o, MOI.Silent(), true)

x = MOI.add_variables(o, n)

for xi in x MOI.addconstraint(o, xi, MOI.GreaterThan(0.0)) MOI.addconstraint(o, xi, MOI.LessThan(1.0)) MOI.add_constraint(o, xi, MOI.ZeroOne()) end

lmo = FrankWolfe.MathOptLMO(o)

function f(x) return sum(0.5*(x.-diffw).^2) end

function grad!(storage, x) @. storage = x-diffw end

x, _, result = Boscia.solve(f, grad!, lmo, verbose = true)

Boscia Algorithm.

Parameter settings. Tree traversal strategy: Move best bound Branching strategy: Most infeasible Absolute dual gap tolerance: 1.000000e-06 Relative dual gap tolerance: 1.000000e-02 Frank-Wolfe subproblem tolerance: 1.000000e-05 Total number of varibales: 6 Number of integer variables: 0

Number of binary variables: 6

Iteration Open Bound Incumbent Gap (abs) Gap (rel) Time (s) Nodes/sec FW (ms) LMO (ms) LMO (calls c) FW (Its) #ActiveSet Discarded

  • 1 2 -1.202020e-06 7.500000e-01 7.500012e-01 Inf 3.870000e-01 7.751938e+00 237 2 9 13 1 0 100 27 6.249998e-01 7.500000e-01 1.250002e-01 2.000004e-01 5.590000e-01 2.271914e+02 0 0 641 0 1 0 127 0 7.500000e-01 7.500000e-01 0.000000e+00 0.000000e+00 5.770000e-01 2.201040e+02 0 0 695 0 1 0 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Postprocessing

Blended Pairwise Conditional Gradient Algorithm. MEMORYMODE: FrankWolfe.InplaceEmphasis() STEPSIZE: Adaptive EPSILON: 1.0e-7 MAXITERATION: 10000 TYPE: Float64 GRADIENTTYPE: Nothing LAZY: true lazytolerance: 2.0 [ Info: In memory_mode memory iterates are written back into x0!


Type Iteration Primal Dual Dual Gap Time It/sec #ActiveSet

Last 0 7.500000e-01 7.500000e-01 0.000000e+00 1.086583e-03 0.000000e+00 1

PP             0   7.500000e-01   7.500000e-01   0.000000e+00   1.927792e-03   0.000000e+00              1

Solution Statistics. Solution Status: Optimal (tree empty) Primal Objective: 0.75 Dual Bound: 0.75 Dual Gap (relative): 0.0

Search Statistics. Total number of nodes processed: 127 Total number of lmo calls: 699 Total time (s): 0.58 LMO calls / sec: 1205.1724137931035 Nodes / sec: 218.96551724137933 LMO calls / node: 5.503937007874016 ```

Owner

  • Name: IOL Lab
  • Login: ZIB-IOL
  • Kind: organization
  • Location: Germany

Working on optimization and learning at the intersection of mathematics and computer science

Citation (CITATION.bib)

@article{miconvexfw,
  doi = {10.48550/ARXIV.2208.11010},
  url = {https://arxiv.org/abs/2208.11010},
  author = {Hendrych, Deborah and Troppens, Hannah and Besançon, Mathieu and Pokutta, Sebastian},
  title = {Convex integer optimization with Frank-Wolfe methods},
  year = {2022}
}

GitHub Events

Total
  • Fork event: 1
  • Create event: 37
  • Commit comment event: 14
  • Release event: 8
  • Issues event: 6
  • Watch event: 2
  • Delete event: 22
  • Member event: 1
  • Issue comment event: 16
  • Push event: 235
  • Pull request event: 68
  • Pull request review comment event: 44
  • Pull request review event: 31
Last Year
  • Fork event: 1
  • Create event: 37
  • Commit comment event: 14
  • Release event: 8
  • Issues event: 6
  • Watch event: 2
  • Delete event: 22
  • Member event: 1
  • Issue comment event: 16
  • Push event: 235
  • Pull request event: 68
  • Pull request review comment event: 44
  • Pull request review event: 31

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 33
  • Total pull requests: 130
  • Average time to close issues: 20 days
  • Average time to close pull requests: 15 days
  • Total issue authors: 5
  • Total pull request authors: 8
  • Average comments per issue: 2.94
  • Average comments per pull request: 0.31
  • Merged pull requests: 95
  • Bot issues: 0
  • Bot pull requests: 22
Past Year
  • Issues: 2
  • Pull requests: 57
  • Average time to close issues: about 1 hour
  • Average time to close pull requests: 6 days
  • Issue authors: 2
  • Pull request authors: 5
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.14
  • Merged pull requests: 37
  • Bot issues: 0
  • Bot pull requests: 10
Top Authors
Issue Authors
  • pokutta (21)
  • dhendryc (10)
  • matbesancon (8)
  • LeChStan (1)
  • JuliaTagBot (1)
Pull Request Authors
  • dhendryc (70)
  • matbesancon (28)
  • github-actions[bot] (18)
  • hannahtro (12)
  • pokutta (11)
  • dependabot[bot] (7)
  • WenjieXiao-2022 (5)
  • saurabhintoml (1)
  • TolisChal (1)
  • LeChStan (1)
Top Labels
Issue Labels
bug (8) enhancement (6) question (2) duplicate (1) SCIP (1)
Pull Request Labels
dependencies (7) github_actions (7) enhancement (1)

Packages

  • Total packages: 1
  • Total downloads:
    • julia 11 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 40
juliahub.com: Boscia

Mixed-Integer Convex Programming: Branch-and-bound with Frank-Wolfe-based convex relaxations

  • Versions: 40
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 11 Total
Rankings
Dependent repos count: 9.9%
Stargazers count: 25.8%
Average: 28.8%
Dependent packages count: 38.9%
Forks count: 40.4%
Last synced: 4 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/CompatHelper.yml actions