便利な 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
ます。期待した結果が得られません。
なんで?私は何をすべきか?