Skip to content

Commit 871786c

Browse files
isPANNclaude
andcommitted
Remove QuadraticProgramming model (#528) — mislabeled bounded-integer variant under MP2 name
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d6c5b6d commit 871786c

8 files changed

Lines changed: 4 additions & 389 deletions

File tree

docs/paper/reductions.typ

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@
317317
"PreemptiveScheduling": [Preemptive Scheduling],
318318
"PrimeAttributeName": [Prime Attribute Name],
319319
"QuadraticAssignment": [Quadratic Assignment],
320-
"QuadraticProgramming": [Quadratic Programming],
321320
"EquilibriumPoint": [Equilibrium Point],
322321
"QuadraticCongruences": [Quadratic Congruences],
323322
"QuadraticDiophantineEquations": [Quadratic Diophantine Equations],
@@ -5221,34 +5220,6 @@ In all graph problems below, $G = (V, E)$ denotes an undirected graph with $|V|
52215220
]
52225221
}
52235222

5224-
#{
5225-
let x = load-model-example("QuadraticProgramming")
5226-
let m = x.instance.num_vars
5227-
let K = x.instance.bound
5228-
let c = x.instance.quad_coeffs
5229-
let d = x.instance.lin_coeffs
5230-
let sol = (config: x.optimal_config, metric: x.optimal_value)
5231-
let fstar = metric-value(sol.metric)
5232-
let ystar = sol.config.map(ci => ci - K)
5233-
let ystar-disp = ystar.map(v => str(v)).join(", ")
5234-
[
5235-
#problem-def("QuadraticProgramming")[
5236-
Given a positive integer $m$, a positive integer bound $K >= 1$, a finite set $X$ of pairs $(bold(x), b)$ where $bold(x) in ZZ^m$ and $b in RR$, and two $m$-tuples $bold(c), bold(d) in RR^m$, find $bold(y) in {-K, -K+1, dots, K}^m$ that minimises
5237-
$ sum_(i=1)^m (c_i y_i^2 + d_i y_i) quad "subject to" quad bold(x) dot bold(y) <= b "for every" (bold(x), b) in X. $
5238-
][
5239-
Bounded Integer Quadratic Programming is the discrete restriction of Garey & Johnson's QUADRATIC PROGRAMMING (MP2) @garey1979 in which each component of the decision vector is forced to lie in the finite integer box ${-K, dots, K}$. The fully continuous (rational) case is also NP-complete: it was open in @garey1979 and resolved by Vavasis @vavasis1990, who proved that QP belongs to NP. NP-hardness of the bounded integer variant follows from Sahni's @sahni1974 PARTITION $arrow$ QP reduction, whose constructed instance has its optimum on ${0,1}^m subset.eq {-K, dots, K}^m$ for every $K >= 1$. Bounded Integer QP strictly generalises QUBO (the case $K = 1$ collapses to QUBO with linear side constraints after the affine substitution $z_i = (y_i + 1)/2$), so it inherits a brute-force bound of $O^*((2K+1)^m)$#footnote[No algorithm improving on enumeration over the discrete box ${-K, dots, K}^m$ is known for general non-convex bounded integer QP.].
5240-
5241-
*Example.* Consider the PARTITION instance $bold(a) = (1, 1, 2)$ with total sum $4$ and target $S/2 = 2$. Sahni's encoding sets $bold(c) = (#c.map(v => str(int(v))).join(", "))$, $bold(d) = (#d.map(v => str(int(v))).join(", "))$, and adds five linear constraints to restrict each $y_i$ to ${0, 1}$ and to force $bold(a) dot bold(y) = 2$:
5242-
$ y_1, y_2, y_3 >= 0, quad y_1 + y_2 + 2 y_3 <= 2, quad y_1 + y_2 + 2 y_3 >= 2. $
5243-
Over the $#(calc.pow(2 * K + 1, m))$ configurations in ${-1, 0, 1}^3$ exactly two are feasible: $bold(y) = (1, 1, 0)$ with objective $0$ and $bold(y) = (0, 0, 1)$ with objective $1$. The optimum is $bold(y)^* = (#ystar-disp)$ with $sum_i (c_i y_i^2 + d_i y_i) = #fstar$, recovering the PARTITION witness ${a_1, a_2}$.
5244-
5245-
#pred-commands(
5246-
"pred solve quadratic-programming.json --solver brute-force",
5247-
)
5248-
]
5249-
]
5250-
}
5251-
52525223
#{
52535224
let x = load-model-example("AlgebraicEquationsOverGF2")
52545225
let n = x.instance.num_variables

docs/paper/references.bib

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -452,17 +452,6 @@ @article{sahni1974
452452
year = {1974}
453453
}
454454

455-
@article{vavasis1990,
456-
author = {Stephen A. Vavasis},
457-
title = {Quadratic programming is in {NP}},
458-
journal = {Information Processing Letters},
459-
volume = {36},
460-
number = {2},
461-
pages = {73--77},
462-
year = {1990},
463-
doi = {10.1016/0020-0190(90)90100-C}
464-
}
465-
466455
@article{abdelWahabKameda1978,
467456
author = {H. M. Abdel-Wahab and T. Kameda},
468457
title = {Scheduling to Minimize Maximum Cumulative Cost Subject to Series-Parallel Precedence Constraints},

problemreductions-cli/src/commands/create.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -620,10 +620,10 @@ pub fn create(args: &CreateArgs, out: &OutputConfig) -> Result<()> {
620620
return create_random(args, canonical, &resolved_variant, out);
621621
}
622622

623-
// ILP, CircuitSAT, and QuadraticProgramming have complex input structures
623+
// ILP and CircuitSAT have complex input structures
624624
// not suited for CLI flags. Check before the empty-flags help so they get a
625625
// clear message.
626-
if canonical == "ILP" || canonical == "CircuitSAT" || canonical == "QuadraticProgramming" {
626+
if canonical == "ILP" || canonical == "CircuitSAT" {
627627
bail!(
628628
"CLI creation is not yet supported for {canonical}.\n\n\
629629
{canonical} instances are typically created via reduction:\n\

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub mod prelude {
4545
pub use crate::models::algebraic::{
4646
AlgebraicEquationsOverGF2, ConsecutiveOnesMatrixAugmentation,
4747
MinimumWeightSolutionToLinearEquations, QuadraticAssignment, QuadraticCongruences,
48-
QuadraticProgramming, SimultaneousIncongruences, SparseMatrixCompression, BMF, QUBO,
48+
SimultaneousIncongruences, SparseMatrixCompression, BMF, QUBO,
4949
};
5050
pub use crate::models::formula::{
5151
CNFClause, CircuitSAT, KSatisfiability, Maximum2Satisfiability, NAESatisfiability,

src/models/algebraic/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
//! - [`QuadraticAssignment`]: Quadratic Assignment Problem
1313
//! - [`QuadraticCongruences`]: Decide x² ≡ a (mod b) for x in {1, ..., c-1}
1414
//! - [`QuadraticDiophantineEquations`]: Decide ax² + by = c in positive integers
15-
//! - [`QuadraticProgramming`]: Bounded Integer Quadratic Programming
1615
//! - [`SimultaneousIncongruences`]: Decide whether x ≢ aᵢ (mod bᵢ) for all i simultaneously
1716
//! - [`MinimumMatrixDomination`]: Minimum Matrix Domination (minimum dominating set of 1-entries)
1817
//! - [`MinimumWeightDecoding`]: Minimum Weight Decoding (minimize Hamming weight of Hx≡s mod 2)
@@ -35,7 +34,6 @@ pub(crate) mod minimum_weight_solution_to_linear_equations;
3534
pub(crate) mod quadratic_assignment;
3635
pub(crate) mod quadratic_congruences;
3736
pub(crate) mod quadratic_diophantine_equations;
38-
pub(crate) mod quadratic_programming;
3937
pub(crate) mod qubo;
4038
pub(crate) mod simultaneous_incongruences;
4139
pub(crate) mod sparse_matrix_compression;
@@ -56,7 +54,6 @@ pub use minimum_weight_solution_to_linear_equations::MinimumWeightSolutionToLine
5654
pub use quadratic_assignment::QuadraticAssignment;
5755
pub use quadratic_congruences::QuadraticCongruences;
5856
pub use quadratic_diophantine_equations::QuadraticDiophantineEquations;
59-
pub use quadratic_programming::QuadraticProgramming;
6057
pub use qubo::QUBO;
6158
pub use simultaneous_incongruences::SimultaneousIncongruences;
6259
pub use sparse_matrix_compression::SparseMatrixCompression;
@@ -80,7 +77,6 @@ pub(crate) fn canonical_model_example_specs() -> Vec<crate::example_db::specs::M
8077
specs.extend(quadratic_assignment::canonical_model_example_specs());
8178
specs.extend(quadratic_congruences::canonical_model_example_specs());
8279
specs.extend(quadratic_diophantine_equations::canonical_model_example_specs());
83-
specs.extend(quadratic_programming::canonical_model_example_specs());
8480
specs.extend(equilibrium_point::canonical_model_example_specs());
8581
specs.extend(simultaneous_incongruences::canonical_model_example_specs());
8682
specs.extend(sparse_matrix_compression::canonical_model_example_specs());

src/models/algebraic/quadratic_programming.rs

Lines changed: 0 additions & 212 deletions
This file was deleted.

src/models/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub use algebraic::{
1515
ConsecutiveOnesMatrixAugmentation, ConsecutiveOnesSubmatrix, EquilibriumPoint,
1616
FeasibleBasisExtension, MinimumMatrixCover, MinimumMatrixDomination, MinimumWeightDecoding,
1717
MinimumWeightSolutionToLinearEquations, QuadraticAssignment, QuadraticCongruences,
18-
QuadraticDiophantineEquations, QuadraticProgramming, SimultaneousIncongruences,
18+
QuadraticDiophantineEquations, SimultaneousIncongruences,
1919
SparseMatrixCompression, BMF, ILP, QUBO,
2020
};
2121
pub use decision::Decision;

0 commit comments

Comments
 (0)