我正在尝试使用有用的 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
。他们没有给出预期的结果。
为什么?我应该怎么办?