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