Skip to content

aircraft-tail-assignment/columngenerationsolver

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Column Generation Solver

A solver based on column generation.

columngeneration

image source

Description

The goal of this repository is to provide a simple framework to quickly implement heuristic algorithms based on column generation.

It is only required to provide the description of the linear program of the Dantzig–Wolfe decomposition of the master problem as well as the algorithm solving the pricing problem. No branching rule implementation is required.

The currently implemented algorithms are based on the algorithms from "Primal Heuristics for Branch and Price: The Assets of Diving Methods" (Sadykov et al., 2019).

This package does not implement any exact algorithm. However, if the pricing algorithm is exact, it provides a valid dual bound. If the pricing algorithm is heuristic, the primal algorithms still works, but then the dual bound is not valid.

Solving a problem only requires a couple hundred lines of code (see examples).

A linear programming solver is required. Currently, CLP and CPLEX are supported.

Features:

  • Algorithms:
    • Column generation column_generation
    • Greedy greedy
    • Limited Discrepancy Search limited_discrepancy_search
    • Heuristic Tree Search heuristic_tree_search
  • Sabilization technics:
    • Static and self-adjusting Wentges smoothing
    • Static and automatic directional smoothing

Examples

Data can be downloaded from fontanf/orproblems

Packing

Cutting Stock Problem

Benchmarks

  • Benchmarks:
    • python3 ../optimizationtools/optimizationtools/bench_run.py --main ./bazel-bin/examples/cuttingstock_main --csv ../ordata/cuttingstock/data.csv -l cuttingstock -a "heuristic_tree_search" -t 60

Multiple Knapsack Problem

Benchmarks

  • Benchmarks:
    • python3 ../optimizationtools/optimizationtools/bench_run.py --main ./bazel-bin/examples/multipleknapsack_main --csv ../ordata/multipleknapsack/data.csv -l multipleknapsack -a "heuristic_tree_search" -t 10

Generalized Assignment Problem from fontanf/generalizedassignmentsolver

Geometrical Cutting Stock and Variable-sized Bin Packing Problems from fontanf/packingsolver

  • Pricing problem: Geometrical Knapsack Problems solved with the algorithms from the same repository

Bin Packing Problem with Conflicts

Routing

Capacitated Vehicle Routing Problem

Vehicle Routing Problem with Time Windows

Capacitated Open Vehicle Routing Problem

Scheduling

Identical parallel machine scheduling problem with family setup times, Total weighted completion time

Benchmarks

  • Benchmarks:
    • python3 ../optimizationtools/optimizationtools/bench_run.py --main ./bazel-bin/examples/parallelschedulingwithfamilysetuptimestwct_main --csv ../ordata/parallelschedulingwithfamilysetuptimestwct/data.csv -l parallelschedulingwithfamilysetuptimestwct -a "heuristic_tree_search" -t 60

Star Observation Scheduling Problem

Benchmarks

  • Benchmarks:
    • python3 ../optimizationtools/optimizationtools/bench_run.py --main ./bazel-bin/examples/starobservationscheduling_main --csv ../ordata/starobservationscheduling/data.csv -l starobservationscheduling -a "heuristic_tree_search" -t 60

Graphs

Graph Coloring Problem from fontanf/coloringsolver

Usage, running examples from command line

You need to have a linear programming solver already installed. Then update the corresponding entry in the WORKSPACE file. You may only need to update the path attribute of the solver you are using. Then, compile with one of the following command:

bazel build --define clp=true -- //...
bazel build --define cplex=true -- //...

Then, examples can be executed as follows:

./bazel-bin/examples/cuttingstock_main -v -a "column_generation" -i "../ordata/cuttingstock/falkenauer1996/T/Falkenauer_t120_00.txt"
./bazel-bin/examples/multipleknapsack_main -v -a "limited_discrepancy_search" -i "../ordata/multipleknapsack/fukunaga2011/FK_1/random10_100_4_1000_1_1.txt"

Usage, C++ library

See examples.

About

A solver based on column generation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 90.4%
  • Starlark 7.4%
  • Python 2.2%