最小線形配置の分岐および境界


7

私はこのブランチとバウンドの問題を解決しようとしていますが、コストよりも優れたおおよそのコスト関数を思い付くことができませんでした。

まあ言ってみれば G のグラフです n ノード {1,2,3,,n}。順列のためにf のノードの G、各エッジの重み (x,y) になります |f(x)f(y)|。総重量Gエッジの重みの合計になります。あなたは考えることができますf のノードの再ラベル付けとして G、 どこ f(x) ノードの新しいラベルです x

順列を見つけようとしています f その結果、最小総重量は G

これを解決しようとすると、私が思いつくことができるのは、これまでに完了した各エッジの重みの合計であるおおよそのコスト(バックトラックツリーノードごとに)を見つけ、最小コストノードから続行することだけです。誰かがより良い近似式で私を助けてくれるかどうか疑問に思っています。


代替の定式化:隣接行列で、ほとんどの1が対角線の近くになるように頂点を配置します。
KarolisJuodelė16年

回答:


5

最良の解決策の1つは、線形計画法緩和または直接整数計画法に基づいている可能性があります。後者の場合、分岐とバックトラックは暗黙的に行われるため、自分で管理する必要はありません。

この手法を使用して2つの方法で解決されることを確認しました。境界アルゴリズムも少し改善できます。

教科書メソッド

バイナリ変数の使用 xij 表す f(i)=j、連続変数を定義できます f(i)=j=1njxij

制約を追加する ixij=1 そして jxij=1 1つの位置に1つのノードのみが割り当てられることを表します。

各エッジについて、コスト ce には2つの制約があります。 cef(i)f(j) そして cef(j)f(i)、あなたは最小化したい ece

この問題を整数プログラミングソルバーに与えることができます。これにより、バックトラッキングを実行できます。または、毎回自分で線形プログラミングの緩和を解決できます(学習したい場合は、ソルバーが内部で最適化します)。

別の緩和

位置をバイナリ変数として使用する代わりに、 f(i)<f(j) すなわちノード i ノードの前に移動 j。これは、自分で分岐を行い、それらの変数を明示的に指定しない場合に、より適応されます。

このアプローチを使用すると、各ノードでより高速な問題を解決できる場合があります。ここでは、このペーパーで示すように、より単純な最小コストのフロー問題として解決できます。多くの時間を調査して問題を調査する意思がない限り、私はそれをお勧めしません。

その他のテクニック

分岐限定の場合、コスト関数の下限で十分です。小さな問題の場合、境界アプローチは完全に問題ありません。

より厳密にすることもできます。ノードが配置されていないエッジごとに、可能な限り最適な無料のラベルを選択して、そのコストを見積もります。複数のエッジが異なるノードに同じ配置を使用する場合がありますが、これはコストを0と推定するよりも優れています。

このスキームにはさまざまなバリエーションがあります。ラベル付けされていないノードごとに(オーバーラップに関係なく)最適なフリーラベルを選択するか、ノードの小さなグループ内でのみオーバーラップを考慮します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.