This is the official repository for "Closing the Computational-Statistical Gap in Best Arm Identification for Combinatorial Semi-bandits", NeurIPS 2023.
Julia 1.7.3 with required packages: DataStructures.jl, Combinatorics.jl, Graph.jl, Polyhedra.jl, SNAPDatasets.jl, GLPK.jl, StatsPlots.jl, JLD2.jl
Algorithms for computing the most confusing parameter (MCP) are implemented in mcp_oracle.jl, where
-
NoRegMCP
is an implementation of Algorithm 1(ε,θ)-MCP(ω,μ)
with an additional parameterMAX_ITER
introduced to controll the maximum numbern
of iterations -
NaiveMCP
computes$f_x(ω,μ)$ for each$x$ in the action set$\mathcal{X}$ by a closed-form expression and returns the minimum value
Sampling rules are implemented in samplingrules.jl, which includes:
Name | Abbrev. | Description |
---|---|---|
PerturbedFWS | PFWS | Our Perturbed Frank-Wolfe Sampling |
CombGame-OFW | CG-OFW | CombGame (Jourdan, et al., ALT'21) with D-Tracking |
Uniform | RR | Uniform Sampling |
Combinatorial structures are implemented in cstruct.jl, where functions to compute any
Combinatorial Structure | Time complexity of computing |
Time complexity of computing |
---|---|---|
Spanning Trees | Prim's algorithm with priority queue: |
Lemma 2: |
- Note that: for random
$r$ -regular graphs on$n$ nodes, the$\text{tree-depth}\leq \lceil 3+\frac{\ln n+\ln\ln n}{\ln r}\rceil=O(\ln n)$ as$n\to\infty$ . See Theorem 10.14 in (Béla Bollobás, "Random Graphs", 2nd edition, 2001). -
NaiveMCP
requires to list all possible spanning trees.enumerate_all
forSpanningTree
is implemented based on Kirchhoff's Matrix-Tree theorem (see, e.g., Sec 6 in (Knauer and Knauer 2019)).
As a preliminary check, we run experiments on SpanningTree
with small number
-
Note that: we have slightly improved the input parameters used for calling
NoRegMCP
, and the averaged number of samples used byPFWS
and byCG-OFW
are better than what we have provided during the NeurIPS'23 rebuttal period. -
dataset/ contains the 5-regular graphs generated by the script dataset/generate_sptree.jl:
$|V|$ $K=|E|$ #spanning-trees $\Delta_{\min}(\mu)$ sptree_E20.dat
8 20 21,025 0.0989 sptree_E25.dat
10 25 343,385 0.0999 -
Execute experiment_sptree.jl with the following parameters:
$K$ $δ$ MAX_ITER
Command 20 0.1 5000 $ julia -O3 -p12 experiment_sptree.jl 20 5000
25 0.1 100000 $ julia -O3 -p12 experiment_sptree.jl 25 100000
-
After a successful execution, the results will be saved in .dat format, e.g.,
BAI_sptree_E20.dat
forK=20
. To visually compare the number of samples used by different sampling rules, use viz.jl by executing, e.g.,$ julia -O3 viz.jl BAI_sptree_E20.dat
.