2

Microsoft Solver Foundation で、値が決定値に依存するパラメーターを追加できるかどうかを知りたいです。

つまり、TSP モデルに何かが必要ですが、あるポイントから別のポイントへのトラフィックも考慮に入れる必要があります。注意: トラフィックは、セールスマンがそのルートを移動する時間によって異なります。

モデルは次のとおりです。

都市間のすべての可能な組み合わせのマトリックスがあります。

Decision 変数はOrder、セールスマンのルートです。0 は最初、1 秒、...

値からルートが実行される時間を計算するプロパティtimeToTravelにバインドされたプロパティがあり、Orderその時間の交通量を含む移動時間を返します。

Solve関数が呼び出されると、パラメーター値が一度読み取られてキャッシュされるように思えますが、正しいですか? はいの場合、この問題を解決するための推奨事項はありますか?

もともと私は MSF フォーラムでこの質問をしましたが、スタック オーバーフローでもっと注目されるだろうと思っていました。また、MSF 以外のさまざまなソルバーにもオープンですが、.NET 環境にとどまりたいと思っています。

4

1 に答える 1

1

Solver Foundation を使用して「静的な」巡回セールスマン問題を解決するための優れた記事がここにあります。独自の実装がまだない場合は、そのコードに基づいてソリューションを作成できます。

これは、言及された記事の目標定式化です。

// Goal: minimize the length of the tour.
Goal goal = model.AddGoal("TourLength", GoalKind.Minimize,
    Model.Sum(Model.ForEach(city, i => 
        Model.ForEachWhere(city, 
            j => dist[i, j] * assign[i, j], j => i != j))));

私の理解が正しければ、あなたの問題では、2 つの都市間の移動時間は時刻に依存していますか?

dist[,] double最適化中に配列を動的に更新できるとは思いません。ただし、Modeldist[,]クラスのビルディング ブロックを使用すると、既に移動した合計距離/時間に依存する一連の関数として配列を再定式化できるはずです。

完全を期すために、OML を使用した TSP の定式化に関する別の興味深い記事を次に示します

于 2012-06-15T05:43:14.953 に答える