Add CDMO2 linear programming and simplex

This commit is contained in:
2024-05-04 19:05:51 +02:00
parent f28880fe96
commit 099283c4d3
4 changed files with 483 additions and 0 deletions

View File

@ -5,11 +5,14 @@
\def\lastupdate{{PLACEHOLDER-LAST-UPDATE}}
\def\calT{\mathcal{T}}
\def\calB{\mathcal{B}}
\def\calN{\mathcal{N}}
\begin{document}
\makenotesfront
\input{./sections/_smt.tex}
\input{./sections/_lp.tex}
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,480 @@
\chapter{Linear programming}
\begin{description}
\item[Linear programming (LP)] \marginnote{Linear programming (LP)}
Optimization problem defined through a system of linear constraints (equalities and inequalities)
and an objective function.
In the Cartesian plane, equalities represent hyperplanes and inequalities are half-spaces.
\begin{remark}
LP is useful for optimal allocation with limited number of resources.
\end{remark}
\item[Feasible solution] \marginnote{Feasible solution}
Assignment satisfying all the constraints.
In the Cartesian plane, it is represented by any point within
the intersection of all half-spaces defined by the inequalities.
\item[Feasible region] \marginnote{Feasible region}
Set of all feasible solutions.
It is a convex polyhedron that can be empty, bounded or unbounded.
\begin{remark}
The optimal solution is always at one of the intersection points of the constraints within the feasible region (i.e. vertexes of the polyhedron).
The number of vertexes is finite but might grow exponentially.
\end{remark}
\item[Canonical form] \marginnote{Canonical form}
A linear programming problem is in canonical form if it is defined as:
\[
\begin{split}
\max \sum_{j=1}^{n} c_j x_j \text{ subject to } &\sum_{j=1}^{n} a_{i,j} x_j \leq b_i \text{ for } 1 \leq i \leq m \,\,\land \\
& x_j \geq 0 \text{ for } 1 \leq j \leq n
\end{split}
\]
where:
\begin{itemize}
\item $m$ is the number of constraints.
\item $n$ is the number of non-negative variables.
\item $a_{i,j}, b_i, c_j \in \mathbb{R}$ are known parameters (given by the definition of the problem).
\item $\sum_{j=1}^{n} c_j x_j$ is the objective function to maximize.
\item $\sum_{j=1}^{n} a_{i,j} x_j \leq b_i$ are $m$ linear inequalities.
\end{itemize}
In matrix form:
\[ \max \{ \vec{cx} \} \text{ subject to } \matr{A}\vec{x} \leq \vec{b} \land \vec{x} \geq \nullvec \]
where:
\begin{itemize}
\item $\vec{c} = \begin{bmatrix} c_1 & \hdots & c_n \end{bmatrix}$.
\item $\vec{x} = \begin{bmatrix} x_1 & \hdots & x_n \end{bmatrix}^T$.
\item $\vec{b} = \begin{bmatrix} b_1 & \hdots & b_m \end{bmatrix}^T$.
\item $\matr{A} = \begin{bmatrix} a_{1,1} & \hdots & a_{1,n} \\ \vdots & \ddots & \vdots \\ a_{m,1} & \hdots & a_{m,n} \end{bmatrix}$
\end{itemize}
\item[Standard form] \marginnote{Standard form}
A linear programming problem is in standard form if it only has equality constraints (excluded those on single variables):
\[
\begin{split}
\max \sum_{j=1}^{n} c_j x_j \text{ subject to } &\sum_{j=1}^{n} a_{i,j} x_j = b_i \text{ for } 1 \leq i \leq m \,\,\land \\
& x_j \geq 0 \text{ for } 1 \leq j \leq n
\end{split}
\]
In matrix form: $\max \{ \vec{cx} \} \text{ subject to } \matr{A}\vec{x} = \vec{b} \land \vec{x} \geq \nullvec$.
\begin{remark}[Canonical to standard form]
Any LP problem with $m$ constraints in canonical form has an equivalent standard form with $m$ slack variables $y_1, \dots, y_m \geq 0$
such that:
\[
\forall i \in \{ 1, \dots, m \}:
\left( \sum_{j=1}^{n} a_{i,j} x_j \leq b_i \right) \Rightarrow
\left( \sum_{j=1}^{n} a_{i,j} x_j + y_i= b_i \land y_i \geq 0 \right)
\]
\end{remark}
\end{description}
\begin{example}[Brewery problem]
The definition of the problem in canonical form is the following:
\begin{center}
\begin{tabular}{lccccc}
$\max$ & $13A$ & $+$ & $23B$ \\
subj. to & $5A$ & $+$ & $15B$ & $\leq$ & 480 \\
& $4A$ & $+$ & $4B$ & $\leq$ & 160 \\
& $35A$ & $+$ & $20B$ & $\leq$ & 1190 \\
& $A$ & , & $B$ & $\geq$ & 0 \\
\end{tabular}
\end{center}
\begin{figure}[H]
\centering
\includegraphics[width=0.3\linewidth]{./img/lp_brewery_problem.png}
\caption{Feasible regions and vertexes of the polyhedron}
\end{figure}
In standard form, it becomes:
\begin{center}
\begin{tabular}{lccccccccccc}
$\max$ & $13A$ & $+$ & $23B$ \\
subj. to & $5A$ & $+$ & $15B$ & $+$ & $S_C$ & & & & & $=$ & 480 \\
& $4A$ & $+$ & $4B$ & & & $+$ & $S_H$ & & & $=$ & 160 \\
& $35A$ & $+$ & $20B$ & & & & & $+$ & $S_M$ & $=$ & 1190 \\
& $A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & $\geq$ & 0 \\
\end{tabular}
\end{center}
\end{example}
\section{Simplex algorithm}
Algorithm that starts from an extreme point of the polyhedron and iteratively moves to a neighboring vertex as long as the objective function does not decrease.
\subsection{Basis}
\begin{description}
\item[Basis] \marginnote{Basis}
Given an LP problem $\mathcal{P}$ in standard form with $m$ constraints and $n$ variables (note: in standard form, it holds that $m \leq n$) and
its constraint matrix $\matr{A} \in \mathbb{R}^{m \times n}$,
a (ordered) basis $\calB = \{ x_{i_1}, \dots, x_{i_m} \}$ is a subset of $m$ of the $n$ variables such that
the columns $\matr{A}_{i_1}, \dots, \matr{A}_{i_m}$ of $\matr{A}$ form a $m \times m$ invertible matrix $\matr{A}_\calB$.
Variables in $\calB$ are basic variables while
$\calN = \{ x_1, \dots, x_n \} \smallsetminus \calB$ are non-basic variables.
$\mathcal{P}$ can be rewritten by separating basic and non-basic variables:
\[
\max \{ \vec{c}_\calB \vec{x}_\calB + \vec{c}_\calN\vec{x}_\calN \} \text{ subject to }
\matr{A}_\calB \vec{x}_\calB + \matr{A}_\calN \vec{x}_\calN = \vec{b} \,\land\, \vec{x}_\calB, \vec{x}_\calN \geq \nullvec
\]
\item[Basic solution] \marginnote{Basic solution}
By constraining $\vec{x}_\calN = \nullvec$, an LP problem becomes:
\[
\max \{ \vec{c}_\calB \vec{x}_\calB \} \text{ subject to }
\matr{A}_\calB \vec{x}_\calB = \vec{b} \,\land\, \vec{x}_\calB \geq \nullvec
\]
As $\matr{A}_\calB$ is invertible by definition, it holds that:
\[
\vec{x}_\calB = \matr{A}_\calB^{-1} \vec{b} \hspace{2em}\text{ and }\hspace{2em}
\max \{ \vec{c}_\calB \vec{x}_\calB \} = \max \{ \vec{c}_\calB \matr{A}_\calB^{-1} \vec{b} \}
\]
$\vec{x}_\calB$ is a basic solution for $\calB$.
\item[Basic feasible solution (BFS)] \marginnote{Basic feasible solution (BFS)}
Given a basic solution $\vec{x}_\calB$ for $\calB$,
it is feasible iff:
\[ \forall_{i=1}^m \vec{x}_{\calB_i} \geq 0 \]
\begin{description}
\item[Non-degenerate BFS] \marginnote{Non-degenerate BFS}
A basic feasible solution is non-degenerate iff $\forall_{i=1}^m \vec{x}_{\calB_i} > 0$.
\begin{remark}
A non-degenerate BFS is represented by a unique basis.
\end{remark}
\end{description}
\begin{remark}
The simplex algorithm iteratively moves through basic feasible solutions $\tilde{\vec{x}}_1, \tilde{\vec{x}}_2, \dots$
such that $\vec{c}\tilde{\vec{x}}_k \geq \vec{c}\tilde{\vec{x}}_{k-1}$.
\end{remark}
\end{description}
\subsection{Tableau}
\marginnote{Tableau}
Tabular representation to describe the steps of the simplex algorithm.
A variable $Z$ is introduced to represent the value of the objective function (which can be seen as a conversion of the objective function into a constraint).
The tableau of an LP problem in standard form is divided into three sections:
\begin{enumerate}
\item Objective function, where the coefficients of the variables are called reduced costs\marginnote{Reduced costs}.
\item Equality constraints.
\item Variable constraints.
\end{enumerate}
\begin{example}[Brewery problem]
In standard form, the brewery problem is defined as:
\begin{center}
\begin{tabular}{lccccccccccc}
$\max$ & $13A$ & $+$ & $23B$ \\
subj. to & $5A$ & $+$ & $15B$ & $+$ & $S_C$ & & & & & $=$ & 480 \\
& $4A$ & $+$ & $4B$ & & & $+$ & $S_H$ & & & $=$ & 160 \\
& $35A$ & $+$ & $20B$ & & & & & $+$ & $S_M$ & $=$ & 1190 \\
& $A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & $\geq$ & 0 \\
\end{tabular}
\end{center}
As a tableau, assuming an initial basis $\calB = \{ S_C, S_H, S_M \}$, the problem is represented as:
\begin{center}
\begin{tabular}{cccccccccccccc}
\toprule
$13A$ & $+$ & $23B$ & & & & & & & $-$ & $Z$ & $=$ & 0 \\
\midrule
$5A$ & $+$ & $15B$ & $+$ & $S_C$ & & & & & & & $=$ & 480 \\
$4A$ & $+$ & $4B$ & & & $+$ & $S_H$ & & & & & $=$ & 160 \\
$35A$ & $+$ & $20B$ & & & & & $+$ & $S_M$ & & & $=$ & 1190 \\
\midrule
$A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
The reduced costs are $\{ 13, 23, 0, 0, 0 \}$.
\end{example}
\subsection{Pivoting}
Given a basis $\calB$, it is possible to insert a new variable $x^\text{in} \notin \calB$ into it and remove an old one $x^\text{out} \in \calB$
to increase (or leave unchanged) the objective function:
\begin{descriptionlist}
\item[Entering variable] \marginnote{Entering variable}
$x^\text{in}$ should be the variable in $\calN$ with the highest improvement on the objective function.
\item[Leaving variable] \marginnote{Leaving variable}
$x^\text{out}$ should be chosen to ensure that the new basis $\calB' = \calB \cup \{ x^\text{in} \} \smallsetminus \{ x^\text{out} \}$
is still a feasible basis.
\begin{description}
\item[Minimum ratio rule] \marginnote{Minimum ratio rule}
For each constraint $i$ (i.e. $i$-th row of the system $\matr{A}\vec{x} = \vec{b}$), it is possible to compute the ratio:
\[ \frac{\vec{b}_i}{\vec{\alpha}_i^\text{in}} \]
where:
\begin{itemize}
\item $\vec{\alpha}_i^\text{in}$ is the coefficient associated to the entering variable $x^\text{in}$ in the $i$-th constraint.
\item $\vec{b}_i$ is the known term of the $i$-th constraint.
\end{itemize}
The index $i$ of the leaving variable $x^\text{out} = \calB_i$ is determined as:
\[ \arg\min_i \frac{\vec{b}_i}{\vec{\alpha}_i^\text{in}} \]
\end{description}
\end{descriptionlist}
Once $x^\text{in}$ and $x^\text{out} = \calB_i$ has been determined,
$x^\text{in}$ is isolated in the equation of the $i$-th constraint and it is substituted in all the others.
\begin{example}[Brewery problem]
The initial tableau of the brewery problem with $\calB = \{ S_C, S_H, S_M \}$ and $\calN = \{ A, B \}$ is:
\begin{center}
\begin{tabular}{cccccccccccccc}
\toprule
$13A$ & $+$ & $23B$ & & & & & & & $-$ & $Z$ & $=$ & 0 \\
\midrule
$5A$ & $+$ & $15B$ & $+$ & $S_C$ & & & & & & & $=$ & 480 \\
$4A$ & $+$ & $4B$ & & & $+$ & $S_H$ & & & & & $=$ & 160 \\
$35A$ & $+$ & $20B$ & & & & & $+$ & $S_M$ & & & $=$ & 1190 \\
\midrule
$A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
\begin{enumerate}
\item
It can be easily seen that $x^\text{in} = B$ should be the entering variable.
For the leaving variable, the ratios are:
\[ \arg\min \left\{ \frac{480}{15}, \frac{160}{4}, \frac{1190}{20} \right\} = \arg\min \left\{ 32, 40, 59.5 \right\} = 1 \]
Therefore, the leaving variable is $x^\text{out} = \calB_1 = S_C$.
We now isolate $B$ from the first constraint:
\[
\begin{split}
5A + 15B + S_C = 480 &\iff \frac{1}{3}A + B + \frac{1}{15}S_C = 32 \\
&\iff B = 32 - \frac{1}{3}A - \frac{1}{15}S_C \\
\end{split}
\]
The tableau with $\calB' = \{ B, S_H, S_M \}$ and $\calN' = \{ A, S_C \}$ is updated as:
\begin{center}
\begin{tabular}{cccccccccccccc}
\toprule
$\frac{16}{3}A$ & & & $-$ & $\frac{23}{15}S_C$ & & & & & $-$ & $Z$ & $=$ & $-736$ \\
\midrule
$\frac{1}{3}A$ & $+$ & $B$ & $+$ & $\frac{1}{15}S_C$ & & & & & & & $=$ & $32$ \\
$\frac{8}{3}A$ & & & $-$ & $\frac{4}{15}S_C$ & $+$ & $S_H$ & & & & & $=$ & $32$ \\
$\frac{85}{3}A$ & & & $-$ & $\frac{4}{3}S_C$ & & & $+$ & $S_M$ & & & $=$ & $550$ \\
\midrule
$A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
\item
Now, $x^\text{in} = A$ is the variable that increases the objective function the most.
For the leaving variable, the ratios are:
\[ \arg\min \left\{ \frac{32}{1/3}, \frac{32}{8/3}, \frac{550}{85/3} \right\} = 2 \]
Therefore, the leaving variable is $x^\text{out} = \calB'_2 = S_H$.
$A$ isolated in the second constraint brings to:
\[
\begin{split}
A = \frac{3}{8} (32 + \frac{4}{15}S_C - S_H) \,\iff\, A = 12 + \frac{1}{10}S_C - \frac{3}{8}S_H
\end{split}
\]
The tableau with $\calB'' = \{ A, B, S_M \}$ and $\calN'' = \{ S_C, S_H \}$ is updated as:
\begin{center}
\begin{tabular}{cccccccccccccc}
\toprule
& & & $-$ & $S_C$ & $-$ & $2S_H$ & & & $-$ & $Z$ & $=$ & $-800$ \\
\midrule
& & $B$ & $+$ & $\frac{1}{10}S_C$ & $+$ & $\frac{1}{8}S_H$ & & & & & $=$ & $28$ \\
$A$ & & & $-$ & $\frac{1}{10}S_C$ & $+$ & $\frac{3}{8}S_H$ & & & & & $=$ & $12$ \\
& & & $-$ & $\frac{25}{6}S_C$ & $-$ & $\frac{85}{8}S_H$ & $+$ & $S_M$ & & & $=$ & $210$ \\
\midrule
$A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
We cannot continue anymore as the reduced costs $\{ 0, 0, -1, -2, 0 \}$ are $\leq 0$ (i.e. cannot improve the objective function anymore).
\end{enumerate}
\end{example}
\subsection{Optimality}
\marginnote{Optimality}
When any substitution worsens the objective function, the current assignment is optimal.
In the tableau, this happens when all the reduced costs are $\leq 0$.
\begin{remark}
For any optimal solution, there is at least a basis such that the reduced costs are $\leq 0$.
Therefore, this is a sufficient condition.
\end{remark}
\begin{remark}
The fact that reduced costs are $\leq 0$ is not a necessary condition.
\end{remark}
\begin{example}[Brewery problem]
The tableau at the last iteration, with $\calB'' = \{ A, B, S_M \}$ and $\calN'' = \{ S_C, S_H \}$, is the following:
\begin{center}
\begin{tabular}{cccccccccccccc}
\toprule
& & & $-$ & $S_C$ & $-$ & $2S_H$ & & & $-$ & $Z$ & $=$ & $-800$ \\
\midrule
& & $B$ & $+$ & $\frac{1}{10}S_C$ & $+$ & $\frac{1}{8}S_H$ & & & & & $=$ & $28$ \\
$A$ & & & $-$ & $\frac{1}{10}S_C$ & $+$ & $\frac{3}{8}S_H$ & & & & & $=$ & $12$ \\
& & & $-$ & $\frac{25}{6}S_C$ & $-$ & $\frac{85}{8}S_H$ & $+$ & $S_M$ & & & $=$ & $210$ \\
\midrule
$A$ & , & $B$ & , & $S_C$ & , & $S_H$ & , & $S_M$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
All reduced costs are $\leq 0$ and an optimal solution has been reached:
\begin{itemize}
\item $S_C = 0$ and $S_H = 0$ (variables in $\calN''$).
\item $A = 12$, $B = 28$ and $S_M = 210$ (variables in $\calB''$. Obtained by isolating them in the constraints).
\item $- S_C - 2S_H - Z = -800 \iff Z = 800 - S_C - 2S_H \iff Z = 800$ (objective function).
\end{itemize}
\end{example}
\begin{remark}
The points in the feasible region of a problem $\mathcal{P}$ are:
\[ \mathcal{F}_\mathcal{P} = \{ \vec{x} \in \mathbb{R}^n \mid \matr{A}\vec{x} \leq \vec{b} \land \vec{x} \geq \nullvec \} \]
\end{remark}
\begin{description}
\item[Optimal region] \marginnote{Optimal region}
For an LP problem $\mathcal{P}$, its set of solutions is defined as:
\[ \mathcal{O}_\mathcal{P} = \{ x^* \in \mathcal{F}_\mathcal{P} \mid \forall \vec{x} \in \mathcal{F}_\mathcal{P}: \vec{c}\vec{x}^* \geq \vec{c}\vec{x} \} \]
Trivially, it holds that $\mathcal{O}_\mathcal{P} \subseteq \mathcal{F}_\mathcal{P}$ and
$\mathcal{F}_\mathcal{P} = \varnothing \Rightarrow \mathcal{O}_\mathcal{P} = \varnothing$.
\begin{theorem}
If $\mathcal{O}_\mathcal{P}$ is finite, then $\vert \mathcal{O}_\mathcal{P} \vert = 1$
(therefore, if $\vert \mathcal{O}_\mathcal{P} \vert > 1$, then $\mathcal{O}_\mathcal{P}$ is infinite).
\end{theorem}
\end{description}
\begin{description}
\item[Unbounded problem] \marginnote{Unbounded problem}
An LP problem $\mathcal{P}$ is unbounded if it does not have an optimal solution (i.e. $\mathcal{F}_\mathcal{P}$ is an unbounded polyhedron).
With the tableau formulation, if a column has reduced cost $> 0$ and all the constraint coefficients are $\leq 0$, then the problem is unbounded.
\begin{example}
Given the following tableau:
\begin{center}
\begin{tabular}{cccccccccccc}
\toprule
& $x$ & $-$ & $y$ & & & & & $-$ & $Z$ & $=$ & $-1$ \\
\midrule
$-$ & $x$ & $-$ & $y$ & $+$ & $S_1$ & & & & & $=$ & $0$ \\
$-$ & $2x$ & $-$ & $y$ & & & $+$ & $S_2$ & & & $=$ & $1$ \\
\midrule
& $x$ & , & $y$ & , & $S_1$ & , & $S_2$ & & & $\geq$ & 0 \\
\bottomrule
\end{tabular}
\end{center}
The unboundedness of the problem can be detected from the first column.
\begin{figure}[H]
\centering
\includegraphics[width=0.3\linewidth]{./img/lp_unbounded.png}
\end{figure}
\end{example}
\end{description}
\subsection{Algorithm}
Given an LP problem $\mathcal{P}$ in standard form, the steps of the simplex algorithm are:
\begin{enumerate}
\item Set $k=0$, find a feasible basis $\calB_k$ and reformulate $\mathcal{P}$ according to it.
\item If the basis feasible solution is optimal, return.
\item If $\mathcal{P}$ is unbounded, return.
\item Select an entering variable $x^\text{in}$.
\item Select a leaving variable $x^\text{out}$.
\item Let $\calB_{k+1} = \calB_k \cup \{ x^\text{in} \} \smallsetminus \{ x^\text{out} \}$ and reformulate $\mathcal{P}$ according to the new basis.
\item Set $k = k + 1$ and go to Point 2.
\end{enumerate}
\begin{description}
\item[Properties] \phantom{}
\begin{itemize}
\item If all basis feasible solutions are non-degenerate, the simplex algorithm always terminates (as the solution is always strictly improving).
\item In the general case, the algorithm might stall by ending up in a loop.
\item The worst-case time complexity is $O(2^n)$. The average case is polynomial.
\end{itemize}
\end{description}
\begin{remark}
If the problem has lots of vertexes, the interior point method (polynomial complexity) or approximation algorithms should be preferred.
\end{remark}
\subsection{Two-phase method}
\marginnote{Two-phase method}
Method that solves an LP problem by first finding an initial feasible basis $\calB_0$ and determining if the LP problem is unsatisfiable.
Given an LP problem $\mathcal{P}$ ($\max\{ \vec{cx} \} \text{ subject to } \matr{A}\vec{x} = \vec{b}$ with $m$ constraints and $n$ variables),
the two-phase method works as follows:
\begin{descriptionlist}
\item[Phase 1]
Define a new artificial problem $\mathcal{P}'$ from $\mathcal{P}$ with new variables $s_1, \dots, s_m$ as follows:
\[
\begin{split}
\max\left\{ -\sum_{i=1}^{m} s_i \right\} \text{ subject to }
&\sum_{j=1}^{n} a_{i,j} x_j + s_i = b_i \text{ for } i \in \{ k \in \{ 1, \dots, m \} \mid b_k \geq 0 \} \,\land \\
&\sum_{j=1}^{n} a_{i,j} x_j - s_i = b_i \text{ for } i \in \{ k \in \{ 1, \dots, m \} \mid b_k < 0 \} \,\land \\
& s_i, x_j \geq 0
\end{split}
\]
\begin{remark}
It holds that $-\sum_{i=1}^{m} s_i \leq 0$ and
$\calB' = \{ s_1, \dots, s_m \}$ is always a feasible basis corresponding to the basis feasible solution $x_j = 0$, $s_i = \vert b_i \vert$
\end{remark}
The problem $\mathcal{P}'$ with basis $\calB'$ can be solved through the simplex method.
\begin{theorem}
Let $\mathcal{F}_\mathcal{P}$ be the feasible region of $\mathcal{P}$. It holds that:
\[ \mathcal{F}_\mathcal{P} \neq \varnothing \,\iff\, \sum_{i=1}^{m} s_i = 0 \]
In other words:
\begin{itemize}
\item If the optimal solution of $\mathcal{P}'$ is $< 0$, then $\mathcal{P}$ is unsatisfiable.
\item Otherwise, the basis $\calB_{\mathcal{P}'}$ corresponding to the optimal solution of $\mathcal{P}'$
can be used as the initial basis of $\mathcal{P}$, after removing the variables $s_i$.
\end{itemize}
\end{theorem}
\item[Phase 2]
Solve $\mathcal{P}$ through the simplex algorithm using as initial basis $\calB_{\mathcal{P}'}$.
\end{descriptionlist}