Skip to content

jkhamphousone/RingStarProblems.jl

Repository files navigation

Ring Star Problem variants Solver

Aqua QA

Resilient Ring Star Problem

The Chapter 3 of my Thesis manuscript as well as Khamphousone et al., 2021 and Khamphousone et al., 2023 introduce the Resilient Ring Star Problem (called 1-R-RSP).

The package can solve 1-R-RSP thanks to:

  • A Branch-and-Benders-cut algorithm (refered to as B&BC)
  • An Integer Linear Programming model (ILP)
  • Both, sequentially

Ring Star Problem

When setting backup_factor=0 or tildeV=0, 1-R-RSP reduces to RSP

Usage

julia> using RingStarProblems
julia> pars = RingStarProblems.OptimizeParameters(
                        solve_mod="Both",     # ILP, B&BC or Both
                        write_res="",         # output results locally, html or no output ""
                        o_i="0",              # opening costs
                        s_ij="",              # star costs
                        r_ij="",              # ring costs
                        backup_factor=0.01,   # backup_factor c'=0.01c and d'=0.01c
                        do_plot=false,        # plot_results (to debug)
                        two_opt=0,            # use two_opt heuristic (not functional yet)
                        tildeV=100,           # uncertain nodes set
                        time_limit=120,       # Gurobi TL
                        log_level=1,          # console output log_level
                        sp_solve="poly",      # solving subproblem method for B&BC
                        redirect_stdio=false, # redirecting_stdio to output file
                        F=183,                # total failing time F, see PhD manuscript
                        use_blossom=false,    # use blossom inequalities (not functional yet)
                        alphas=[3],           # See [Labbé et al., 2004](ttps://doi.org/10.1002/net.10114)
                        nthreads=4,           # Number of threads used in GUROBI, set 0 for maximum number of available threads
                        uc_strat=4            # user cut strategy
)

Then:

julia> id_instance = 3
julia> RingStarProblems.rspoptimize(pars, id_instance)