技能一覧 › 大学数学 オペレーションズ・リサーチ

割当問題(ハンガリー法)

の費用表で、各行・各列の最小値を引く変形と、0 を最少の線で覆う操作をくり返し、総費用を最小にする割当とその最小値を求められる

前提

この技能までの道筋(9 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 樹形図で数え上げる (算数 場合の数)
  2. 積の法則と和の法則 (算数 場合の数)
  3. 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
  4. 順列・円順列・重複順列 (数学A 場合の数と確率)
  5. 組合せ (数学A 場合の数と確率)
  6. グラフの次数と握手補題 (大学数学 グラフ理論)
  7. 2 部グラフと奇閉路 (大学数学 グラフ理論)
  8. 最大独立集合と最小頂点被覆 (大学数学 グラフ理論)
  9. 最大マッチングとケーニヒの定理 (大学数学 グラフ理論)

説明

人に 個の仕事を 1 人 1 つずつ割り当て、総費用を最小にする問題を割当問題といいます。費用表( の表)の第 行第 列を (人 が仕事 をするときの費用)とします。すると割当問題は、各行・各列からちょうど 1 つずつ成分を選んで、その和を最小にする問題になります。選び方は 通りあり、 が大きいと全部は調べられません。ハンガリー法は、表の変形と 2 部グラフの最大マッチングを組み合わせて、最適な割当とその最小費用を効率よく求める方法です。

なぜそうしてよいのか

行・列から定数を引いても、最適な割当は変わりません。 どの割当も各行・各列からちょうど 1 つずつ成分を選びます。そのため第 行の全成分から を引くと、どの割当の総費用もちょうど だけ減ります。列についても同じです。したがって、各行・各列から最小値を引いた表で最適な割当は、元の表でも最適です。変形後の表の成分はすべて 以上です。よって値 の成分だけを使う割当が見つかれば、その総費用は でこれ以上小さくできず、その割当が最適です。

0 だけで割当できるかは、最大マッチングの問題です。 行を表す頂点と列を表す頂点を用意し、成分が の行と列を辺で結ぶと、2 部グラフ(0 のグラフ)ができます。0 だけを使う割当は、このグラフの大きさ のマッチングそのものです。また「0 をすべて覆う行・列の線」は、このグラフの頂点被覆そのものです。ケーニヒの定理より、線の最少本数 は最大マッチングの大きさ に等しくなります。

最少の線は、最大マッチングから次のように作れます。 マッチングに使われていない行をすべて出発点にします。そこから「行→列は の辺」「列→行はマッチングの辺」をたどり、到達できる頂点をすべて求めます。そのうえで、到達できない行と到達できる列に線を引きます。
- これで はすべて覆われます。成分 が で行 に到達できるなら、列 にも到達できるので列の線で覆われます。行 に到達できないなら、行の線で覆われます。
- 線の本数は です。到達できる列はどれもマッチングに使われています(使われていなければ増加道ができ、最大であることに反します)。その相手の行には到達できます。到達できない行は出発点でないので、マッチングに使われています。こうして各線にはそれぞれ別のマッチング辺が対応するので、本数は 以下です。被覆なので 以上でもあり、ちょうど 本になります。

のときの調整。 線で覆われていない成分の最小値を とします(覆われていない成分はすべて正なので )。覆われていない各行から を引き、線を引いた各列に を足します。これは行・列の定数の足し引きなので、最適な割当は変わりません。成分ごとに見ると、次のようになります。
- 覆われていない成分は
- 縦横 2 本の線が交わる成分は
- 1 本の線だけが通る成分はそのまま

このとき成分は 以上のままで、新しい が少なくとも 1 つできます。線を引いた行を 本、列を 本()とすると、どの割当の総費用も だけ減ります。費用が整数なら、それまでに引いた量の合計は 1 回ごとに 1 以上増えます。この合計は最小費用を超えないので、操作は有限回で終わります。

手順

  1. 各行から、その行の最小値を引く。

  2. 次に各列から、その列の最小値を引く。これで各行・各列に少なくとも 1 つ ができ、成分はすべて 以上になる。

  3. の位置で 2 部グラフを作る(成分が の行と列を辺で結ぶ)。増加道を使って最大マッチングを求め、その大きさを とする。

  4. 最少の線を作る。マッチングに使われていない行から出発し、行→列は の辺、列→行はマッチングの辺をたどって、到達できる頂点を求める。到達できない行と到達できる列に線を引くと、 をすべて覆うちょうど 本の線になる。

  5. なら、大きさ のマッチング(各行・各列から 1 つずつ選んだ )が最適な割当である。元の費用表でその成分の和を計算して答える。

  6. なら、覆われていない成分の最小値 を求める。覆われていない成分から を引き、線が交わる成分に を足す(1 本だけが通る成分はそのまま)。その後、手順 3 に戻る。

例題

3 人 A, B, C を 3 つの仕事 1, 2, 3 に 1 人 1 つずつ割り当てる。費用表(行が人、列が仕事)は である(例えば A が仕事 1 をすると費用 4)。総費用の最小値を求めよ。

例題の解答

手順 1(行の最小値を引く):各行の最小値は A: 1, B: 0, C: 2。引くと
手順 2(列の最小値を引く):列の最小値は 1, 0, 0。第 1 列から 1 を引くと
手順 3(最大マッチング): の位置は A–2, B–2, C–1, C–2, C–3。まず A–2, C–1 を選ぶ。B の は列 2 だけで、列 2 の相手 A の も列 2 だけなので、B から増加道はない。よって最大マッチングは A–2, C–1 で、。
手順 4(最少の線):使われていない行 B から出発する。B→列 2( の辺)、列 2→A(マッチング辺)とたどる。A の は列 2 だけで、ほかには進めない。到達できるのは行 A, B と列 2。到達できない行 C と到達できる列 2 に線を引くと、 はすべて覆われ、線は 本になる。
手順 5: なので、まだ最適ではない。
手順 6(調整):覆われていない成分は A–1 の 2, A–3 の 2, B–1 の 1, B–3 の 5 で、最小値は 。これらから 1 を引き、線の交点 C–2 に 1 を足すと
手順 3 に戻る: の位置は A–2, B–1, B–2, C–1, C–3。A–2, B–1, C–3 は大きさ 3 のマッチングなので 。
手順 5: なので、最適な割当は A→仕事 2, B→仕事 1, C→仕事 3。元の費用表で総費用は 。
(確認:引いた量の合計は、行 、列 、調整 で、 となり一致する。)

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題