
割り当て問題は、基本的な組み合わせ最適化問題です。最も一般的な形では、この問題は次のようになります。
あるいは、グラフ理論を使って問題を説明すると次のようになります。
エージェント数とタスク数が等しい場合、この問題はバランス割り当て問題と呼ばれ、グラフ理論的には最小コスト完全マッチング問題と呼ばれます。そうでない場合は、不バランス割り当て問題と呼ばれます。[1]
すべてのタスクの割り当てにかかる総コストが、各エージェントのコストの合計(または各タスクのコストの合計。この場合は同じ意味)に等しい場合、この問題は線形割り当てと呼ばれます。一般的に、追加の修飾語なしに割り当て問題を指す場合は、線形均衡割り当て問題を指します。
あるタクシー会社が3台のタクシー(エージェント)と、できるだけ早く迎えに来てほしい3人の顧客(タスク)を保有しているとします。会社は迅速な迎えを誇りとしているため、各タクシーについて、特定の顧客を乗せるための「コスト」は、タクシーが乗車地点に到着するまでの時間に依存します。これは均衡割り当て問題です。この問題の解は、タクシーと顧客の組み合わせが総コストを最小にすることです。
さて、利用可能なタクシーが4台あると仮定しましょう。しかし、乗客は依然として3人しかいません。これは不均衡な割り当て問題です。この問題を解決する一つの方法は、例えば「何もせずにじっと座っている」という4つ目のダミータスクを作成し、そのタスクに割り当てられたタクシーのコストを0とすることです。これにより、問題は均衡な割り当て問題へと縮減され、通常の方法で解くことができ、依然として最適な解が得られます。
同様の調整は、エージェントよりも多くのタスク、複数のエージェントを割り当てる必要があるタスク (たとえば、1 台のタクシーに収まるよりも多くの顧客グループ)、またはコストを最小化するのではなく利益を最大化するために実行できます。
割り当て問題(または線形割り当て問題) の正式な定義は
通常、重み関数は実数値の正方行列 Cとして扱われるため、コスト関数は次のように記述されます。
最適化されるコスト関数とすべての制約には線形項のみが含まれるため、この問題は「線形」です。
割り当て問題に対する単純な解決策は、すべての割り当てをチェックし、それぞれのコストを計算することです。しかし、エージェントがn個、タスクがn個の場合、割り当てはn !(nの階乗)通り存在するため、この方法は非常に非効率的です。
もう一つの単純な解法は、まず最小コストのペアを貪欲に割り当て、頂点を削除し、残った頂点の中から最小コストのペアを割り当てる、というものです。このアルゴリズムは最適解にならない可能性があります。例えば、2つのタスクと2つのエージェントがあり、それぞれのコストが以下の通りだとします。
貪欲アルゴリズムでは、タスク 1 が Alice に、タスク 2 が George に割り当てられ、合計コストは 9 になりますが、逆の割り当てでは合計コストは 7 になります。
幸いなことに、 nの多項式時間で最適な割り当てを見つけるアルゴリズムは数多く存在します。割り当て問題は輸送問題の特殊ケースであり、輸送問題は最小費用フロー問題の特殊ケースであり、最小費用フロー問題は線形計画問題の特殊ケースです。これらの問題はいずれも単体法を用いて解くことができ、最悪の場合でも楕円体法を用いて多項式時間で解くことができますが、それぞれの特殊化は解空間が狭く、そのため、その特殊な構造を利用するように設計されたより効率的なアルゴリズムが存在します。
均衡割り当て問題では、二部グラフの両方の部分に同じ数の頂点があり、nで表されます。
均衡割り当てのための最初の多項式時間アルゴリズムの 1 つは、ハンガリアン アルゴリズムでした。これはグローバルアルゴリズムであり、増加パス (一致しない頂点間の交互パス) に沿った一致の改善に基づいています。フィボナッチ ヒープを使用した場合の実行時の複雑度はです[2] 。ここで、mはエッジの数です。これは現在、この問題に対する強多項式アルゴリズムの最速実行時間です。ハンガリアン アルゴリズムのいくつかの変種は、GPU アクセラレーションなどの並列コンピューティングの恩恵も受けています。[3]すべての重みが整数の場合、実行時間は まで改善できます が、結果として得られるアルゴリズムは弱多項式のみです。[4]重みが整数で、すべての重みが最大でC ( C >1 は任意の整数) の場合、問題は重みスケーリングと呼ばれる方法で弱多項式時間で解くことができます。[5] [6] [7]
グローバル手法に加えて、局所的な更新(完全な増加経路ではなく)の探索に基づくローカル手法があります。これらの手法は漸近的な実行時間保証が劣りますが、実際にはより優れた動作をします。これらのアルゴリズムは、オークションアルゴリズム、プッシュ・リラベルアルゴリズム、またはプリフロー・プッシュアルゴリズムと呼ばれます。これらのアルゴリズムの中には、同等であることが示されています。[8]
いくつかの局所的手法は、グラフが完全なマッチングを許容することを前提としています。そうでない場合、これらの手法のいくつかは永久に実行されてしまう可能性があります。[1] : 3 この問題を解決する簡単な技術的方法は、入力グラフを完全な二部グラフに拡張し、非常に大きな重みを持つ人工的なエッジを追加することです。これらの重みは、可能な解に人工的なエッジが現れないように、既存のすべてのマッチングの重みよりも大きくする必要があります。
Mulmuley、Vazirani、Vazirani [9]が示したように、最小重み完全マッチング問題は、グラフの隣接行列におけるマイナーを見つける問題に変換されます。分離補題を用いると、グラフ内の最小重み完全マッチングは少なくとも1 ⁄ 2の確率で見つけることができます。n頂点のグラフの場合、この処理には時間がかかります。
不均衡割り当て問題では、二部グラフの大きい部分にはn 個の頂点があり、小さい部分にはr < n個の頂点があります。また、グラフ内の最大マッチングの濃度以下となる定数sがあります。目標は、サイズがちょうどsである最小コストのマッチングを見つけることです。最も一般的なケースは、グラフが片側完全マッチング(つまり、サイズrのマッチング)を許容し、s = rとなる場合です。
不均衡な割り当ては均衡な割り当てに縮約できます。単純な縮約は、小さな部分に新しい頂点を追加し、コスト0の辺を使ってそれらを大きな部分に接続することです。しかし、これには新しい辺が必要です。より効率的な縮約は、倍加法と呼ばれます。ここでは、元のグラフGの2つのコピー、すなわち順方向コピーGfと逆方向コピーGbから新しいグラフG'を構築します。逆方向コピーは「反転」されるため、G'の各辺にはn + r個の頂点が存在することになります。コピー間には、2種類の連結辺を追加する必要があります。[1] : 4–6
全体として、最大で 個の新しい辺が必要になります。結果として得られるグラフには常にサイズ の完全マッチングが存在します。このグラフにおける最小コストの完全マッチングは、GfとGb における最小コストで最大カーディナリティのマッチングから構成されなければなりません。 この倍加法の主な問題は、 の場合に速度向上が見られないことです。
不均衡割り当て問題は、縮約法を用いる代わりに、均衡割り当てのための既存のアルゴリズムを直接一般化することで解決できる。ハンガリアンアルゴリズムを一般化することで、強多項式時間で問題を解くことができる。特に、s = rの場合、実行時間は である。重みが整数の場合、Thorup法を用いることで実行時間を とすることができる。[1] : 6
割り当て問題は線形計画問題として表すことで解くことができます。便宜上、最大化問題を提示します。各辺( i , j )(iは A に、jは T にそれぞれ属する)には重み が与えられます。各辺 には変数 が与えられます。この変数は、辺がマッチングに含まれる場合は 1、含まれない場合は 0 です。そこで、ドメイン制約を設定します。
マッチングの合計重みは です。目標は、重みが最大となる完全なマッチングを見つけることです。
変数が完全なマッチングを表すことを保証するために、各頂点がマッチング内の 1 つのエッジに隣接しているという制約を追加します 。
全体として、次の LP が得られます。
これは整数線形計画問題です。しかし、連続線形計画問題を解くための標準的な手法を用いれば、整数制約(つまり最後の制約を削除)なしで解くことができます。この定式化では変数が分数値を取ることも許容しますが、この特殊なケースでは、分数線形計画問題は常に変数が整数値を取る最適解を持ちます。これは、分数線形計画問題の制約行列が完全ユニモジュラ行列であるため 、ホフマンとゲールの4つの条件を満たすためです。
割り当て問題に対する他のアプローチも存在し、DuanとPettie [10]によってレビューされています(表II参照)。彼らの研究では、割り当て問題(およびより一般的な最大重みマッチング問題)に対する近似アルゴリズムが提案されており、これは任意の固定誤差境界に対して線形時間で実行されます。
基本的な割り当て問題では、各エージェントには最大 1 つのタスクが割り当てられ、各タスクには最大 1 人のエージェントが割り当てられます。多対多の割り当て問題では、[11]各エージェントiは最大c i個のタスクを実行でき(c iはエージェントの容量と呼ばれる)、各タスクjは最大d j個のエージェントによって同時に実行できます(d jはタスクの容量と呼ばれる)。両側の容量の合計が等しい場合()、問題は均衡しており、目標は完全なマッチング(各エージェントiにちょうどc i個のタスクを割り当て、各タスクjにちょうどd j個のエージェントを割り当てる)を見つけて、総コストが可能な限り小さくなるようにすることです。
この問題は最小コストネットワークフロー問題に還元することで解決できる。[12]次の層を持つフローネットワークを構築する。
最小コストの積分最大フローは多項式時間で見つけることができます。ネットワークフロー問題を参照してください。このネットワークにおけるすべての積分最大フローは、各エージェントiに最大でc i個のタスクが割り当てられ、各タスクjに最大でd j 個のエージェントが割り当てられるマッチングに対応します(バランスの取れたケースでは、iにちょうどc i個のタスクが割り当てられ、 jにちょうどd j 個のエージェントが割り当てられます)。最小コスト最大フローは、最小コストの割り当てに対応します。
グラフ理論の問題として表現すると、割り当て問題は二部グラフから任意のグラフに拡張できます。これに対応する問題、すなわち重み付きグラフにおいて重みの合計が最大となるマッチングを求める問題は、最大重みマッチング問題と呼ばれます。
割り当て問題のもう一つの一般化は、マッチング対象となる集合の数を2つから複数に拡張することです。これにより、エージェントとタスクのマッチングという問題ではなく、エージェントとタスク、時間間隔、場所のマッチングという問題へと拡張されます。これは多次元割り当て問題(MAP)につながります。