この問題の埋め込み部分は非常に混乱するので、有向グラフを取得するための接続コストを見積もると仮定します。有向グラフには、最小コストの強く接続されたアークサブグラフが必要です。次に、貪欲なアルゴリズムを使用して埋め込みを見つけます。
多項式時間での 2 近似解の場合: 任意のルート頂点を選択し、Chu--Liu および Edmonds によるアルゴリズムを使用して、最小コストのルート方向および葉方向にまたがる樹木を計算します。これらの結合を返します。すべての強く接続されたアーク サブグラフには、ルート方向とリーフ方向にまたがる樹枝状突起が含まれているため、これは 2 近似です (ただし、最小コストである必要はありません)。あなたのリンクの 1 つから、Keith Randall もこのアイデアを持っていたことがわかりました。
実装できるヒューリスティックはいくつもあります。それらは非常にうまく機能するかもしれませんが、私にとってはあまり興味がありません。それらの振る舞いが悪いことを懸念している場合は、前述の 2 近似でそれらを「バックストップ」できます。
本当に最適なソリューションが必要な場合は、おそらく整数計画法が最善の策です。整数プログラムとして定式化されたこの問題は、TSP に似ています。TSPのプログラムはこんな感じ。
minimize sum_{v -> w} cost(v -> w) x(v -> w)
subject to
(-) for all v, sum_{v -> w} x(v -> w) = 1
(-) for all w, sum_{v -> w} x(v -> w) = 1
for all subsets S of vertices, sum_{v -> w, v in S, w not in S} x(v -> w) >= 1
for all v -> w, x(v -> w) >= 0
あなたの問題のプログラムでは、マークされた制約を削除します(-)
。これにより、選択されたアークが強制的にツアーになります。
minimize sum_{v -> w} cost(v -> w) x(v -> w)
subject to
for all subsets S of vertices, sum_{v -> w, v in S, w not in S} x(v -> w) >= 1
for all v -> w, x(v -> w) >= 0
このプログラムのデュアルは次のとおりです。
maximize sum_{subsets S of vertices} y(S)
subject to
for all v -> w, sum_{subsets S of vertices, v in S, w not in S} y(S) <= cost(v -> w)
for all subsets S of vertices, y(S) >= 0
これで、分岐限定ソリューションを TSP に適応させることができます。TSP には、チュートリアル資料がたくさんあるはずです。根本的に新しいことをする必要はありません。実際、櫛の不等式などはこの問題には当てはまらないため、サブツアーの制約/変数の生成に集中できます。