割当問題ソルバー

ハンガリアン法による割当問題の最適解. ハンガリアン法(Kuhn-Munkres)を実装し、作業者と仕事の最適な1対1割当を求め、O(n3)の計算量で総コストを最小化または最大化します。. 割当問題は基本的な組合せ最適化問題です:n人のエージェントとn個のタスクにコスト行列Cが与えられた場合、総コストを最小化する一対一…

ハンガリアン法(Kuhn-Munkres)を実装し、作業者と仕事の最適な1対1割当を求め、O(n3)の計算量で総コストを最小化または最大化します。

割当問題とは?

割当問題は基本的な組合せ最適化問題です:n人のエージェントとn個のタスクにコスト行列Cが与えられた場合、総コストを最小化する一対一の割当を見つけます。人員配置、ジョブショップ配分、車両ルーティングで発生します。

ハンガリアン法(Kuhn-Munkres法、1955年)はO(n³)時間で割当問題を解きます。行と列の減算によりコスト行列を繰り返し縮小し、二部グラフの増加パスで最適割当を見つけます。

矩形行列の場合、コスト0のダミー行または列を追加して正方行列にします。未割当のエージェントやタスクは別途報告されます。

Formula: 最小化 Σ C[i][σ(i)] (すべての i について) 制約条件: σ は置換(1対1対応)であること ハンガリー法の手順: 1. 各行の最小値を減算 2. 各列の最小値を減算 3. 最少本数の線でゼロを被覆 4. 行列を調整し、最適になるまで繰り返す

計算例

コスト行列: [[9,2,7],[6,4,3],[5,8,1]]。行の縮約 → [[7,0,5],[3,1,0],[4,7,0]]。列の縮約 → [[4,0,5],[0,1,0],[1,7,0]]。0 のマスで各担当者に作業を 1 つずつ割り当て: 担当者 1→作業 2 (コスト 2)、担当者 2→作業 1 (コスト 6)、担当者 3→作業 3 (コスト 1)。総コスト = 9 — 目につく担当者 2→作業 3、担当者 3→作業 1 の組み合わせ (10) より低くなります。

この計算機を使うタイミング

よくある間違い

結果の解釈方法

関連規格・参考文献

よくある質問

割当問題で最大化は可能ですか?

はい。すべてのコストを否定するか、各要素を行列最大値から引いてから最小化問題を解きます。最適割当は同じで、目的関数の符号だけが変わります。

作業者とタスクの数が等しくない場合は?

アルゴリズムはコスト0のダミー行または列で小さい次元を埋めます。解後、ダミーエントリへの割当は未割当の作業者またはタスクを示します。

割当問題は作業者のスキルや稼働可否といった実務上の制約を扱えますか?

基本的な定式化では直接は扱えません。ただし、実行不可能な割り当てのコストを非常に大きな数値(例: 999999)に設定することで、アルゴリズムがそれらを選択しないように実質的に排除できます。複雑な制約には、整数線形計画法のソルバーの利用を検討してください。