Linear programming problem in standard form is
min c * x
s.t. A * x = b,
x >= 0.
And the dual problem is
max r * b
s.t. r * A <= c
In the integer programming, the variables must be integers.
One can add artificial variables to convert inequaltiy to equality.
e.g. A * x <= b
iff A * x + s = b, s >= 0
.
Let A = [B D]
where B
is a basis for column space, if xb = b / B
and xb >= 0
, then the basic solution xb
is feasible.
And the basic solution is actually x = [xb 0]
.
Let r = cb \ B
, where c = [cb cd]
, if r * D <= cd
then xb
is dual feasible.
If xb
is both primal and dual feasible, then it is optimum.
Solve the artificial problem for a basic solution
min 1 * s
s.t. A * x + s = b,
x, s >= 0
If the optimum value is zero, then the problem is feasible.
- revised simplex
- dual simplex
- Dantzig Wolfe Decomposition
- branch and bound
- Gomory cut
- product form update
- FT-like update
- LU factorization for dense matrices
- 0-1 knapsack problem
- minimum cost flow problem
- transportation problem
- Sudoku as 0-1 linear programming
numpy, scipy.
- Bertsekas D. P. "Network Optimization: Continuous and Discrete Models". 1998.
- Duff I. S., Erisman A. M., Reid J. K. "Direct Methods for Sparse Matrices". 2017.
- Luenberger D. G., Ye Yinyu. "Linear and Nonlinear Programming". 2008.
- Pan Pingqi. "Linear Programming Computation". 2014. (中文版于2012年出版)
- 刘红英, 夏勇等. "数学规划基础". 2012.
- Huangfu Q , Hall J A J . Novel update techniques for the revised simplex method[J]. Computational Optimization & Applications, 2015, 60(3):587-608.
- H.D. Mittelmann, Decision Tree for Optimization Software, http://plato.asu.edu/guide.html.
- Coin-OR https://www.coin-or.org/
- cvxopt http://cvxopt.org/
- MIPLIB http://miplib.zib.de/
- MiniZinc http://www.minizinc.org/
- NEOS https://neos-server.org/neos/
- SCIP http://scip.zib.de/
- LEMON https://lemon.cs.elte.hu/trac/lemon