LACE — Supplementary Information

40 combinatorial optimization problems wrapped in a unified Input–Output–Tool–Heuristic (I-O-T-H) interface, evolved by 7 operators. This page is the paper's unabridged companion: where the paper reports aggregate scores, the four tabs below expose every problem specification, every prompt template (template + one rendered example), all 400 final Python heuristics, and every per-instance evaluation behind the headline numbers.

Results overview

Fig 1 is the framework schematic (Stage one I-O-T interface → Stage two evolve / evaluate / select loop), and Fig 2 – 5 are interactive versions of the paper's headline result figures: aggregate ranking on 36 CO-Bench problems, zero-shot generalization to 4 novel problems with 5-seed distributions, tool-library and complementary-portfolio ablations, and a four-backbone robustness comparison. In the interactive figures, hover any value for the exact number; click a column header to sort; click a chip to hide a family or component; click a LACE row in Fig 3 to jump to that problem's per-instance scores.

LACE framework architecture
The end-to-end pipeline behind every number on this page. Stage one turns a natural-language CO problem into a validated I, O, T interface and seeds an initial portfolio H0. Stage two evolves the portfolio with five generation operators (LR / RR / CC / CS / DI) plus two reactive repair operators (ER / EI), evaluates all 2n candidates, and re-selects n heuristics by minimizing the mean rank of the best-covering heuristic per instance, repeating until Nmax iterations.
Input: CO problem Natural-language description Stage one I Input designer Input schema I Typed dict of problem data available at solve time O Output designer Output schema O Typed dict for required solution structure T Tool Designer T = {τ1, τ2, ..., τK} Callable functions with name + description I, O, T each validated by smoke test before heuristic generation begins H Heuristic generator n independent LLM calls → H₀ = {h₁, ..., hₙ}. Each h : I → O is a solver that invokes tools from T — admitted only after smoke test (I, O, T) Initial portfolio H0 (n heuristics) Stage two Current H n heuristics initialized from H0 update each iteration h1 h2 h3 ... hn r̄ h mean rank r̄ per h Generation operators LR Local Refinement p(h) ∝ 1/r̄h — strong parent RR Reflective Redesign p(h) ∝ r̄h — weak parent CC Complementary Crossover p ∝ C(ha, hb) — dispatcher hybrid CS Comparative Synthesis strong vs weak contrast DI Diversity Injection whole portfolio — break patterns Reactive repair operators ER Error Repair triggered on execution failure EI Efficiency Improvement triggered on timeout Evaluation 2n heuristics total Current H: h1 h2 h3 ... hn New candidates: h1' h2' h3' ... hn' r heuristic rank per heuristic (2n total) Selection Minimize mean rank of best-covering heuristic per instance Select n from 2n Rank-normalized, no scale bias Solved by mixed-integer linear program solver Update H · repeat until Nmax iterations Output: Complementary Heuristic Portfolios Execute Stage Two independently under multiple time budget settings Fast H* (small Tmax) Balanced H* (medium Tmax) High-quality H* (large Tmax)

Problem specs

Grouped by category. Click a category to expand it, then click a problem to see six sections in order: Description, Input schema (input data structure), Output schema (return spec), Tool library (reusable helper functions), Heuristic skeleton (the I-O-T-H-wrapped solve() skeleton shown to the LLM), and Heuristic example (one LLM-generated solve()).

Loading…

LLM operators

Stage One has a Heuristic Generator that seeds the initial portfolio from scratch (per paper §4.2). Stage Two has seven LLM operators — five generation (LR, RR, CC, CS, DI) plus two reactive repair (ER, EI) — that mutate, recombine, or repair existing heuristics. All templates carry placeholders for the problem spec and the I-O-T-H interface; Stage Two templates additionally splice in parent code. To make the placeholders concrete, every operator is rendered end-to-end on one example problem (…) below, so the exact LLM-facing text is visible.

Loading…

Benchmark scores

Per-problem evaluation outputs. The overview table summarises all 40 problems (click any column header to sort); expand a problem for its per-instance score table. The 4 novel problems additionally show a head-to-head comparison against multiple baselines.

Loading…

Final heuristics

The 10 LLM-generated solve() functions surviving Stage Two evolution for each problem (400 algorithms in total). Expand a problem to list its heuristics #1–#10; click any heuristic to view its full Python source.

Loading…