Home/コンテンツ一覧/最大カット問題/

最大カット問題

概要

最大カット問題 (MAX-CUT)は、あるグラフのノードを二つのグループに分ける場合に、エッジを切る数(エッジに重みがある場合は切るエッジの重みの総和)が最大となる分け方を求めるという問題です。 グラフに関する典型的な最適化問題で画像処理や通信網・交通網などのネットワーク計画などに応用されます。
A: 最大カット
B: 最小カット
上図のグラフの場合、Aの場合がカット数=5となり最大となります。 Bの場合はカット数=2で最小であり、これを求める最小カット問題 (MIN-CUT)も存在します。

定式化

グラフ G=(V,E) ~G=(V,E)~において、各エッジ (i,j)E ~(i,j)\in E~に重み wi,j(>0) ~w_{i,j} (>0)~があるとします。このとき、
iV1,jV2wi,j\sum_{i \in V_1, j \in V_2}w_{i,j}
を最大にする V1,V2(V=V1V2) ~V_1,V_2 (V=V_1\cup{V_2})~を求めるのが最大カット問題です。
アニーリングマシンで解くためにこれをイジングモデルの形式で定式化します。
まず、分割したときにノード viV~v_i \in Vがどちらの部分集合に属するかを表す変数 si ~s_i~を定義します。
si={1 (viV1)1 (viV2)s_i=\begin{cases}1~&(v_i \in V_1) \\-1~&(v_i \in V_2)\end{cases}
このとき、カット値(切るエッジの重みの総和) C ~C~は以下の式で表すことができます。
C=12(i,j)Ewi,j(1sisj)C=\frac{1}{2}\sum_{(i,j)\in E}w_{i,j}(1-s_{i}s_{j})
一般にアニーリングマシンはエネルギー関数の最小値を探索するため、最大化問題は1-1を掛けて最小化問題にすることで解くことができます。したがって、アニーリングマシンに入力するイジングモデルのエネルギー関数 H ~H~は以下のようになります。
H=12(i,j)Ewi,j(1sisj)H=-\frac{1}{2}\sum_{(i,j)\in E}w_{i,j}(1-s_{i}s_{j})

シミュレーション

ここでは最大カット問題をアニーリングで解くシミュレーションを体験できます。

問題データ

シミュレーションのサンプルとして、最適解が自明である2-正則グラフを用います。

実行

ノード数とステップ数を可変として実行してみます。グラフ上の赤い直線が最適解(=ノード数)となります。
Created with Highcharts 9.1.2ステップ数カット数N = 100optimal010k20k30k40k50k60k70k80k90k100k100Highcharts.com
ノード数
ステップ数