@@ -373,7 +373,7 @@ The above warning message from SciPy points out that A is not full rank.
373373374374This indicates that the linear program has been set up to include one or more redundant constraints.
375375376-Here, the source of the redundancy is that the set of restrictions {eq}`sumconstraints`.
376+Here, the source of the redundancy is the structure of restrictions {eq}`sumconstraints`.
377377378378Let's explore this further by printing out $A$ and staring at it.
379379@@ -554,7 +554,7 @@ and $v$ is attached to constraints
554554555555* $(\mathbf{I}_n \otimes \mathbf{1}_m') \operatorname{vec}(X) = q.$
556556557-Components of the vectors $u$ and $v$ of **values** are **shadow prices** of the quantities appearing on the right sides of those constraints.
557+Components of the vectors $u$ and $v$ of per unit **values** are **shadow prices** of the quantities appearing on the right sides of those constraints.
558558559559We can write the dual problem as
560560@@ -626,7 +626,8 @@ linprog(-b[:-1], A_ub=A[:-1].T, b_ub=C_vec,
626626627627### Interpretation of dual problem
628628629-By **strong duality**, we know that:
629+By **strong duality** (please see this lecture
630+{doc}`Linear Programming <lp_intro>`), we know that:
630631631632$$
632633\sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} = \sum_{i=1}^m p_i u_i + \sum_{j=1}^n q_j v_j