Я пытаюсь выполнить численную оптимизацию функции «черного ящика» в 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] числовые значения, и в конечном итоге они пытаются оценить FindMaximum с символическими значениями для x,y,z (что легко проверить потому что Print[x,y,z] также оценивается символически). Таким образом, Findmaximum терпит неудачу (FindMaximum::nrnum: значение функции, бла-бла, не является реальным числом), поэтому минимизация не удалась.
Как исправить порядок оценки, чтобы подфункции гребенки оценивались числовыми значениями?
NMinimize
недавно была решена в другая тема от Daniel Lichtblau. - person Alexey Popkov   schedule 09.08.2011