オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【数理最適化】Hungarian Algorithm / ハンガリアン法

yhayato1320.hatenablog.com

Hungarian Algorithm / ハンガリアン (ハンガリー) 法 とは

割当・マッチング問題を解くためのアルゴリズムのひとつ.

2 部グラフの (重みなし) 最大マッチング問題は、最大流問題を解くことで求めることができる.

ハンガリアン法は、2部グラフの最大重みマッチング問題をとく方法であるが、
ここでは、説明を簡単にするために完全 2 部グラフの最大重み完全マッチング問題を対象とする.


完全 2 部グラフの最大重み完全マッチング問題

完全 2 部グラフ  G\ =\ (V,\ E) に対し、選ばれた辺の重み和が最大となる完全マッチングを求めよ.

アルゴリズム

    1. 重み行列の全成分の最大の値を  x としたとき、
      各成分  y x\ -\ y で置き換え、すべての成分を非負にする.
    2. 各行ごとにその行の最小値をその行の成分から引く.
    3. さらに、各列ごとにその列の最小値をその列の成分から引く.
  1. 値が 0 の成分だけを選んで、完全マッチングができれば、それが最適なマッチングとなるので終了する.
  2. 0 をふくんでいる成分がなくなるように、行と列を削除する.
    そのとき、削除する行と列の本数の和が最小になるようにする.
  3. 消されずに残った部分行列に対し、部分行列の成分の中の最小値を部分行列の各成分から引く.
    また、消された行と消された列の重なっている部分の各成分には、その最小値を足す.
    消した行と列を戻し、ステップ 2 に戻る.

参考

書籍

Web サイト