Optimization Mathematica:尽量减少未按预期工作

Optimization Mathematica:尽量减少未按预期工作,optimization,wolfram-mathematica,Optimization,Wolfram Mathematica,我正在尝试使用有用的NMINIMIMIZE函数制作一个管网优化程序 我正在用一个微型网络测试我的程序:3根管道和16种不同的直径。该管网有16^3=4096个组合,使用蛮力,我发现最佳可行组合(最便宜)是直径为{8,4,7}的组合,其值(由我定义的目标函数给出)为: 我的目标函数有点大。我想我不会把它寄出去。我使用了?NumericQ、?ListQ等等来定义ObjectiveFunction和我正在使用的所有其他函数 然后我将NMinimize应用于ObjectiveFunction(带约束等)

我正在尝试使用有用的NMINIMIMIZE函数制作一个管网优化程序

我正在用一个微型网络测试我的程序:3根管道和16种不同的直径。该管网有16^3=4096个组合,使用蛮力,我发现最佳可行组合(最便宜)是直径为{8,4,7}的组合,其值(由我定义的目标函数给出)为:

我的目标函数有点大。我想我不会把它寄出去。我使用了?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
存在问题。他们没有给出预期的结果


为什么??我该怎么办

这感觉就像您定义了一个ObjectiveFunction,它接受符号参数,而另一个接受数字参数。在处理参数模式时,请确保清除所有[ObjectiveFunction]。
ObjectiveFunction[{d1,d2,d3}]/.{d1 -> 8, d2 -> 4, d3 -> 8}
(* 1.83824*10^6 *)