Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8c69460
feat: add MinimumInternalMacroDataCompression model (#442)
isPANN Mar 29, 2026
beda456
feat: generalize MinimumTardinessSequencing with weight parameter (#495)
isPANN Mar 29, 2026
a37e58d
feat: add SequencingToMinimizeTardyTaskWeight model (#496)
isPANN Mar 29, 2026
67ce930
feat: add SequencingWithDeadlinesAndSetUpTimes model (#499)
isPANN Mar 29, 2026
a8c1799
feat: add PreemptiveScheduling model (#504)
isPANN Mar 29, 2026
54a63d1
Fix #506: Add OpenShopScheduling model and direct ILP rule
isPANN Mar 29, 2026
b59c7f4
feat: add QuadraticCongruences model (#536)
isPANN Mar 29, 2026
6f87f40
feat: add SimultaneousIncongruences model (#537)
isPANN Mar 30, 2026
e538dec
feat: add EquilibriumPoint model (#549)
isPANN Mar 30, 2026
6d3e5d1
feat: add DirectedHamiltonianPath model (#813)
isPANN Mar 30, 2026
850aa3c
feat: add SetSplitting model (#830)
isPANN Mar 30, 2026
a0071b8
feat: add HamiltonianPathBetweenTwoVertices model (#831)
isPANN Mar 30, 2026
399b77b
feat: add MinimumMaximalMatching model (#832)
isPANN Mar 30, 2026
4b7d61b
feat: add PartitionIntoForests model (#833)
isPANN Mar 30, 2026
a9670e6
fix: resolve clippy needless_range_loop in OpenShopScheduling ILP
isPANN Mar 30, 2026
77e419e
Merge remote-tracking branch 'origin/main' into batch-models
isPANN Mar 30, 2026
bfe6f23
refactor: use i32 instead of usize for MinimumTardinessSequencing wei…
isPANN Mar 30, 2026
bfb8042
feat: add 24 new problem models with tests, paper entries, and CLI su…
isPANN Mar 30, 2026
77a2800
fix: resolve clippy needless_range_loop in MinimumWeightSolutionToLin…
isPANN Mar 30, 2026
57eb731
fix: code quality improvements for batch models
isPANN Mar 31, 2026
1060447
refactor: improve code quality across batch models
isPANN Mar 31, 2026
c1e4e89
fix: address agentic review findings for PR #960
isPANN Mar 31, 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
1,421 changes: 1,418 additions & 3 deletions docs/paper/reductions.typ

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions docs/paper/references.bib
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
@inproceedings{bouchez2006,
author = {Florent Bouchez and Alain Darte and Christophe Guillon and Fabrice Rastello},
title = {Register Allocation: What Does the {NP}-Completeness Proof of {Chaitin} et al. Really Prove?},
booktitle = {Languages and Compilers for Parallel Computing (LCPC)},
series = {LNCS},
volume = {4382},
pages = {283--298},
year = {2006},
publisher = {Springer},
doi = {10.1007/978-3-540-72521-3_21}
}

@article{sethi1975,
author = {Ravi Sethi},
title = {Complete Register Allocation Problems},
Expand Down Expand Up @@ -658,6 +670,17 @@ @article{aspvall1979
doi = {10.1016/0020-0190(79)90002-4}
}

@article{lichtenstein1982,
author = {David Lichtenstein},
title = {Planar Formulae and Their Uses},
journal = {SIAM Journal on Computing},
volume = {11},
number = {2},
pages = {329--343},
year = {1982},
doi = {10.1137/0211025}
}

@inproceedings{hansen2019,
author = {Thomas Dueholm Hansen and Haim Kaplan and Or Zamir and Uri Zwick},
title = {Faster $k$-{SAT} Algorithms Using Biased-{PPSZ}},
Expand Down Expand Up @@ -1570,3 +1593,25 @@ @article{Murty1972
pages = {326--370},
doi = {10.1007/BF01584550}
}

@article{gonzalez1976,
author = {Teofilo Gonzalez and Sartaj Sahni},
title = {Open Shop Scheduling to Minimize Finish Time},
journal = {Journal of the ACM},
volume = {23},
number = {4},
pages = {665--679},
year = {1976},
doi = {10.1145/321978.321985}
}

@article{yannakakis1980,
author = {Mihalis Yannakakis and Fanica Gavril},
title = {Edge Dominating Sets in Graphs},
journal = {SIAM Journal on Applied Mathematics},
volume = {38},
number = {3},
pages = {364--372},
year = {1980},
doi = {10.1137/0138030}
}
56 changes: 52 additions & 4 deletions problemreductions-cli/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ Flags by problem type:
MIS, MVC, MaxClique, MinDomSet --graph, --weights
MaxCut, MaxMatching, TSP, BottleneckTravelingSalesman --graph, --edge-weights
LongestPath --graph, --edge-lengths, --source-vertex, --target-vertex
HamiltonianPathBetweenTwoVertices --graph, --source-vertex, --target-vertex
ShortestWeightConstrainedPath --graph, --edge-lengths, --edge-weights, --source-vertex, --target-vertex, --weight-bound
MaximalIS --graph, --weights
SAT, NAESAT --num-vars, --clauses
Expand All @@ -227,6 +228,7 @@ Flags by problem type:
KColoring --graph, --k
KClique --graph, --k
MinimumMultiwayCut --graph, --terminals, --edge-weights
MonochromaticTriangle --graph
PartitionIntoTriangles --graph
GeneralizedHex --graph, --source, --sink
IntegralFlowWithMultipliers --arcs, --capacities, --source, --sink, --multipliers, --requirement
Expand All @@ -247,10 +249,17 @@ Flags by problem type:
BinPacking --sizes, --capacity
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
Numerical3DimensionalMatching --w-sizes, --x-sizes, --y-sizes, --bound
Betweenness --n, --sets (triples a,b,c)
CyclicOrdering --n, --sets (triples a,b,c)
ThreePartition --sizes, --bound
DynamicStorageAllocation --release-times, --deadlines, --sizes, --capacity
KthLargestMTuple --sets, --k, --bound
QuadraticCongruences --coeff-a, --coeff-b, --coeff-c
QuadraticDiophantineEquations --coeff-a, --coeff-b, --coeff-c
SimultaneousIncongruences --pairs (semicolon-separated a,b pairs)
SumOfSquaresPartition --sizes, --num-groups
ExpectedRetrievalCost --probabilities, --num-sectors
PaintShop --sequence
Expand All @@ -260,6 +269,7 @@ Flags by problem type:
EnsembleComputation --universe, --sets, --budget
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)
SetBasis --universe, --sets, --k
MinimumCardinalityKey --num-attributes, --dependencies
PrimeAttributeName --universe, --deps, --query
Expand Down Expand Up @@ -312,16 +322,21 @@ Flags by problem type:
RectilinearPictureCompression --matrix (0/1), --k
SchedulingWithIndividualDeadlines --n, --num-processors/--m, --deadlines [--precedence-pairs]
SequencingToMinimizeMaximumCumulativeCost --costs [--precedence-pairs]
SequencingToMinimizeTardyTaskWeight --sizes, --weights, --deadlines
SequencingToMinimizeWeightedCompletionTime --lengths, --weights [--precedence-pairs]
SequencingToMinimizeWeightedTardiness --sizes, --weights, --deadlines, --bound
SequencingWithDeadlinesAndSetUpTimes --sizes, --deadlines, --compilers, --setup-times
MinimumExternalMacroDataCompression --string, --pointer-cost [--alphabet-size]
MinimumInternalMacroDataCompression --string, --pointer-cost [--alphabet-size]
SCS --strings [--alphabet-size]
StringToStringCorrection --source-string, --target-string, --bound [--alphabet-size]
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]
RegisterSufficiency --arcs, --bound [--num-vertices]
CBQ --domain-size, --relations, --conjuncts-spec
IntegerExpressionMembership --expression (JSON), --target
MinimumGeometricConnectedDominatingSet --positions (float x,y pairs), --radius
ILP, CircuitSAT (via reduction only)

Geometry graph variants (use slash notation, e.g., MIS/KingsSubgraph):
Expand Down Expand Up @@ -469,7 +484,7 @@ pub struct CreateArgs {
/// Random seed for reproducibility
#[arg(long)]
pub seed: Option<u64>,
/// Target value (for Factoring and SubsetSum)
/// Target value (for Factoring, SubsetSum, and SubsetProduct)
#[arg(long)]
pub target: Option<String>,
/// Bits for first factor (for Factoring); also accepted as a processor-count alias for scheduling create commands
Expand Down Expand Up @@ -589,6 +604,9 @@ pub struct CreateArgs {
/// Upper bound on total path weight
#[arg(long)]
pub weight_bound: Option<i32>,
/// Upper bound on tree diameter (in edges) for BoundedDiameterSpanningTree
#[arg(long)]
pub diameter_bound: Option<usize>,
/// Upper bound on total inter-partition arc cost
#[arg(long)]
pub cost_bound: Option<i32>,
Expand Down Expand Up @@ -755,6 +773,12 @@ pub struct CreateArgs {
/// Number of sectors for ExpectedRetrievalCost
#[arg(long)]
pub num_sectors: Option<usize>,
/// Compiler index for each task in SequencingWithDeadlinesAndSetUpTimes (comma-separated, e.g., "0,1,0,1,0")
#[arg(long)]
pub compilers: Option<String>,
/// Setup times per compiler for SequencingWithDeadlinesAndSetUpTimes (comma-separated, e.g., "1,2")
#[arg(long)]
pub setup_times: Option<String>,
/// Source string for StringToStringCorrection (comma-separated symbol indices, e.g., "0,1,2,3")
#[arg(long)]
pub source_string: Option<String>,
Expand All @@ -767,15 +791,39 @@ pub struct CreateArgs {
/// Expression tree for IntegerExpressionMembership (JSON, e.g., '{"Sum":[{"Atom":1},{"Atom":2}]}')
#[arg(long)]
pub expression: Option<String>,
/// Coefficient a for QuadraticDiophantineEquations (coefficient of x²)
/// Equations for AlgebraicEquationsOverGF2 (semicolon-separated polynomials, each a colon-separated list of monomials, each a comma-separated list of variable indices; empty monomial = constant 1; e.g., "0,1:2;1,2:0:;0:1:2:")
#[arg(long)]
pub equations: Option<String>,
/// Register assignment for FeasibleRegisterAssignment (comma-separated register indices, e.g., "0,1,0,0")
#[arg(long)]
pub assignment: Option<String>,
/// Coefficient/parameter a for QuadraticCongruences (residue target) or QuadraticDiophantineEquations (coefficient of x²)
#[arg(long)]
pub coeff_a: Option<u64>,
/// Coefficient b for QuadraticDiophantineEquations (coefficient of y)
/// Coefficient/parameter b for QuadraticCongruences (modulus) or QuadraticDiophantineEquations (coefficient of y)
#[arg(long)]
pub coeff_b: Option<u64>,
/// Constant c for QuadraticDiophantineEquations (right-hand side of ax² + by = c)
/// Constant c for QuadraticCongruences (search-space bound) or QuadraticDiophantineEquations (right-hand side of ax² + by = c)
#[arg(long)]
pub coeff_c: Option<u64>,
/// Incongruence pairs for SimultaneousIncongruences (semicolon-separated "a,b" pairs, e.g., "2,2;1,3;2,5;3,7")
#[arg(long)]
pub pairs: Option<String>,
/// W-set sizes for Numerical3DimensionalMatching (comma-separated, e.g., "4,5")
#[arg(long)]
pub w_sizes: Option<String>,
/// X-set sizes for Numerical3DimensionalMatching (comma-separated, e.g., "4,5")
#[arg(long)]
pub x_sizes: Option<String>,
/// Y-set sizes for Numerical3DimensionalMatching (comma-separated, e.g., "5,7")
#[arg(long)]
pub y_sizes: Option<String>,
/// Initial marking for NonLivenessFreePetriNet (comma-separated tokens per place, e.g., "1,0,0,0")
#[arg(long)]
pub initial_marking: Option<String>,
/// Output arcs (transition-to-place) for NonLivenessFreePetriNet (e.g., "0>1,1>2,2>3")
#[arg(long)]
pub output_arcs: Option<String>,
}

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