Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f0ccece
feat: add Maximum2Satisfiability model (#807)
isPANN Mar 31, 2026
142223d
feat: add Maximum2Satisfiability → ILP reduction rule (#961)
isPANN Mar 31, 2026
b83d111
feat: add MinimumEdgeCostFlow model and ILP rule (#810, #962)
isPANN Mar 31, 2026
20f5b68
feat: add MaximumDomaticNumber model and ILP rule (#878, #963)
isPANN Mar 31, 2026
6df6883
feat: add MinimumMetricDimension model and ILP rule (#880, #964)
isPANN Mar 31, 2026
76d201a
feat: add MaximumLeafSpanningTree model and ILP rule (#897, #965)
isPANN Mar 31, 2026
50b00a2
feat: add MinimumGraphBandwidth model and ILP rule (#876)
isPANN Mar 31, 2026
2de87e2
feat: add MinimumMatrixCover model and ILP rule (#931, #971)
isPANN Mar 31, 2026
31b58ea
feat: add MaximumLikelihoodRanking model and ILP rule (#930, #969)
isPANN Mar 31, 2026
036cc3c
feat: add MinimumWeightDecoding model and ILP rule (#923, #968)
isPANN Mar 31, 2026
6748313
feat: add Clustering model (#927)
isPANN Mar 31, 2026
2706885
feat: add MinimumWeightAndOrGraph model (#933)
isPANN Mar 31, 2026
e0b8f32
feat: add NumericalMatchingWithTargetSums model and ILP rule (#817)
isPANN Mar 31, 2026
03ca8b8
feat: add MinimumAxiomSet model (#869)
isPANN Mar 31, 2026
6f47542
feat: add MinimumFaultDetectionTestSet model (#935)
isPANN Mar 31, 2026
5671e1b
feat: add MinimumRegisterSufficiencyForLoops model (#873)
isPANN Mar 31, 2026
a6677ee
feat: add MinimumCapacitatedSpanningTree model and ILP rule (#901, #966)
isPANN Mar 31, 2026
9bb75a3
feat: add OptimumCommunicationSpanningTree model and ILP rule (#906, …
isPANN Mar 31, 2026
0fe67b0
feat: add MaxCut/SimpleGraph/One variant (MaximumBipartiteSubgraph al…
isPANN Mar 31, 2026
b002bbd
feat: add SquareTiling model (#820)
isPANN Mar 31, 2026
7185f4e
feat: add ThreeMatroidIntersection model (#851)
isPANN Mar 31, 2026
2bd2acd
fix: resolve needless_range_loop clippy warnings on Rust 1.94
isPANN Apr 1, 2026
01cf92c
Merge branch 'main' into feat/batch-models
isPANN Apr 1, 2026
3b5db1e
feat: add MinimumCodeGenerationOneRegister model (#900)
isPANN Apr 1, 2026
09d7c8a
feat: add MinimumCodeGenerationUnlimitedRegisters model (#902)
isPANN Apr 1, 2026
b2b0f36
feat: add MinimumCodeGenerationParallelAssignments model (#903)
isPANN Apr 1, 2026
a13280e
feat: add MinimumDecisionTree model (#932)
isPANN Apr 1, 2026
c53369a
feat: add MinimumDisjunctiveNormalForm model (#936)
isPANN Apr 1, 2026
5a05988
feat: add VertexCover decision problem (#986)
isPANN Apr 1, 2026
97e5e29
refactor: simplify review — remove duplication, precompute, improve e…
isPANN Apr 1, 2026
b502003
fix: add missing paper entries for 5 ILP reduction rules
isPANN Apr 1, 2026
f34c852
fix: harden ILP reductions, DRY bfs_distances, add CLI create for new…
isPANN Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
938 changes: 937 additions & 1 deletion docs/paper/reductions.typ

Large diffs are not rendered by default.

48 changes: 48 additions & 0 deletions docs/paper/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@ @inproceedings{bouchez2006
doi = {10.1007/978-3-540-72521-3_21}
}

@inproceedings{ahoJohnsonUllman1977,
author = {Alfred V. Aho and Steven C. Johnson and Jeffrey D. Ullman},
title = {Code Generation for Machines with Multiregister Operations},
booktitle = {Proceedings of the 4th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages},
pages = {21--28},
year = {1977},
publisher = {ACM},
doi = {10.1145/512950.512953}
}

@article{brunoSethi1976,
author = {John Bruno and Ravi Sethi},
title = {Code Generation for a One-Register Machine},
journal = {Journal of the ACM},
volume = {23},
number = {3},
pages = {502--510},
year = {1976},
doi = {10.1145/321958.321974}
}

@article{sethi1975,
author = {Ravi Sethi},
title = {Complete Register Allocation Problems},
Expand Down Expand Up @@ -1615,3 +1636,30 @@ @article{yannakakis1980
year = {1980},
doi = {10.1137/0138030}
}

@inproceedings{edmonds1970,
author = {Jack Edmonds},
title = {Submodular functions, matroids, and certain polyhedra},
booktitle = {Combinatorial Structures and Their Applications},
pages = {69--87},
year = {1970},
publisher = {Gordon and Breach}
}

@article{doron2024,
author = {Ilan Doron-Arad and Ariel Kulik and Hadas Shachnai},
title = {You (Almost) Can't Beat Brute Force for 3-Matroid Intersection},
journal = {arXiv preprint arXiv:2412.02217},
year = {2024}
}

@article{fomin2019,
author = {Fedor V. Fomin and Daniel Lokshtanov and Fahad Panolan and Saket Saurabh},
title = {Exact Algorithms via Monotone Local Search},
journal = {Journal of the ACM},
volume = {66},
number = {2},
pages = {1--23},
year = {2019},
doi = {10.1145/3277568}
}
72 changes: 72 additions & 0 deletions problemreductions-cli/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,13 +227,16 @@ Flags by problem type:
SpinGlass --graph, --couplings, --fields
KColoring --graph, --k
KClique --graph, --k
VertexCover (VC) --graph, --k
MinimumMultiwayCut --graph, --terminals, --edge-weights
MonochromaticTriangle --graph
PartitionIntoTriangles --graph
GeneralizedHex --graph, --source, --sink
IntegralFlowWithMultipliers --arcs, --capacities, --source, --sink, --multipliers, --requirement
MinimumEdgeCostFlow --arcs, --edge-weights (prices), --capacities, --source, --sink, --requirement
MinimumCutIntoBoundedSets --graph, --edge-weights, --source, --sink, --size-bound
HamiltonianCircuit, HC --graph
MaximumLeafSpanningTree --graph
LongestCircuit --graph, --edge-weights
BoundedComponentSpanningForest --graph, --weights, --k, --bound
UndirectedFlowLowerBounds --graph, --capacities, --lower-bounds, --source, --sink, --requirement
Expand All @@ -247,10 +250,12 @@ Flags by problem type:
PathConstrainedNetworkFlow --arcs, --capacities, --source, --sink, --paths, --requirement
Factoring --target, --m, --n
BinPacking --sizes, --capacity
Clustering --distance-matrix, --k, --diameter-bound
CapacityAssignment --capacities, --cost-matrix, --delay-matrix, --cost-budget, --delay-budget
ProductionPlanning --num-periods, --demands, --capacities, --setup-costs, --production-costs, --inventory-costs, --cost-bound
SubsetProduct --sizes, --target
SubsetSum --sizes, --target
MinimumAxiomSet --n, --true-sentences, --implications
Numerical3DimensionalMatching --w-sizes, --x-sizes, --y-sizes, --bound
Betweenness --n, --sets (triples a,b,c)
CyclicOrdering --n, --sets (triples a,b,c)
Expand All @@ -270,6 +275,7 @@ Flags by problem type:
ComparativeContainment --universe, --r-sets, --s-sets [--r-weights] [--s-weights]
X3C (ExactCoverBy3Sets) --universe, --sets (3 elements each)
3DM (ThreeDimensionalMatching) --universe, --sets (triples w,x,y)
ThreeMatroidIntersection --universe, --partitions, --bound
SetBasis --universe, --sets, --k
MinimumCardinalityKey --num-attributes, --dependencies
PrimeAttributeName --universe, --deps, --query
Expand All @@ -284,6 +290,9 @@ Flags by problem type:
ConsecutiveOnesMatrixAugmentation --matrix (0/1), --bound
ConsecutiveOnesSubmatrix --matrix (0/1), --k
SparseMatrixCompression --matrix (0/1), --bound
MaximumLikelihoodRanking --matrix (i32 rows, semicolon-separated)
MinimumMatrixCover --matrix (i64 rows, semicolon-separated)
MinimumWeightDecoding --matrix (JSON 2D bool), --rhs (comma-separated booleans)
FeasibleBasisExtension --matrix (JSON 2D i64), --rhs, --required-columns
SteinerTree --graph, --edge-weights, --terminals
MultipleCopyFileAllocation --graph, --usage, --storage
Expand Down Expand Up @@ -333,10 +342,19 @@ Flags by problem type:
D2CIF --arcs, --capacities, --source-1, --sink-1, --source-2, --sink-2, --requirement-1, --requirement-2
MinimumDummyActivitiesPert --arcs [--num-vertices]
FeasibleRegisterAssignment --arcs, --assignment, --k [--num-vertices]
MinimumFaultDetectionTestSet --arcs, --inputs, --outputs [--num-vertices]
MinimumWeightAndOrGraph --arcs, --source, --gate-types, --weights [--num-vertices]
MinimumCodeGenerationOneRegister --arcs [--num-vertices]
MinimumCodeGenerationParallelAssignments --num-variables, --assignments
MinimumCodeGenerationUnlimitedRegisters --left-arcs, --right-arcs [--num-vertices]
MinimumRegisterSufficiencyForLoops --loop-length, --loop-variables
RegisterSufficiency --arcs, --bound [--num-vertices]
CBQ --domain-size, --relations, --conjuncts-spec
IntegerExpressionMembership --expression (JSON), --target
MinimumGeometricConnectedDominatingSet --positions (float x,y pairs), --radius
MinimumDecisionTree --test-matrix (JSON 2D bool), --num-objects, --num-tests
MinimumDisjunctiveNormalForm (MinDNF) --num-vars, --truth-table
SquareTiling (WangTiling) --num-colors, --tiles, --grid-size
ILP, CircuitSAT (via reduction only)

Geometry graph variants (use slash notation, e.g., MIS/KingsSubgraph):
Expand Down Expand Up @@ -547,6 +565,9 @@ pub struct CreateArgs {
/// Partition groups for arc-index partitions (semicolon-separated, e.g., "0,1;2,3")
#[arg(long)]
pub partition: Option<String>,
/// Three partition matroids for ThreeMatroidIntersection (pipe-separated matroids, semicolon-separated groups, e.g., "0,1,2;3,4,5|0,3;1,4;2,5|0,4;1,5;2,3")
#[arg(long)]
pub partitions: Option<String>,
/// Arc bundles for IntegralFlowBundles (semicolon-separated groups of arc indices, e.g., "0,1;2,5;3,4")
#[arg(long)]
pub bundles: Option<String>,
Expand Down Expand Up @@ -631,6 +652,12 @@ pub struct CreateArgs {
/// Directed arcs for directed graph problems (e.g., 0>1,1>2,2>0)
#[arg(long)]
pub arcs: Option<String>,
/// Left operand arcs for MinimumCodeGenerationUnlimitedRegisters (e.g., 1>3,2>3,0>1)
#[arg(long)]
pub left_arcs: Option<String>,
/// Right operand arcs for MinimumCodeGenerationUnlimitedRegisters (e.g., 1>4,2>4,0>2)
#[arg(long)]
pub right_arcs: Option<String>,
/// Arc-index equality constraints for IntegralFlowHomologousArcs (semicolon-separated, e.g., "2=5;4=3")
#[arg(long)]
pub homologous_pairs: Option<String>,
Expand Down Expand Up @@ -824,6 +851,51 @@ pub struct CreateArgs {
/// Output arcs (transition-to-place) for NonLivenessFreePetriNet (e.g., "0>1,1>2,2>3")
#[arg(long)]
pub output_arcs: Option<String>,
/// Gate types for MinimumWeightAndOrGraph (comma-separated: AND, OR, or L for leaf, e.g., "AND,OR,OR,L,L,L,L")
#[arg(long)]
pub gate_types: Option<String>,
/// Input vertex indices (comma-separated, e.g., "0,1")
#[arg(long)]
pub inputs: Option<String>,
/// Output vertex indices (comma-separated, e.g., "5,6")
#[arg(long)]
pub outputs: Option<String>,
/// True sentence indices for MinimumAxiomSet (comma-separated, e.g., "0,1,2,3,4,5,6,7")
#[arg(long)]
pub true_sentences: Option<String>,
/// Implications for MinimumAxiomSet (semicolon-separated "antecedents>consequent", e.g., "0>2;0>3;1>4;2,4>6")
#[arg(long)]
pub implications: Option<String>,
/// Loop length N for MinimumRegisterSufficiencyForLoops
#[arg(long)]
pub loop_length: Option<usize>,
/// Variables as semicolon-separated start,duration pairs for MinimumRegisterSufficiencyForLoops (e.g., "0,3;2,3;4,3")
#[arg(long)]
pub loop_variables: Option<String>,
/// Parallel assignments for MinimumCodeGenerationParallelAssignments (semicolon-separated "target:read1,read2" entries, e.g., "0:1,2;1:0;2:3;3:1,2")
#[arg(long)]
pub assignments: Option<String>,
/// Number of variables for MinimumCodeGenerationParallelAssignments
#[arg(long)]
pub num_variables: Option<usize>,
/// Truth table for MinimumDisjunctiveNormalForm (comma-separated 0/1, e.g., "0,1,1,1,1,1,1,0")
#[arg(long)]
pub truth_table: Option<String>,
/// Test matrix for MinimumDecisionTree (JSON 2D bool array, e.g., '[[true,true,false],[true,false,false]]')
#[arg(long)]
pub test_matrix: Option<String>,
/// Number of tests for MinimumDecisionTree
#[arg(long)]
pub num_tests: Option<usize>,
/// Tiles for SquareTiling (semicolon-separated top,right,bottom,left tuples, e.g., "0,1,2,0;0,0,2,1;2,1,0,0;2,0,0,1")
#[arg(long)]
pub tiles: Option<String>,
/// Grid size N for SquareTiling (N x N grid)
#[arg(long)]
pub grid_size: Option<usize>,
/// Number of colors for SquareTiling
#[arg(long)]
pub num_colors: Option<usize>,
}

#[derive(clap::Args)]
Expand Down
Loading
Loading