Scipy
The main method to solve linear programming problem in python is given by the following command
scipy.optimize.linprog(c,
A_ub=None,
b_ub=None,
A_eq=None,
b_eq=None,
bounds=None,
method='revised simplex',
callback=None,
options=None,
x0=None)
Where the value of each argument is given by comparing the linear programming with the following linear programn
\[\begin{alignat*}{2} & \text{minimize: } && c^T x \\ & \text{subject to: } && \begin{aligned}[t] A_{ub}x &\leq b_{ub} \\ A_{eq}x &= b_{eq} \\ l\leq x &\leq u \end{aligned} \end{alignat*}\]Example
c = [-1, 4]
A = [[-3, 1],
[1, 2]]
b = [6, 4]
x0_bounds = (None, None)
x1_bounds = (-3, None)
res = linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds, x1_bounds], method='simplex')
message: The problem is unbounded. (HiGHS Status 10: model_status is Unbounded; primal_status is At upper bound)
success: False
status: 3
fun: None
x: None
nit: 3
lower: residual: None
marginals: None
upper: residual: None
marginals: None
eqlin: residual: None
marginals: None
ineqlin: residual: None
marginals: None
Example 1.a
Now let’s try to solve the following problem from the assignment
\begin{alignat}{2}
& \text{minimize: } && x_1 - 2x_2 - 4x_3 + 2x_4
& \text{subject to: } &&
\begin{aligned}[t]
x_1 - 2x_3 &\leq 4
x_2 - x_4 &\leq 8
-2x_1 + x_2 + 8x_3 + x_4 &\leq 12
x_1,x_2,x_3,x_4 &\geq 0
\end{aligned}
\end{alignat}
We have to use the following command to solve this problem
message: Optimization terminated successfully. (HiGHS Status 7: Optimal)
success: True
status: 0
fun: -18.0
x: [ 0.000e+00 8.000e+00 5.000e-01 0.000e+00]
nit: 4
lower: residual: [ 0.000e+00 8.000e+00 5.000e-01 0.000e+00]
marginals: [ 0.000e+00 0.000e+00 0.000e+00 1.000e+00]
upper: residual: [ inf inf inf inf]
marginals: [ 0.000e+00 0.000e+00 0.000e+00 0.000e+00]
eqlin: residual: []
marginals: []
ineqlin: residual: [ 5.000e+00 0.000e+00 0.000e+00]
marginals: [-0.000e+00 -1.500e+00 -5.000e-01]
mip_node_count: 0
mip_dual_bound: 0.0
mip_gap: 0.0
We can use a small function to extract the important information and print in a line as follows.
The value of optimal is $-18$ at $(0,8,1/2,0)$
Example 1.b
We can solve the second assignment
\begin{alignat}{2}
& \text{minimize: } && 2x-y+2z
& \text{subject to: } &&
\begin{aligned}[t]
2x + y &\leq 10
x+2y-2z &\leq 20
y+2z &\leq 5
x,y,z &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $-5$ at $(0,5,0)$
Example 1.c
We can solve the second assignment
\begin{alignat}{2}
& \text{maximize: } && x_1 + 2x_2 + 2x_3,
& \text{subject to: } &&
\begin{aligned}[t]
5x_1 + 2x_2 + 3x_3 &\leq 15
x_1 + 4x_2 + 2x_3 &\leq 12
2x_1 + x_3 &\leq 8
x_1,x_2,x_3 &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $21/2$ at $(0,3/4,9/2)$
Example 2.a
We can solve the second assignment
\begin{alignat}{2}
& \text{maximize: } && 3x_1 - x_2
& \text{subject to: } &&
\begin{aligned}[t]
2x_1 + x_2 &\geq 2
x_1 + 3x_2 &\leq 2
x_2 &\leq 4
x_1,x_2 &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $6$ at $(2,0)$
Example 5.a
We can solve the second assignment
\begin{alignat}{2}
& \text{maximize: } && 2x+4y
& \text{subject to: } &&
\begin{aligned}[t]
x + 2y &\leq 5
x + y &\leq 4
x, y &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $10$ at $(0,5/2)$
Example 4
Consider the following linear programming problem
\begin{alignat}{2}
& \text{maximize: } && 3x+2y
& \text{subject to: } &&
\begin{aligned}[t]
4x - y &\leq 4
4x +3y &\leq 6
4x + y &\leq 4
x, y &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $17/4$ at $(6755399441055743/9007199254740992,4503599627370497/4503599627370496)$
Example 6.b
Show that the following problem has unbounded objective
\begin{alignat}{2}
& \text{maximize: } && 20x_1 + 5x_2 + x_3
& \text{subject to: } &&
\begin{aligned}[t]
3x_1 + 5x_2 - 5x_3 &\leq 50
x_1 + 3x_2 - 4x_3 &\leq 20
x_1 &\leq 10
x_1, x_2, x_3 &\geq 0
\end{aligned}
\end{alignat}
'The problem is unbounded. (HiGHS Status 10: model_status is Unbounded; primal_status is At upper bound)'
Example 3.b
Consider the following problem, in the phase I, the artificial variable didn’t leave but assumes the value $0$, hence we can remove it and continue with phase II
\begin{alignat}{2}
& \text{maximize: } && 2x_1 + 2x_2 + 4 x_3
& \text{subject to: } &&
\begin{aligned}[t]
2x_1 + x_2 + x_3 &\leq 2
3x_1 + 4x_2 + 2x_3 &\geq 8
x_1, x_2, x_3 &\geq 0
\end{aligned}
\end{alignat}
The value of optimal is $4$ at $(0,2,0)$