輸送問題(transportation problem)とは、供給量 $a_i$ の $m$ か所から需要量 $b_j$ の $n$ か所へ単位費用 $c_{ij}$ で品物を運ぶとき、行の和が $a_i$、列の和が $b_j$ の $x\ge0$ で総費用 $\sum c_{ij}x_{ij}$ を最小にする線形計画問題である。供給と需要の合計が等しければ最適解があり、最小費用は $u_i+v_j\le c_{ij}$ を満たす $\sum a_iu_i+\sum b_jv_j$ の最大値に等しい(双対定理)。実行可能領域の頂点は正の成分の位置が二部グラフの森をなす解で、$a,b$ が整数なら頂点も整数なので、整数の最適解がある。北西隅の規則とポテンシャル法で解け、割当問題や Birkhoff–von Neumann の定理を特別な場合として含む。
ある品物を $m$ か所の工場から $n$ か所の店へ運ぶ。工場 $i$ の出荷量 $a_i$ と店 $j$ の入荷量 $b_j$ が決まっていて、工場 $i$ から店 $j$ へ 1 単位運ぶ費用が $c_{ij}$ であるとき、総費用が最小になる運び方を求めたい。これが 輸送問題 であり、線形計画問題の代表的な型の一つである。工場と店を頂点とし、運ぶ経路を辺とすると、運び方は二部グラフの辺の上の流れとして表せる。
輸送問題は一般の線形計画法の特別な場合だが、制約の形が特別なので、次の 2 つの強い事実が成り立つ。
$m,n\ge1$ とし、供給量 $a=(a_1,\dots,a_m)$、需要量 $b=(b_1,\dots,b_n)$(成分はすべて $0$ 以上の実数)と 費用 $c=(c_{ij})$(実数)が与えられたとき、$mn$ 個の変数 $x=(x_{ij})$ についての線形計画問題
$$
\text{最小化 }\sum_{i=1}^m\sum_{j=1}^nc_{ij}x_{ij}\quad\text{条件 }\sum_{j=1}^nx_{ij}=a_i\ (1\le i\le m),\quad\sum_{i=1}^mx_{ij}=b_j\ (1\le j\le n),\quad x\ge0
$$
を 輸送問題(transportation problem)という。条件を満たす $x$ を 輸送計画(実行可能解)、その全体を $T(a,b)$ と書き、$c\cdot x:=\sum_{i,j}c_{ij}x_{ij}$ を $x$ の 費用 という。$\sum_ia_i=\sum_jb_j$ のとき問題は 釣り合っている という。
以下、行の添字 $i$ は供給地、列の添字 $j$ は需要地を表す。輸送計画 $x$ の 支え を $\operatorname{supp}x:=\{(i,j)\mid x_{ij}>0\}$ とする。供給地 $r_1,\dots,r_m$ と需要地 $s_1,\dots,s_n$ を頂点とし、$r_i$ と $s_j$ をすべて辺で結んだ完全二部グラフ $K_{m,n}$ を考え、$(i,j)$ を辺 $r_is_j$ と同一視する。支えはこのグラフの辺の集合であり、以下「支えが森である」とは、すべての頂点と支えの辺からなる $K_{m,n}$ の部分グラフが森(閉路をもたないグラフ)であることをいう。
使える条件は次のとおりである。
供給の合計が需要の合計より大きく、出荷量を「$a_i$ 以下」とする問題(最小化 $c\cdot x$、条件 $\sum_jx_{ij}\le a_i$、$\sum_ix_{ij}=b_j$、$x\ge0$)は、需要地 $n+1$(ダミー)を加えて $b_{n+1}:=\sum_ia_i-\sum_jb_j$、$c_{i,n+1}:=0$ とした釣り合った問題と同じである。実際、もとの問題の実行可能解 $x$ に $x_{i,n+1}:=a_i-\sum_{j\le n}x_{ij}\ge0$ を付け加えると新しい問題の実行可能解になり、費用は変わらない。逆に新しい問題の実行可能解から第 $n+1$ 列を除くと、もとの問題の実行可能解になる。需要の合計が大きい場合は、行と列の役割を入れ替えて同じことをする。
輸送問題が実行可能であるのは、釣り合っているとき、かつそのときに限る。実行可能ならば最適解が存在する。
$x\in T(a,b)$ なら、すべての成分を足して $\sum_ia_i=\sum_{i,j}x_{ij}=\sum_jb_j$ である。逆に $S:=\sum_ia_i=\sum_jb_j$ とおく。$S=0$ なら $a=b=0$ で $x=0$ が実行可能である。$S>0$ なら $x_{ij}:=a_ib_j/S\ge0$ とおくと $\sum_jx_{ij}=a_iS/S=a_i$、$\sum_ix_{ij}=b_j$ なので実行可能である。
実行可能なとき、$x\in T(a,b)$ の各成分は $0\le x_{ij}\le a_i$ を満たすので、$T(a,b)$ は $\mathbb{R}^{mn}$ の有界な集合である。有限個の等式と不等式 $x_{ij}\ge0$ で定まるので閉集合でもあり、空でない。連続関数 $x\mapsto c\cdot x$ は空でない有界閉集合の上で最小値をとるので、最適解が存在する。$\square$
輸送問題を一般の線形計画問題として見ると、変数は $mn$ 個、等式の制約は $m+n$ 本である。制約の係数行列の列 $(i,j)$ は、第 $i$ 行と第 $m+j$ 行だけが $1$ のベクトルで、これは $K_{m,n}$ の辺 $r_is_j$ の接続ベクトルである。輸送問題の特別な性質はすべて、この「列が二部グラフの辺である」ことから来る。
| 事柄 | 主張 | 使える条件 | 根拠 |
|---|---|---|---|
| 実行可能性 | 実行可能 $\iff\sum a_i=\sum b_j$ | $a,b\ge0$ | prop-tp-feasible |
| 双対問題 | 最大化 $\sum_ia_iu_i+\sum_jb_jv_j$、条件 $u_i+v_j\le c_{ij}$($u,v$ の符号は自由) | — | def-tp-dual |
| 費用の差の式 | $c\cdot x-\bigl(\sum a_iu_i+\sum b_jv_j\bigr)=\sum_{i,j}(c_{ij}-u_i-v_j)x_{ij}$ | $x\in T(a,b)$、$u,v$ は任意 | lem-tp-gap |
| 双対定理 | 最小費用 $=$ 双対問題の最大値(両方とも達成される) | 釣り合っている | thm-tp-duality |
| 最適性の判定 | $x$ が最適 $\iff$ $u_i+v_j\le c_{ij}$ で、$x_{ij}>0$ なら $u_i+v_j=c_{ij}$ となる $u,v$ がある | 釣り合っている | thm-tp-duality |
| 頂点の形 | $x$ が頂点 $\iff$ $\operatorname{supp}x$ が森 | $x\in T(a,b)$ | thm-tp-vertex |
| 正の成分の個数 | 頂点の正の成分は $m+n-1$ 個以下 | — | cor-tp-integral |
| 整数性 | 頂点の成分は整数。整数の最適解がある | $a,b$ が整数 | cor-tp-integral |
| 北西隅の規則 | 出力は頂点 | 釣り合っている | prop-tp-northwest |
| 付け替えの費用 | 閉路に沿って $\theta$ 動かすと費用は $\theta\,r_{e}$ だけ変わる | $r$ は被約費用 | prop-tp-pivot |
| 二重確率行列 | 頂点は置換行列。どれも置換行列の凸結合 | $a=b=(1,\dots,1)$ | cor-tp-birkhoff |
def-tp-problem の輸送問題に対して、$m+n$ 個の変数 $u=(u_1,\dots,u_m)$、$v=(v_1,\dots,v_n)$ についての問題
$$
\text{最大化 }\sum_{i=1}^ma_iu_i+\sum_{j=1}^nb_jv_j\quad\text{条件 }u_i+v_j\le c_{ij}\ (1\le i\le m,\ 1\le j\le n)
$$
を 双対問題 という。条件を満たす $(u,v)$ を 双対実行可能 といい、$u_i,v_j$ を ポテンシャル(値段)と呼ぶ。$r_{ij}:=c_{ij}-u_i-v_j$ を $(u,v)$ に関する 被約費用 という。
$u_i$ は工場 $i$ で品物を買い取る値段の符号を変えたもの、$v_j$ は店 $j$ での売値と読める。運送業者が「工場 $i$ で $-u_i$ を払って品物を受け取り、店 $j$ で $v_j$ で売る」と申し出るとき、条件 $u_i+v_j\le c_{ij}$ は、どの経路についても自分で運ぶより安いことを意味する。双対問題は、その条件の下で業者の受け取る総額を最大にする問題である。
$x\in T(a,b)$ と任意の $u\in\mathbb{R}^m$、$v\in\mathbb{R}^n$ について
$$
c\cdot x-\Bigl(\sum_ia_iu_i+\sum_jb_jv_j\Bigr)=\sum_{i,j}(c_{ij}-u_i-v_j)\,x_{ij}
$$
である。とくに $(u,v)$ が双対実行可能なら、左辺は $0$ 以上である(弱双対性)。
行の和と列の和の条件から $\sum_{i,j}u_ix_{ij}=\sum_iu_ia_i$、$\sum_{i,j}v_jx_{ij}=\sum_jv_jb_j$ である。これを右辺に代入すれば左辺になる。$(u,v)$ が双対実行可能なら $c_{ij}-u_i-v_j\ge0$ で $x_{ij}\ge0$ なので、右辺の各項は $0$ 以上である。$\square$
輸送問題が釣り合っているとする。
1:輸送問題を 線形計画法 の不等式標準形 (P) に書き直す。変数 $x\in\mathbb{R}^{mn}$ について
$$
\text{(P${}'$)}\qquad\text{最大化 }(-c)\cdot x\quad\text{条件 }\sum_jx_{ij}\le a_i\ (i),\quad-\sum_ix_{ij}\le-b_j\ (j),\quad x\ge0
$$
を考える。(P$'$) の実行可能解 $x$ について、$S:=\sum_ia_i=\sum_jb_j$ とおくと
$$
S=\sum_jb_j\le\sum_j\sum_ix_{ij}=\sum_i\sum_jx_{ij}\le\sum_ia_i=S
$$
なので途中の不等号はすべて等号であり、各 $i$ で $\sum_jx_{ij}\le a_i$、各 $j$ で $\sum_ix_{ij}\ge b_j$ の不等式もすべて等号になる。したがって (P$'$) の実行可能解の全体はちょうど $T(a,b)$ であり、(P$'$) の最大値は輸送問題の最小値の符号を変えたものである。
(P$'$) の係数行列の列 $(i,j)$ は第 $i$ 成分が $1$、第 $m+j$ 成分が $-1$ で他が $0$ なので、線形計画法 の定義「双対問題」による (P$'$) の双対問題は、変数 $p\in\mathbb{R}^m$、$q\in\mathbb{R}^n$ について
$$
\text{(D${}'$)}\qquad\text{最小化 }\sum_ia_ip_i-\sum_jb_jq_j\quad\text{条件 }p_i-q_j\ge-c_{ij}\ (i,j),\quad p\ge0,\ q\ge0
$$
である。(P$'$) は prop-tp-feasible により実行可能であり、(D$'$) も $q=0$、$p_i:=\max\bigl(0,\max_j(-c_{ij})\bigr)$ で実行可能である。線形計画法 の定理「線形計画法の双対定理」により、(P$'$) と (D$'$) はどちらも最適解をもち、最適値は等しい。
$u:=-p$、$v:=q$ とおくと、(D$'$) の条件は $u_i+v_j\le c_{ij}$、$u\le0$、$v\ge0$ になり、目的関数は $-\bigl(\sum a_iu_i+\sum b_jv_j\bigr)$ になる。したがって、輸送問題の最小値 $\mu$ は、双対問題に符号の条件 $u\le0$、$v\ge0$ を加えた問題の最大値に等しく、その最大値は (D$'$) の最適解から得られる $(u^*,v^*)$ で達成される。一方、符号の条件のない双対実行可能な $(u,v)$ はどれも、lem-tp-gap により $\sum a_iu_i+\sum b_jv_j\le\mu$ を満たす。よって双対問題の最大値も $\mu$ で、$(u^*,v^*)$ で達成される。
2:条件を満たす $(u,v)$ があれば、lem-tp-gap の右辺は $x_{ij}>0$ の項で $c_{ij}-u_i-v_j=0$、$x_{ij}=0$ の項で $0$ なので、$c\cdot x=\sum a_iu_i+\sum b_jv_j$ である。任意の $x'\in T(a,b)$ について、弱双対性から $c\cdot x'\ge\sum a_iu_i+\sum b_jv_j=c\cdot x$ なので $x$ は最適であり、同様に $(u,v)$ も双対問題の最適解である。逆に $x$ が最適なら、1 の双対問題の最適解 $(u,v)$ について lem-tp-gap の左辺は $0$ である。右辺の各項は $0$ 以上なので、どの項も $0$ であり、$x_{ij}>0$ なら $c_{ij}=u_i+v_j$ である。$\square$
双対問題の変数 $u,v$ には符号の条件がない。これは輸送問題の制約が等式だからである。また、すべての $u_i$ に定数 $t$ を足し、すべての $v_j$ から $t$ を引いても、条件 $u_i+v_j\le c_{ij}$ も目的関数の値も変わらない($\sum a_i=\sum b_j$ を使う)。そこで計算では $u_1=0$ と決めてよい。
$T(a,b)$ は有限個の 1 次不等式(等式は 2 つの不等式とみる)で定まる多面体であり、その頂点と端点は一致する(多面体 の定理「頂点の特徴づけ」)。以下で、頂点を支えの形で特徴づける。鍵は次の補題である。
$F$ を $K_{m,n}$ の辺の集合で、森をなすものとする。$\operatorname{supp}x\subseteq F$ を満たす $x\in T(a,b)$ は高々 1 つである。さらに $a,b$ の成分が整数なら、そのような $x$ の成分はすべて整数である。
要点:森には葉があり、葉の行(または列)の成分は供給量(需要量)で決まる。その辺を除いた小さい問題に帰納法を当てる。
$F$ の辺の本数 $\lvert F\rvert$ についての帰納法で、すべての $a,b$ について同時に示す。$\lvert F\rvert=0$ なら、条件を満たす $x$ は $x=0$ しかない。
$\lvert F\rvert\ge1$ とする。森 の命題「葉の存在」により、頂点 $r_1,\dots,r_m,s_1,\dots,s_n$ と辺 $F$ のグラフには次数 $1$ の頂点がある。それが $r_i$ で、ただ 1 本の辺が $(i,j)\in F$ であるとする($s_j$ の場合は行と列の役割を入れ替える)。$\operatorname{supp}x\subseteq F$ となる $x\in T(a,b)$ では、第 $i$ 行で $0$ でない成分は $x_{ij}$ だけなので $x_{ij}=a_i$ である。$a'$ を $a$ の第 $i$ 成分を $0$ にしたもの、$b'$ を $b$ の第 $j$ 成分を $b_j-a_i$ にしたものとし、$x'$ を $x$ の $(i,j)$ 成分を $0$ にしたものとする。$x'\ge0$ で、行の和は $a'$、列の和は $b'$ なので、$x'\in T(a',b')$ かつ $\operatorname{supp}x'\subseteq F':=F\setminus\{(i,j)\}$ である($b'_j=\sum_{k\ne i}x_{kj}\ge0$ である)。$F'$ は森で $\lvert F'\rvert=\lvert F\rvert-1$ である。
条件を満たす $x,y$ が 2 つあれば、$x_{ij}=y_{ij}=a_i$ で、$x',y'$ はどちらも $T(a',b')$ の元で支えが $F'$ に含まれるから、帰納法の仮定により $x'=y'$、したがって $x=y$ である。$a,b$ が整数なら $x_{ij}=a_i$ と $a',b'$ は整数で、帰納法の仮定により $x'$ の成分も整数なので、$x$ の成分は整数である。$\square$
$x\in T(a,b)$ が $T(a,b)$ の頂点であるためには、$\operatorname{supp}x$ が森であることが必要十分である。
必要性:$\operatorname{supp}x$ が閉路 $r_{i_1}s_{j_1}r_{i_2}s_{j_2}\cdots r_{i_k}s_{j_k}r_{i_1}$($k\ge2$、頂点は相異なる)を含むとする。$i_{k+1}:=i_1$ とし、行列 $d$ を、$(i_l,j_l)$ で $1$、$(i_{l+1},j_l)$ で $-1$($l=1,\dots,k$)、ほかで $0$ と定める。閉路上の各行 $i_l$ には $+1$ の成分 $(i_l,j_l)$ と $-1$ の成分 $(i_l,j_{l-1})$($j_0:=j_k$)がちょうど 1 つずつあり、各列 $j_l$ にも $+1$ の $(i_l,j_l)$ と $-1$ の $(i_{l+1},j_l)$ が 1 つずつあるので、$d$ の各行・各列の和は $0$ である。閉路の辺での $x$ の成分の最小値を $\varepsilon>0$ とすると、$x\pm\varepsilon d\ge0$ で、行と列の和は $x$ と同じなので $x\pm\varepsilon d\in T(a,b)$ である。$x=\frac12(x+\varepsilon d)+\frac12(x-\varepsilon d)$ で $d\ne0$ なので、$x$ は端点でなく、頂点でない。
十分性:$\operatorname{supp}x$ が森であるとし、$x=(1-t)y+tz$($y,z\in T(a,b)$、$0< t< 1$)とする。$x_{ij}=0$ なら、$y_{ij},z_{ij}\ge0$ と $(1-t)y_{ij}+tz_{ij}=0$ から $y_{ij}=z_{ij}=0$ である。よって $y,z$ の支えも森 $\operatorname{supp}x$ に含まれ、lem-tp-forest により $y=x=z$ である。したがって $x$ は端点であり、頂点である。$\square$
1:頂点 $x$ の支えは $m+n$ 個の頂点の上の森なので、森 の定理「森の同値条件」の 4 により辺の本数は $m+n-(\text{連結成分の個数})\le m+n-1$ である。2:thm-tp-vertex により支えは森なので、lem-tp-forest を $F=\operatorname{supp}x$ に当てる。3:prop-tp-feasible により最適解がある。$T(a,b)$ は条件 $x\ge0$ を含むので直線を含まず、線形計画法 の定理「最適解は頂点でとれる」(最大化 $(-c)\cdot x$ として当てる)により頂点の最適解がある。それは 2 により整数である。$\square$
費用 $c$ が整数でなくても 3 は成り立つ。整数であることが要るのは、制約の右辺 $a,b$ だけである。
北西隅の規則(最初の頂点を作る):$a'=a$、$b'=b$、$i=j=1$ から始め、次を $j\le n$ の間くり返す。
釣り合った輸送問題について、北西隅の規則は $m+n-1$ 回で止まり、出力 $x$ は $T(a,b)$ の頂点である。選んだ位置の集合 $T_0$ は $K_{m,n}$ の全域木であり、$\operatorname{supp}x\subseteq T_0$ である。
要点:右へ進むのは $b'_j$ が $0$ になったとき、下へ進むのは $a'_i$ が $0$ になったときで、位置は $(1,1)$ から $(m,n)$ への階段状の道をなす。
各段の後でつねに $\sum_ka'_k=\sum_lb'_l$ である。手順 2 で下へ進むときは $a'_i=0$ である。右へ進むときに $b'_j=0$ であることを示す:$i< m$ なら $a'_i>0$ なので手順 1 で $t=b'_j$ だった。$i=m$ なら、第 $m$ 行より上の $a'$ と第 $j$ 列より左の $b'$ はすでに $0$ なので(帰納的に)、$a'_m=\sum_{l\ge j}b'_l\ge b'_j$ で、やはり $t=b'_j$ だった。
次に、$i< m$ のまま $j=n$ から右へ進むことはない。そうなるのは手順 1 の後に $a'_i>0$ のときだが、そのとき $b'$ はすべて $0$ で、$\sum a'=\sum b'=0$ に反する。よって位置は $(1,1)$ から右か下へ 1 つずつ進んで $(m,n)$ に達し、その後右へ出て止まる。選んだ位置は $m+n-1$ 個である。最後の $(m,n)$ の段の後では、上の議論により $a'$ と $b'$ はすべて $0$ である。$a'_k=a_k-\sum_lx_{kl}$、$b'_l=b_l-\sum_kx_{kl}$ なので $x\in T(a,b)$ である。
続く 2 つの位置は行か列を共有するので、$T_0$ の辺のグラフは連結で、すべての $r_k,s_l$ を含む。頂点 $m+n$ 個・辺 $m+n-1$ 本の連結グラフなので、森 の定理「森の同値条件」の 4 により森、すなわち全域木である。$\operatorname{supp}x\subseteq T_0$ は森なので、thm-tp-vertex により $x$ は頂点である。$\square$
ポテンシャル法(頂点から頂点へ費用を下げる):$K_{m,n}$ の全域木 $T$ で $\operatorname{supp}x\subseteq T$ となるものを保ちながら、次をくり返す。
手順 3・4 で得た $x'$ と $T'$ について、次が成り立つ。
1 の要点:符号の行列 $d$ の各行・各列の和は $0$ で、$T'$ は閉路の辺を 1 本除いた連結グラフである。
$C$ は二部グラフの閉路なので長さが偶数で、付けた符号の行列を $d$ とすると、prf-tp-vertex と同じく $d$ の各行・各列の和は $0$ である。$x'=x+\theta d$ の行と列の和は $x$ と同じで、$\theta$ の選び方から $x'\ge0$ である。$T\cup\{e\}$ は連結で、その閉路 $C$ の辺 $f$ を除いても連結なままであり、辺は $m+n-1$ 本なので、森 の定理「森の同値条件」の 4 により $T'$ は全域木である。$x'$ の支えは $(\operatorname{supp}x\cup\{e\})\setminus\{f\}\subseteq T'$ に含まれる。
各段の $x$ は支えが森なので頂点であり(thm-tp-vertex)、頂点は有限個である。各段で $\theta>0$ なら費用が真に減り、同じ頂点に戻らないので、手順は有限回で止まる。$\theta=0$ の段(退化)では費用が変わらず、この議論は使えない。退化した場合の扱いには、この記事では立ち入らない。
供給量 $a=(20,30,25)$、需要量 $b=(10,35,30)$(合計はどちらも $75$)、費用を
$$
c=\begin{pmatrix}8&6&10\\9&12&13\\14&9&16\end{pmatrix}
$$
とする。
使う公式:prop-tp-northwest、ポテンシャル法(prop-tp-pivot)、thm-tp-duality の 2。
答え:最小費用は $735$ で、最適解は $x_{12}=10$、$x_{13}=10$、$x_{21}=10$、$x_{23}=20$、$x_{32}=25$(ほかは $0$)。双対問題の最適解は $u=(0,3,3)$、$v=(6,6,10)$ である。
北西隅の規則の解は $x_{11}=10$、$x_{12}=10$、$x_{22}=25$、$x_{23}=5$、$x_{33}=25$ で、費用は $905$ である。最適解の最適性は、次の被約費用 $r_{ij}=c_{ij}-u_i-v_j$ がすべて $0$ 以上で、$x_{ij}>0$ の位置で $0$ になっていることから分かる。
| $v_1=6$ | $v_2=6$ | $v_3=10$ | |
|---|---|---|---|
| $u_1=0$ | $r=2$ | $x=10$($r=0$) | $x=10$($r=0$) |
| $u_2=3$ | $x=10$($r=0$) | $r=3$ | $x=20$($r=0$) |
| $u_3=3$ | $r=5$ | $x=25$($r=0$) | $r=3$ |
双対問題の値は $20\cdot0+30\cdot3+25\cdot3+10\cdot6+35\cdot6+30\cdot10=735$ で、費用と一致する。最適解の正の成分は $5=m+n-1$ 個である。
1 回目:$T_0=\{(1,1),(1,2),(2,2),(2,3),(3,3)\}$ から $u=(0,6,9)$、$v=(8,6,7)$。被約費用は $r_{13}=3$、$r_{21}=-5$、$r_{31}=-3$、$r_{32}=-6$。$e=(3,2)$ をとると閉路は $(3,2)^+,(3,3)^-,(2,3)^+,(2,2)^-$ で、$\theta=\min(25,25)=25$。$x_{32}=25$、$x_{23}=30$、$x_{22}=x_{33}=0$ となり、$f=(3,3)$ を除く($(2,2)$ は値 $0$ のまま $T$ に残る)。費用は $905-6\cdot25=755$。
2 回目:$u=(0,6,3)$、$v=(8,6,7)$。$r_{21}=-5$ だけが負。閉路は $(2,1)^+,(2,2)^-,(1,2)^+,(1,1)^-$ で、$\theta=\min(0,10)=0$(退化)。$f=(2,2)$ を除き、$x$ も費用 $755$ も変わらない。
3 回目:$u=(0,1,3)$、$v=(8,6,12)$。$r_{13}=-2$ だけが負。閉路は $(1,3)^+,(1,1)^-,(2,1)^+,(2,3)^-$ で、$\theta=\min(10,30)=10$。$x_{13}=10$、$x_{21}=10$、$x_{23}=20$、$x_{11}=0$ となり、費用は $755-2\cdot10=735$。
4 回目:$u=(0,3,3)$、$v=(6,6,10)$ で被約費用はすべて $0$ 以上なので止まる。
3 人に 3 つの仕事を 1 つずつ割り当て、人 $i$ が仕事 $j$ をする費用を
$$
c=\begin{pmatrix}4&1&3\\2&0&5\\3&2&2\end{pmatrix}
$$
とする。これは $a=b=(1,1,1)$ の輸送問題である。
使う公式:cor-tp-birkhoff、thm-tp-duality の 2。
答え:人 1 に仕事 2、人 2 に仕事 1、人 3 に仕事 3 を割り当てるのが最適で、費用は $1+2+2=5$。$u=(0,-1,0)$、$v=(3,1,2)$ は双対実行可能で($u_i+v_j\le c_{ij}$ を 9 か所で確かめる)、割り当てた 3 か所で等号が成り立ち、双対問題の値も $0-1+0+3+1+2=5$ である。
$3!=6$ 通りの割り当てを全部並べると、仕事の順 $(1,2,3)$、$(1,3,2)$、$(2,1,3)$、$(2,3,1)$、$(3,1,2)$、$(3,2,1)$ の費用は $6,11,5,9,7,6$ で、最小は $5$ である。双対問題の解は、この総当たりをせずに最適性を保証する。
$n\times n$ 行列で、成分が $0$ 以上、各行と各列の和がすべて $1$ のものを 二重確率行列 という。二重確率行列の全体は $T(\mathbf 1,\mathbf 1)$($m=n$、$a=b=(1,\dots,1)$)である。各行・各列にちょうど 1 つ $1$ があり、ほかが $0$ の行列を 置換行列 という。
1:頂点 $x$ は cor-tp-integral の 2 により整数で、$0\le x_{ij}\le1$ なので成分は $0$ か $1$ であり、各行・各列の和が $1$ なので置換行列である。逆に置換行列の支えは、共通の端点をもたない $n$ 本の辺なので閉路を含まず、thm-tp-vertex により頂点である。2:二重確率行列の全体は空でない有界な多面体なので、多面体 の定理「凸多面体は頂点の凸包」と 1 による。3:置換 $\sigma$ に対応する置換行列の費用は $\sum_ic_{i\sigma(i)}$ である。cor-tp-integral の 3 により輸送問題には頂点の最適解があり、1 によりそれは置換行列である。$\square$
割当問題を直接解く方法として、ポテンシャル(Bondy–Murty の「実行可能な頂点のラベル」)を保ちながら増加道を探す Kuhn–Munkres の方法(ハンガリー法)がある(BM76 §5.5、pp. 86–90。重みの和を最大にする形で述べられており、費用の最小化は重みの符号を変えれば同じである)。この記事では証明しない。割当問題そのものは 割当問題 で扱う。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 釣り合い(prop-tp-feasible) | $m=n=1$、$a=(1)$、$b=(2)$ | 輸送計画が存在する |
| $a,b$ が整数(cor-tp-integral の 2) | $m=2$、$n=1$、$a=(\frac12,\frac12)$、$b=(1)$ | 頂点の成分が整数である |
| 頂点であること(cor-tp-integral の 2) | $a=b=(1,1)$、$c=0$、$x_{ij}=\frac12$ | 最適解の成分が整数である |
| $x\ge0$(prop-tp-feasible の最適解の存在) | $a=b=(1,1)$、$c=\begin{pmatrix}0&1\\1&0\end{pmatrix}$ | 最適解が存在する |
どの行も、左の条件だけを外している。
1 行目:$x_{11}$ が $1$ と $2$ に同時に等しくなければならない。2 行目:輸送計画は $x=(\frac12,\frac12)^{\mathsf T}$ だけで、支えは 2 本の辺 $r_1s_1$、$r_2s_1$ で森なので頂点だが、整数でない。データ $a$ だけが整数でない。3 行目:$a,b$ は整数で、費用 $0$ なのでどの輸送計画も最適だが、$x$ の支えは閉路 $r_1s_1r_2s_2r_1$ を含み、頂点でない。最適解のなかには整数のもの(単位行列)もあるが、最適解がすべて整数とは限らない。4 行目:条件 $x\ge0$ を外すと、$d=\begin{pmatrix}1&-1\\-1&1\end{pmatrix}$ について $x=\begin{pmatrix}1&0\\0&1\end{pmatrix}+td$ は行と列の和を保ち、費用は $c\cdot x=-2t\to-\infty$($t\to\infty$)である。釣り合いと整数性は保たれている。
| 誤り | 正しくは | なぜ |
|---|---|---|
| 供給と需要の合計が違うまま北西隅の規則を使う | ダミーの需要地(または供給地)を費用 $0$ で加える | rem-tp-dummy、prop-tp-feasible |
| 双対変数に $u,v\ge0$ の条件を付ける | 符号は自由(等式制約の双対) | thm-tp-duality の証明 |
| 正の成分が $m+n-1$ 個より少ないとき、ポテンシャルが決まらないとする | 値 $0$ の位置を加えて全域木 $T$ にしてから決める | 手順 1、ex-tp-main の 2 回目 |
| 被約費用が負の位置があっても「費用が下がらない段」があるので最適とする | 退化した段($\theta=0$)では費用は変わらないが、最適とは限らない | ex-tp-main の 2・3 回目 |
| 整数性に費用の整数性が要るとする | 要るのは $a,b$ の整数性だけ | cor-tp-integral |
輸送問題は、工場 $r_i$ から店 $s_j$ への弧に費用 $c_{ij}$ を付けた二部グラフ上の最小費用流の問題であり、途中の中継点や弧の容量を許すと一般の最小費用流の問題になる(ネットワークフロー)。容量が整数なら整数値の最大流があるという ネットワークフロー の定理「整数性定理」は、cor-tp-integral と同じ種類の整数性である。
供給と需要を有限個の点の重みから一般の確率分布に替え、費用を距離の関数にした問題は、最適輸送(Monge–Kantorovich の問題)と呼ばれ、解析学・確率論・幾何学で使われる。そこでも thm-tp-duality と同じ形の双対性が中心にある。この記事では立ち入らない。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する