タクシー会社が、4 台のタクシー を 4 人の客 のもとへ配車する。各タクシーはちょうど 1 人の客を担当し、各客にはちょうど 1 台のタクシーが向かう。タクシー が客 のもとに着くまでの時間(分)は次の表のとおりである。
4 台の到着時間の合計を最小にするとき、その最小値(分)を求めよ。
の費用表で、各行・各列の最小値を引く変形と、0 を最少の線で覆う操作をくり返し、総費用を最小にする割当とその最小値を求められる
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
人に 個の仕事を 1 人 1 つずつ割り当て、総費用を最小にする問題を割当問題といいます。費用表( の表)の第 行第 列を (人 が仕事 をするときの費用)とします。すると割当問題は、各行・各列からちょうど 1 つずつ成分を選んで、その和を最小にする問題になります。選び方は 通りあり、 が大きいと全部は調べられません。ハンガリー法は、表の変形と 2 部グラフの最大マッチングを組み合わせて、最適な割当とその最小費用を効率よく求める方法です。
行・列から定数を引いても、最適な割当は変わりません。 どの割当も各行・各列からちょうど 1 つずつ成分を選びます。そのため第 行の全成分から を引くと、どの割当の総費用もちょうど だけ減ります。列についても同じです。したがって、各行・各列から最小値を引いた表で最適な割当は、元の表でも最適です。変形後の表の成分はすべて 以上です。よって値 の成分だけを使う割当が見つかれば、その総費用は でこれ以上小さくできず、その割当が最適です。
0 だけで割当できるかは、最大マッチングの問題です。 行を表す頂点と列を表す頂点を用意し、成分が の行と列を辺で結ぶと、2 部グラフ(0 のグラフ)ができます。0 だけを使う割当は、このグラフの大きさ のマッチングそのものです。また「0 をすべて覆う行・列の線」は、このグラフの頂点被覆そのものです。ケーニヒの定理より、線の最少本数 は最大マッチングの大きさ に等しくなります。
最少の線は、最大マッチングから次のように作れます。 マッチングに使われていない行をすべて出発点にします。そこから「行→列は の辺」「列→行はマッチングの辺」をたどり、到達できる頂点をすべて求めます。そのうえで、到達できない行と到達できる列に線を引きます。
- これで はすべて覆われます。成分 が で行 に到達できるなら、列 にも到達できるので列の線で覆われます。行 に到達できないなら、行の線で覆われます。
- 線の本数は です。到達できる列はどれもマッチングに使われています(使われていなければ増加道ができ、最大であることに反します)。その相手の行には到達できます。到達できない行は出発点でないので、マッチングに使われています。こうして各線にはそれぞれ別のマッチング辺が対応するので、本数は 以下です。被覆なので 以上でもあり、ちょうど 本になります。
のときの調整。 線で覆われていない成分の最小値を とします(覆われていない成分はすべて正なので )。覆われていない各行から を引き、線を引いた各列に を足します。これは行・列の定数の足し引きなので、最適な割当は変わりません。成分ごとに見ると、次のようになります。
- 覆われていない成分は
- 縦横 2 本の線が交わる成分は
- 1 本の線だけが通る成分はそのまま
このとき成分は 以上のままで、新しい が少なくとも 1 つできます。線を引いた行を 本、列を 本()とすると、どの割当の総費用も だけ減ります。費用が整数なら、それまでに引いた量の合計は 1 回ごとに 1 以上増えます。この合計は最小費用を超えないので、操作は有限回で終わります。
各行から、その行の最小値を引く。
次に各列から、その列の最小値を引く。これで各行・各列に少なくとも 1 つ ができ、成分はすべて 以上になる。
の位置で 2 部グラフを作る(成分が の行と列を辺で結ぶ)。増加道を使って最大マッチングを求め、その大きさを とする。
最少の線を作る。マッチングに使われていない行から出発し、行→列は の辺、列→行はマッチングの辺をたどって、到達できる頂点を求める。到達できない行と到達できる列に線を引くと、 をすべて覆うちょうど 本の線になる。
なら、大きさ のマッチング(各行・各列から 1 つずつ選んだ )が最適な割当である。元の費用表でその成分の和を計算して答える。
なら、覆われていない成分の最小値 を求める。覆われていない成分から を引き、線が交わる成分に を足す(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。元の費用表で総費用は 。
(確認:引いた量の合計は、行 、列 、調整 で、 となり一致する。)
答え:
が 個以上あれば最適だと判断してしまう誤り。正しくは、各行・各列から 1 つずつ選べる が 個あること(0 のグラフの最大マッチングの大きさが )が条件である。例題の表 には が 5 個あるが、A と B の が同じ列にあるので、選べるのは 2 個までである。
線を手当たり次第に引いたり、到達できる頂点の扱いを逆にしたりする誤り。例えば上の表で「到達できる行 A, B と到達できない列 1, 3」に線を引くと 4 本になり、最少にならない。3 本の行の線で覆って「3 本必要だから最適」とするのも誤りである。正しくは、到達できない行と到達できる列に線を引く。この表では行 C と列 2 の 2 本()で足りる。
調整で、すべての成分から を引いたり、線の交点に を足すのを忘れたりする誤り。正しくは、覆われていない成分は 、線が 2 本交わる成分は 、1 本だけが通る成分はそのままである。交点に足し忘れると、例題では C–2 が のままになる。これは行・列の定数の足し引きになっていないので、最適な割当が変わってしまうことがある。
最後に変形後の表の成分を足して、最小費用を と答えてしまう誤り。正しくは、変形後の表は割当を決めるためだけに使い、総費用は元の費用表の成分で計算する(例題では )。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
タクシー会社が、4 台のタクシー を 4 人の客 のもとへ配車する。各タクシーはちょうど 1 人の客を担当し、各客にはちょうど 1 台のタクシーが向かう。タクシー が客 のもとに着くまでの時間(分)は次の表のとおりである。
4 台の到着時間の合計を最小にするとき、その最小値(分)を求めよ。
ある工場に 4 台の機械 があり、4 種類の製品 を 1 種類ずつ加工させる。各機械はちょうど 1 種類の製品を担当し、各製品はちょうど 1 台の機械が担当する。機械 が製品 を加工するのにかかる時間(単位:時間)は、次の表の第 行・第 列の値である。
4 台の加工時間の合計が最小になるように割り当てるとき、その合計時間の最小値を求めよ。
ある配送センターで、4 台の配送車 を 4 つの配送地区 に 1 台ずつ割り当てる。各配送車はちょうど 1 つの地区を担当し、各地区はちょうど 1 台が担当する。配送車 が地区 を担当したときにかかる時間(分)は、次の表の 行 列の値である。
4 台の所要時間の合計の最小値(分)を求めよ。
4 人の作業員 に 4 つの仕事 を 1 つずつ割り当てる。各作業員はちょうど 1 つの仕事を担当し、各仕事はちょうど 1 人が担当する。作業員 が仕事 を行うのにかかる時間(単位:時間) は次の表のとおりである。
4 人の作業時間の合計が最小になるように割り当てるとき、作業時間の合計の最小値を求めよ。
5 人の作業者 を 5 つの仕事 に 1 人 1 つずつ割り当てる(各仕事にはちょうど 1 人を割り当てる)。作業者 が仕事 を行うときの費用 は次の表のとおりである。ただし は実数の定数である。
費用の総和を最小にする割当て(最適割当て)のうちに、 を に割り当てるものが存在するような の最大値を求めよ。
を整数とし、 人の作業者 を 個の仕事 に 1 対 1 に割り当てる割当問題を考える。作業者 に仕事 を割り当てたときの費用を実数 とし、 上の置換 (作業者 に仕事 を割り当てる)の総費用を
とする。費用が次の条件(モンジュ条件)を満たすとする:
このとき、恒等置換 (作業者 に仕事 を割り当てる)は割当問題の最適解であること、すなわちすべての置換 に対して が成り立つことを証明せよ。