輸送問題

同義語:transportation problemHitchcock問題

概要

輸送問題(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 の定理を特別な場合として含む。

$$\newcommand{C}[0]{\mathbb{C}} \newcommand{div}[0]{\mathbin{÷}} \newcommand{N}[0]{\mathbb{N}} \newcommand{Q}[0]{\mathbb{Q}} \newcommand{R}[0]{\mathbb{R}} \newcommand{Z}[0]{\mathbb{Z}} $$

前提知識: 線形計画法, 二部グラフ, 森, 多面体

ある品物を $m$ か所の工場から $n$ か所の店へ運ぶ。工場 $i$ の出荷量 $a_i$ と店 $j$ の入荷量 $b_j$ が決まっていて、工場 $i$ から店 $j$ へ 1 単位運ぶ費用が $c_{ij}$ であるとき、総費用が最小になる運び方を求めたい。これが 輸送問題 であり、線形計画問題の代表的な型の一つである。工場と店を頂点とし、運ぶ経路を辺とすると、運び方は二部グラフの辺の上の流れとして表せる。
輸送問題は一般の線形計画法の特別な場合だが、制約の形が特別なので、次の 2 つの強い事実が成り立つ。

  • 双対定理:最小費用は、工場と店に「値段」$u_i,v_j$ を付けて $u_i+v_j\le c_{ij}$ を満たすときの $\sum a_iu_i+\sum b_jv_j$ の最大値に等しい(thm-tp-duality)。これから、運び方が最適かどうかを値段の組で確かめられる。
  • 整数性:実行可能領域の頂点は、運ぶ量が正の経路が二部グラフの森をなす運び方であり、$a_i,b_j$ が整数なら頂点の成分はすべて整数である(thm-tp-vertex・cor-tp-integral)。
    この 2 つから、北西隅の規則で頂点を 1 つ作り、値段(ポテンシャル)で最適性を判定し、閉路に沿って運ぶ量を付け替える計算の手順が得られる。$a_i=b_j=1$ の場合が割当問題であり、二重確率行列の頂点は置換行列であるという Birkhoff–von Neumann の定理も系として出てくる。

定義と使える条件

輸送問題

$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}$ の部分グラフが森(閉路をもたないグラフ)であることをいう。
使える条件は次のとおりである。

  1. 供給量・需要量は $0$ 以上(費用 $c_{ij}$ は負でもよい)。
  2. 釣り合っている($\sum a_i=\sum b_j$)。釣り合わないときは下の rem-tp-dummy で釣り合った問題に直す。
  3. 整数性の結論(cor-tp-integral)には、$a,b$ の成分が整数であることを加える。費用は整数でなくてよい。
釣り合わない問題とダミー

供給の合計が需要の合計より大きく、出荷量を「$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. 輸送問題と双対問題はどちらも最適解をもち、
    $$ \min_{x\in T(a,b)}c\cdot x=\max\Bigl\{\sum_ia_iu_i+\sum_jb_jv_j\Bigm|u_i+v_j\le c_{ij}\ (\text{すべての }i,j)\Bigr\} $$
    である。
  2. $x\in T(a,b)$ が最適解であるためには、双対実行可能な $(u,v)$ で、$x_{ij}>0$ となるすべての $(i,j)$ について $u_i+v_j=c_{ij}$ となるものが存在することが必要十分である。このとき $(u,v)$ は双対問題の最適解である。

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. $T(a,b)$ の頂点の正の成分は $m+n-1$ 個以下である。
  2. $a,b$ の成分が整数なら、$T(a,b)$ の頂点の成分はすべて整数である。
  3. 釣り合っていて $a,b$ の成分が整数なら、成分がすべて整数の最適解が存在し、頂点のなかからとれる。

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$ の間くり返す。

  1. $t:=\min(a'_i,b'_j)$ とし、$x_{ij}:=t$、$a'_i\leftarrow a'_i-t$、$b'_j\leftarrow b'_j-t$ とする。
  2. $a'_i=0$ かつ $i< m$ なら $i\leftarrow i+1$、そうでなければ $j\leftarrow j+1$ とする。
    選ばれなかった成分は $0$ とする。選んだ位置の集合を $T_0$ とする。
北西隅の規則の正しさ

釣り合った輸送問題について、北西隅の規則は $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$ となるものを保ちながら、次をくり返す。

  1. $u_1:=0$ と、$(i,j)\in T$ についての $u_i+v_j=c_{ij}$ から $u,v$ を求める。$T$ は全域木なので、$r_1$ から木の辺をたどって順に決まり、解はただ 1 つである。
  2. 被約費用 $r_{ij}:=c_{ij}-u_i-v_j$ を計算する($T$ の上では $0$)。すべて $r_{ij}\ge0$ なら止める。
  3. $r_e< 0$ となる $e=(k,l)\notin T$ を選ぶ。$T$ に $e$ を加えるとちょうど 1 つの閉路 $C$ ができる(木 の命題「木に辺を1本加えるとちょうど1つの閉路ができる」)。$C$ の位置に、$e$ から始めて交互に $+$、$-$ の符号を付け、$-$ の位置での $x$ の最小値を $\theta$ とする。
  4. $+$ の位置に $\theta$ を足し、$-$ の位置から $\theta$ を引く。$-$ の位置で $0$ になったものを 1 つ選んで $f$ とし、$T\leftarrow(T\cup\{e\})\setminus\{f\}$ とする。1 へ戻る。
    北西隅の規則の $T_0$ から始めればよい。退化して $\operatorname{supp}x$ が $m+n-1$ 個より少ないときも、$T$ には値 $0$ の位置が入っているので、手順はそのまま使える。
付け替えの正しさ

手順 3・4 で得た $x'$ と $T'$ について、次が成り立つ。

  1. $x'\in T(a,b)$ であり、$T'$ は全域木で $\operatorname{supp}x'\subseteq T'$ である。
  2. $c\cdot x'=c\cdot x+\theta\,r_e$。とくに $\theta>0$ なら費用は真に減る。
  3. 手順 2 で止まったとき、$x$ は最適解であり、$(u,v)$ は双対問題の最適解である。

1 の要点:符号の行列 $d$ の各行・各列の和は $0$ で、$T'$ は閉路の辺を 1 本除いた連結グラフである。

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'$ に含まれる。


2:$c_{ij}=r_{ij}+u_i+v_j$ なので
$$ c\cdot d=\sum_{i,j}r_{ij}d_{ij}+\sum_iu_i\Bigl(\sum_jd_{ij}\Bigr)+\sum_jv_j\Bigl(\sum_id_{ij}\Bigr)=\sum_{i,j}r_{ij}d_{ij} $$
である。$d$ が $0$ でない位置は $e$ と $T$ の位置であり、$T$ の上で $r=0$、$d_e=1$ なので $c\cdot d=r_e$、したがって $c\cdot x'=c\cdot x+\theta r_e$ である。
3:止まったとき $(u,v)$ は双対実行可能で、$x_{ij}>0$ なら $(i,j)\in T$ なので $u_i+v_j=c_{ij}$ である。thm-tp-duality の 2 による。$\square$

各段の $x$ は支えが森なので頂点であり(thm-tp-vertex)、頂点は有限個である。各段で $\theta>0$ なら費用が真に減り、同じ頂点に戻らないので、手順は有限回で止まる。$\theta=0$ の段(退化)では費用が変わらず、この議論は使えない。退化した場合の扱いには、この記事では立ち入らない。

例題

3 つの工場と 3 つの店

供給量 $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$ の行列を 置換行列 という。

Birkhoff–von Neumann の定理
  1. 二重確率行列の全体の頂点は、ちょうど $n!$ 個の置換行列である。
  2. 二重確率行列はどれも置換行列の凸結合である。
  3. 費用 $c$ の割当問題「$\sum_ic_{i\sigma(i)}$ を最小にする置換 $\sigma$ を求める」の最小値は、$a=b=(1,\dots,1)$ の輸送問題の最小値に等しい。

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}$最適解が存在する
表の反例の確かめ

どの行も、左の条件だけを外している。

4 つの確かめを開く

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 と同じ形の双対性が中心にある。この記事では立ち入らない。

関連項目

参考文献

[1]
J. A. Bondy, U. S. R. Murty, Graph Theory with Applications, Macmillan / American Elsevier, 1976, §5.5 The Optimal Assignment Problem(pp. 86–90、実行可能な頂点のラベル、Theorem 5.5、Kuhn–Munkres の方法)

Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する