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