1

便利な NMinimize 関数を使用してパイプ ネットワーク最適化プログラムを作成しようとしています。

小さなネットワークでプログラムをテストしています: 3 つのパイプと 16 の異なる直径です。このパイプ ネットワークには 16^3 = 4096 通りの組み合わせがあり、ブルート フォースを使用して、実行可能な最良の組み合わせ (最も安い) は、直径 {8,4,7} とその値 (目的関数によって与えられる) を持つ組み合わせであることがわかりました。定義) は次のとおりです。

ObjectiveFunction[{8,4,7}]
(* 1.61503*10^6 *)

私の ObjectiveFunction は少し大きいです。投稿しようとは思いません。_?NumericQ、_?ListQ などを使用して、ObjectiveFunction と使用している他のすべての関数を定義しました。

次に、NMinimize を ObjectiveFunction に (制約などを使用して) 適用して問題を解決したところ、次のようになりました。

(* {1.83824*10^6,{d1 -> 8, d2 -> 4, d3 -> 8}} *)

最初は「うん、かなり近いね」という感じでした。しかし、その後、解決策を確認し、...

ObjectiveFunction[{8,4,8}]
(* 1.84853*10^7 *)

... うーん?

次に、ReplaceAll を使用してこれを試しました。

ObjectiveFunction[{d1,d2,d3}]/.{d1 -> 8, d2 -> 4, d3 -> 8}
(* 1.83824*10^6 *)

NMinimize と同じ結果。

したがって、 と に問題がReplaceAllありNMinimizeます。期待した結果が得られません。

なんで?私は何をすべきか?

4

0 に答える 0