The problem is, perhaps, most of all, that it takes the same amount of space.
Ps, it's not a permutations problem, but a subsets problem. While permutations is n! subsets are "only" 2^n.
The problem is, perhaps, most of all, that it takes the same amount of space.
Ps, it's not a permutations problem, but a subsets problem. While permutations is n! subsets are "only" 2^n.
Any modern commercial solver (Gurobi, Xpress, IBM-CPLEX, COPT) can solve problems of this size pretty fast.
This is not what math programming does. Theoretically if you derive tight enough cuts for the problem and the solution lies on a vertex of the relaxed simplex you you can get the optimal solution in polynomial time.
I hate when people cloak very obvious things in jargon to make those things seem more insightful and disguise how obvious they are. What you're basically saying is if you're lucky and you win the lottery then you'll be rich.
Ie yes we all know that if you luck out then interior point will give you the optimum in polynomial time. But the whole reason why MIP is np-hard is exactly because deriving those cuts in general isn't possible (at least currently).
> This is not what math programming does
So what gurobi/cplex/etc actually do is first try a bazillion symmetry transformations/warm start heuristics/etc but then ultimately it does boil down to search.
This way of thinking describes the plateau that MIP solvers hit in the 90's.
Then in 2000's they starting implementing actual math (valid cuts in the root node mainly, but also during the search), which what gave us the exponential speed ups we enjoy today.
So you would be right 30 years ago. You are wrong in 2024.
> which what gave us the exponential speed ups we enjoy today
You're just patently wrong because
1. P=?NP is still open
2. You can consult the implementation of any solver
There's really nothing more to be said about it because both of these bullets are formal proofs that you are wrong.
Worst case performance or NP completeness is not a predictor of how fast we can solve an optimization problem.
This is again not true. We know why it works well. See the paper
"Smoothed analysis of algorithms: Why the simplex algorithm usually takes polynomial time"
by Spielmann and Teng.
Meanwhile the GP would have discarded the simplex algorithm due to its worst case performance.
Note that it has been proven however that if you slightly perturbate the inputs then the expected complexity becomes polynomial, meaning the inputs for which it's exponential are actually just pathological cases and it is polynomial in practice.
I just went to pull up some numbers. The following comes from a talk that Bob Bixby gave at ISMP in 2012. He is the original author of CPLEX and one of the current owners of Gurobi. Between 1991 and 2007, CPLEX achieved a 29530x speedup in their solvers. Their 1997/98 breakthrough year attributes the following speedups, Cutting planes: 33.3x, presolve: 7.7x, variable selection: 2.7x, node presolve 1.3x, heuristics: 1.1x, dive probing 1.1x. I don't have a paper reference for these numbers and I don't think he has published them, but I was at the talk.
The point is that integer programming solvers perform unreasonably well. There is theory as to why. Yes, there is still a lot of searching. However, search in-and-of-itself is not sufficient to solve the problems that we regularly solve now. Further, that increase in performance is not just heuristics.
https://www.emis.de/journals/DMJDMV/vol-ismp/25_bixby-robert...
FYI we’ve probably crossed paths :)
I made a simple tool that does this client-side for an accountant friend a while ago: https://reconciliation.spcdx.com/
(Warning: runtimes do quickly scale, due to the time complexity described above)
Ps, you don't want to risk a running time of form O(Mn²).
What does this mean?