Skip to content

NickTrapp/combinatorial-auctions

Repository files navigation

Combinatorial Auction WDP Solver

Experiments on engineering faster exact solvers for the Winner Determination Problem (WDP) in combinatorial auctions. Investigates how preprocessing and heuristic branching guidance affect Gurobi's branch-and-bound performance across random and CATS-inspired instance families.

Repository layout

src/
  data_types.py          # Bid and AuctionInstance dataclasses
  generate.py            # Random XOR auction generator
  generate_cats.py       # CATS Arbitrary / Paths / Regions generators
  model.py               # Gurobi MIP model builder (XOR-WDP formulation)
  preprocess.py          # Bid deduplication, dominance removal, decomposition
  solve.py               # solve_instance, solve_lp_relaxation, solve_by_decomposition
  heuristics.py          # bundle_size and conflict_degree priority scorers
  mip_start.py           # Greedy warm-start builder
  features.py            # Conflict graph construction and statistics
  experiment.py          # run_heuristic_comparison (dispatches to all generators)
  analysis.py            # Figure and table generation (importable library)

run_density_sweep.py     # Main branching heuristic sweep (20–60 items, 3 methods)
run_preprocessing_sweep.py  # Preprocessing / MIP-start / decomposition comparison
run_cats_sweep.py        # CATS Arbitrary sweep (40–100 items, 3 methods)
run_analysis.py          # Regenerate all figures and summary tables

results/
  density_sweep_raw.csv
  preprocessing_experiment_raw.csv
  cats_raw.csv
  figures/               # Generated figures (PDFs) and summary tables (CSVs)

report.tex / report.pdf  # Final report
refs.bib                 # BibTeX references

Requirements

  • Python 3.10+
  • Gurobi 13.x with a valid licence (gurobipy)
  • pandas, matplotlib, numpy
pip install pandas matplotlib numpy gurobipy

Reproducing experiments

Run scripts from the repository root. Each script saves results to results/.

# Main branching heuristic sweep (~5 min)
python run_density_sweep.py

# Preprocessing / MIP-start / decomposition comparison (~2 min)
python run_preprocessing_sweep.py

# CATS Arbitrary sweep (~10 min)
python run_cats_sweep.py

# Regenerate all figures and summary tables
python run_analysis.py

Figures are written to results/figures/. Pre-computed CSVs are included so run_analysis.py can be run without re-solving.

Methods

Method Description
default Gurobi defaults, no preprocessing
bundle_size Branch priorities proportional to bundle size
conflict_degree Branch priorities proportional to conflict-graph degree
default_mip_start_bundle Default + greedy warm start (sorted by bundle size)
decomposition_default Solve each conflict-graph component independently

Key results

  • Bundle-size priority achieves up to 11× speedup on medium-difficulty random XOR instances (50 items, 40 bidders, 20 bids each)
  • At the hardest tested configuration (60 items, 40 bidders, 20 bids), heuristics regress slightly — static priority orderings are insufficient when all bids are maximally conflicted
  • CATS Arbitrary instances show consistent but modest gains (1.1–1.3×); CATS Paths and Regions have near-integral LP relaxations and are solved trivially at the root node regardless of method

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors