我试图在Mathematica中对"黑匣子"功能进行数值优化.原理图如下:
NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]
Run Code Online (Sandbox Code Playgroud)
其中comb [x,y,z]的定义与此类似:
comb[x_,y_,z_] := Module[{},
Print[x,y,z];
M = FindMaximum[SkewNormal[a,x,y,z], {a,x}] // First;
val = f[x,y,z,M];
Return[val];
];
Run Code Online (Sandbox Code Playgroud)
但是,我尝试过的所有最小化函数似乎都没有立即为comb [x,y,z]提供数值,并且它最终试图用x,y,z的符号值来计算FindMaximum(这很容易验证)因为Print [x,y,z]也象征性地评估).因此Findmaximum失败(FindMaximum :: nrnum:函数值blah blah不是实数),因此最小化失败.
如何修复评估顺序,以便使用数值评估梳子的子功能?
optimization wolfram-mathematica black-box operator-precedence