## Extreme points of transportation polytope

### Remember to vote up questions/answers you find interesting or helpful (requires 15 reputation points)

I'm interested in $n \times m$ joint probability tables with prescribed row and column marginals. Such tables form a convex set known as the transportation polytope. What are the extreme points of this set?

For example, for a $2 \times 2$ case of $$\begin{bmatrix} x_{11} & x_{12}\\ x_{21} & x_{22} \end{bmatrix}$$ with row constraint $x_{11} + x_{12} = 0.9$, column constraint $x_{11} + x_{21} = 0.8$, and $\sum_{i,j} x_{ij} = 1$, then there are two extreme points, $$\begin{bmatrix} 0.8 & 0.1\\ 0 & 0.1 \end{bmatrix}, \quad \begin{bmatrix} 0.7 & 0.2\\ 0.1 & 0 \end{bmatrix}.$$ And every joint table with the constraint lies in the convex hull of these two points.

Is there a general way of finding the extreme points? In other words, is there a generalization to Birkhoff–von Neumann theorem for this case?

-
The Birkhoff von-Neumann theorem shows that the output size may be factorial, so you should not expect to solve such problems efficiently (at least in the input size). Are you looking for something more tailored to this problem than general purpose algorithms/packages such as those available at ifor.math.ethz.ch/~fukuda/cdd_home and cgm.cs.mcgill.ca/~avis/C/lrs.html? – Noah Stein Sep 20 2011 at 0:09

1
Also, I don't see why this is tagged community wiki. – Noah Stein Sep 20 2011 at 0:09
My bad, I didn't realize that the community wiki box was checked. How do I undo it? – Memming Sep 20 2011 at 15:41
I checked the FAQ, and there's no way to revert the community wiki. :'( – Memming Sep 20 2011 at 15:51

## 2 Answers

A complete solution with references can be found in Section 8.1 of Brualdi, Combinatorial Matrix Classes, Cambridge University Press, 2006.

Here is how to make an extreme point, and all extreme points can be made in this way. Suppose `$\{r_i\}$` and `$\{c_j\}$` are the required row and column sums. Start with a zero matrix $A=(a_{ij})$. Choose $i,j$ so that $r_i,c_j>0$. Set $a_{ij}=\min(r_i,c_j)$ and subtract $\min(r_i,c_j)$ from both $r_i$ and $c_j$. Keep doing this until all the row sums or all the columns sums are zero (and it better be both of them zero or there is no such matrix).

And a characterization. For any matrix in the class you can define a bipartite graph with $m$ row-vertices and $n$ column-vertices where the edges indicate where the matrix entries are non-zero. Then the matrix is an extreme point iff the graph has no cycles.

-

I've been reading the book, and it has been extremely helpful. Thank you so much. – Memming Oct 15 2011 at 19:19

### You can accept an answer to one of your own questions by clicking the check mark next to it. This awards 15 reputation points to the person who answered and 2 reputation points to you.

The answer above is partially wrong. The kind of extreme points which are obtained through the construction above, known as the northwest corner rule, can only generate a subset of extreme points (not all of them) of the polytope. To be more precise, the northwest rule can only generate those extreme points for which the graph (as described in the bottom of the answer above) is a caterpillar tree, as can be checked further here: http://www.newton.ac.uk/preprints/NI02033.pdf

-

Thanks for citing that interesting paper.  However, I don't believe your comment is correct.  The NWC rule specifies (for a particular permutation of the rows and columns) exactly which entry must be fixed next, but in my description any entry can be picked that has non-zero row and column requirements. This allows a lot more choices. Try row sums 2,2,2 and column sums 3,1,1,1; it is quite easy to make the tree with three branches of length two (not a caterpillar).  Any feasible graph which is acyclic (i.e. a forest) can be made: start with a leaf and use induction. – Brendan McKay Apr 12 2012 at 14:36
Apologies... I misread your answer. You are right, what you describe is not the NWC but a more general approach. Many thanks for your comment, it was very useful. – mcuturi Apr 13 2012 at 1:08
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 14, "mathjax_display_tex": 2, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9217432737350464, "perplexity_flag": "head"}