GCG

GCG is a generic decomposition solver for mixed-integer programs (MIPs). It automatically performs a Dantzig-Wolfe reformulation and runs a full-fledged branch-price-and-cut algorithm to solve it to optimality. Alternatively, GCG is able to automatically apply a Benders decomposition. No user interaction is necessary, thus GCG provides decomposition-based MIP solving technology to everyone.

[Read More] [GCG modeling guide] [Options] [Changes] [Download GCG]

How to use it

ampl: option solver gcg; # change the solver
ampl: option gcg_options 'option1=value1 option2=value2'; # specify options
ampl: solve; # solve the problem

Resources

GCG modeling guide

GCG can apply Dantzig-Wolfe or Benders decomposition, either automatically or user-controlled, see types of structures GCG can detect and AMPL/GCG Colab examples.

Moreover, AMPL logical and some nonlinear expressions can be automatically linearized by the driver, see MP modeling guide.

Solver options

Full list of solver options:

More details on solver options: Features guide.

Retrieving solutions

The outcome of the last optimization is stored in the AMPL parameter solve_result_num and the relative message in solve_result.

display solve_result_num, solve_result;

GCG solve result codes can be obtained by running gcg -! or ampl: shell "gcg -!";:

          0- 99 solved: optimal for an optimization problem, feasible for a satisfaction problem
        100-199 solved? solution candidate returned but error likely
            150 solved? MP solution check failed (option sol:chk:fail)
        200-299 infeasible
        300-349 unbounded, feasible solution returned
        350-399 unbounded, no feasible solution returned
        400-449 limit, feasible: stopped, e.g., on iterations or Ctrl-C
        450-469 limit, problem is either infeasible or unbounded
        470-499 limit, no solution returned
        500-999 failure, no solution returned
            550 failure: numeric issue, no feasible solution

For general information, see MP result codes guide.

Changelog