Mathematica で「ブラック ボックス」関数の数値最適化を実行しようとしています。概略的には、次のようになります。
NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]
ここで、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];
];
ただし、私が試したすべての最小化関数は、comb[x,y,z] に数値をすぐには提供しないようで、最終的に x、y、z の記号値で FindMaximum を評価しようとします (これは簡単に検証できます)。 Print[x,y,z] も記号的に評価されるため)。したがって、Findmaximum は失敗し (FindMaximum::nrnum: 関数値の何とか何とかは実数ではありません)、最小化は失敗します。
櫛のサブ関数が数値で評価されるように評価順序を修正するにはどうすればよいですか?