ENH: linprog in SciPy 1.2+ discussion
See original GitHub issuescipy.optimize.linprog method='simplex' is in much better shape after several bug fixes and adopting the pre/postprocessing routines originally written for interior-point (closed #5400, #6139, #6690, #7044, #7237, #8174, and #8662 via PRs #8909, #8958, #9081, #9096, #9145 - thanks @kai-striega!). Essentially all known linprog bugs have been fixed. Consequently, it’s time for some enhancements!
To kick things off, I’ve submitted PR #9263 to add method = 'revised simplex'. The refactoring in #9145 paved the way for all linprog methods to share pre/postprocessing code, making it very easy to work this new method into the framework.
The fun is far from over, however. I opened this issue to record improvement ideas.
- use SuiteSparse in
method = 'interior-point'when available -
allow user-specified linear solver (see gh-11201)(not important anymore; HiGHS linear solver is Fine) - add sparse matrix support
for(gh-12043 adds sparse simplex w/ HiGHS)method = 'revised simplex' -
forimprove routine for driving artificial variables out of the basis by calculating only the required entries of the B^-1 A matrix, and update the basis matrix factorization rather than re-calculating from scratch (gh-12043 adds improved simplex)method='revised simplex', - add an option
toto perform the (revised) dual simplex method (and potentially include a heuristic for choosing between the two variants) (gh-12043 adds dual simplex)method = 'revised simplex' - implement the Forest-Tomlin update
forbasis matrix factorization (gh-12043 has simplex with more efficient basis matrix updates)method='revised simplex' - add a crossover routine (find basic feasible solution given a solution on the optimal face)
for(gh-12043 adds interior point with crossover)method = 'interior-point' - Add a basis-crashing routine
for ‘method=(solvers added by gh-12043 will have basis crashing evetually)revised simplex’ - include more sophisticated pivoting rules
for(gh-12043 adds simplex with several pivoting rules)method = 'revised simplex' - allow user to provide initial primal- or dual-feasible solution to
method = 'revised simplex' - add meaningful information about the dual of the original problem, especially for sensitivity analysis, to
OptimizeResultproduced for all methods (see gh-8836, gh-11848)(added marginals in gh-13893; still want ranging) -
add meaningful information about the standard form problem to(I don’t think this is important anymore.)OptimizeResult- along with details about the relationship between the standard form problem and the original problem - add a routine for finding ALL basic optimal solutions to a given problem
- add functionality to aid in sensitivity analysis and updates to the linear programming problem (e.g. adding a constraint or changing a cost). For instance, the
OptimizeResultobject returned by linprog could include a copy of the standard form problem, solution vector, and any other information (basis, dual variables, etc.) to allow for a warm or hot start - add tool for reading MPS files (I have code with nearly full functionality that could be cleaned up)
- add callback support for
method = 'interior-point'/'revised simplex' - improve the presolve routines: (HiGHS presolve is fine)
- additional presolve techniques (see gh-9783), iterative resolve, sparse pivot-based redundancy removal, heuristics for pivot-based redundancy removal basis crashing, faster algorithm for redundancy removal (this would help), improve SVD method by removing multiple rows at a time when possible - add automatic scaling routine (see gh-10495)
- add most Netlib benchmarks (see gh-10762)
- add redundancy removal benchmarks (see gh-10762)
- add support for integer constraints
(I already have a fair amount of work done here that has been waiting for a reliable simplex solver, but there is quite a bit more to be done)(PR imminent) - batch linear programming (#11195)
Please let me know if you are interested in any of these ideas and I’d be happy to share additional information.
Issue Analytics
- State:
- Created 5 years ago
- Reactions:1
- Comments:26 (20 by maintainers)

Top Related StackOverflow Question
Done. The important remaining items, colidated here for concision:
Nice to meet you today, @melissawm!