
割り当て問題は、基本的な組み合わせ最適化問題である。最も一般的な形式では、この問題は次のようになる。
あるいは、グラフ理論を用いて問題を記述する:
エージェント数とタスク数が等しい場合、この問題はバランスのとれた割り当てと呼ばれ、グラフ理論的なバージョンは最小コスト完全マッチングと呼ばれます。そうでない場合は、アンバランス割り当てと呼ばれます。[ 1 ]
すべてのタスクに対する割り当ての総コストが、各エージェントのコストの合計(または各タスクのコストの合計。この場合は同じ意味です)に等しい場合、その問題は線形割り当て問題と呼ばれます。一般的に、特に条件を付けずに割り当て問題について話す場合、線形バランス割り当て問題を指します。
あるタクシー会社が3台のタクシー(エージェント)と、できるだけ早く迎えに来てほしいと願う3人の顧客(タスク)を抱えているとします。この会社は迅速な送迎を誇りとしているため、各タクシーが特定の顧客を迎えに行く際の「コスト」は、タクシーが乗車地点に到着するまでの時間によって決まります。これはバランスのとれた割り当て問題です。その解決策は、タクシーと顧客の組み合わせのうち、総コストが最小となる組み合わせです。
さて、タクシーが4台あるのに、客は3人しかいないとしましょう。これは割り当ての不均衡問題です。この問題を解決する一つの方法は、「何もせずにじっと座っている」といったダミータスクを4つ作成し、そのタスクに割り当てられたタクシーのコストを0にすることです。こうすることで問題は割り当ての均衡問題に帰着し、通常の方法で解くことができ、最適な解が得られます。
同様の調整は、エージェントの数よりも多くのタスクを許可したり、複数のエージェントを割り当てる必要があるタスク(例えば、1台のタクシーに収まりきらないほど多くの顧客グループ)を処理したり、コストを最小化するのではなく利益を最大化したりするために行うことができます。
割り当て問題(または線形割り当て問題)の正式な定義は次のとおりです。
通常、重み関数は正方実数値行列Cとして扱われるため、コスト関数は次のように表されます。
この問題は「線形」である。なぜなら、最適化すべきコスト関数とすべての制約条件には線形項しか含まれていないからである。
割り当て問題に対する単純な解決策は、すべての割り当てをチェックし、それぞれのコストを計算することです。しかし、n人のエージェントとn個のタスクがある場合、n !(nの階乗)通りの異なる割り当てが存在するため、これは非常に非効率的です。
別の単純な解決策としては、まずコストが最小のペアを貪欲に割り当てて頂点を削除し、次に残った頂点の中からコストが最小のペアを割り当て、これを繰り返すという方法があります。このアルゴリズムでは最適解が得られない場合があります。例えば、2つのタスクと2つのエージェントがあり、それぞれのコストが以下のようになっているとします。
貪欲アルゴリズムでは、タスク1をアリスに、タスク2をジョージに割り当て、合計コストは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'G' は、元のグラフGの 2 つのコピー、順方向コピーGfと逆方向コピーGb から構築されます。逆方向コピーは「反転」され、G'の各辺にn + r個の頂点が存在するようになります。コピー間には、2 種類の連結辺を追加する必要があります。[ 1 ] : 4–6
総じて、最大新しいエッジが必要です。結果として得られるグラフは常にサイズが完全に一致します。このグラフにおける最小コスト完全マッチングは、GfおよびGb における最小コスト最大カーディナリティマッチングから構成される必要があります。 この倍増手法の主な問題点は、速度向上がないことです。。
削減法を用いる代わりに、不均衡な割り当て問題は、均衡な割り当てのための既存のアルゴリズムを直接一般化することによって解決できる。ハンガリーアルゴリズムは、この問題を一般化して解決することができる。強多項式時間。特に、s = rの場合、実行時間は重みが整数の場合、Thorup の方法を使用して実行時間を取得できます。[ 1 ] : 6
The assignment problem can be solved by presenting it as a linear program. For convenience we will present the maximization problem. Each edge (i,j), where i is in A and j is in T, has a weight . For each edge we have a variable . The variable is 1 if the edge is contained in the matching and 0 otherwise, so we set the domain constraints:
The total weight of the matching is: . The goal is to find a maximum-weight perfect matching.
To guarantee that the variables indeed represent a perfect matching, we add constraints saying that each vertex is adjacent to exactly one edge in the matching, i.e.,
All in all we have the following LP:
This is an integer linear program. However, we can solve it without the integrality constraints (i.e., drop the last constraint), using standard methods for solving continuous linear programs. While this formulation allows also fractional variable values, in this special case, the LP always has an optimal solution where the variables take integer values. This is because the constraint matrix of the fractional LP is totally unimodular – it satisfies the four conditions of Hoffman and Gale.
Other approaches for the assignment problem exist and are reviewed by Duan and Pettie[10] (see Table II). Their work proposes an approximation algorithm for the assignment problem (and the more general maximum-weight matching problem), which runs in linear time for any fixed error bound.
In the basic assignment problem, each agent is assigned to at most one task and each task is assigned to at most one agent. In the many-to-many assignment problem,[11] each agent i may take up to ci tasks (ci is called the agent's capacity), and each task j may be taken by up to dj agents simultaneously (dj is called the task's capacity). If the sums of capacities in both sides are equal (), then the problem is balanced, and the goal is to find a perfect matching (assign exactly ci tasks to each agent i and exactly dj agents to each task j) such that the total cost is as small as possible.
この問題は、最小コストネットワークフロー問題に還元することで解決できます。[ 12 ]次の層を持つフローネットワークを構築します。
最小コストの積分最大フローは多項式時間で見つけることができます。ネットワークフロー問題を参照してください。このネットワークのすべての積分最大フローは、各エージェントiに最大c i個のタスクが割り当てられ、各タスクjに最大d j個のエージェントが割り当てられるマッチングに対応します(バランスのとれたケースでは、iに正確にc i個のタスクが割り当てられ、 jに正確にd j 個のエージェントが割り当てられます)。最小コスト最大フローは、最小コスト割り当てに対応します。
グラフ理論の問題として定式化すると、割り当て問題は二部グラフから任意のグラフに拡張できる。重み付きグラフにおいて重みの合計が最大となるマッチングを見つける対応する問題は、最大重みマッチング問題と呼ばれる。
割り当て問題のもう一つの一般化は、マッチングするセットの数を2つから多つに拡張することです。つまり、エージェントとタスクをマッチングするのではなく、エージェント、タスク、時間間隔、場所をマッチングするように問題を拡張します。これは多次元割り当て問題となります。