Estoy intentando realizar una optimización numérica de una función de "caja negra" en Mathematica. Esquemáticamente dice así:Mathematica: orden de evaluación durante la optimización numérica de las funciones de caja negra
NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]
donde peine [x, y, z] se define de forma similar a esto:
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];
];
Sin embargo, todas las funciones de minimización he tratado parecen no ofrecer inmediatamente peine [x, y, z] con valores numéricos, y termina tratando de evaluar el FindMaximum con valores simbólicos para x, y, z (que se verifica fácilmente porque la impresión [x, y, z] también evalúa simbólicamente). El Findmaximum falla así (FindMaximum :: nrnum: el valor de la función blah blah no es un número real) y la minimización falla.
¿Cómo arreglo el orden de evaluación para que las subfunciones de peine se evalúen con valores numéricos?
Otro problema (más sutil) debido al preprocesamiento simbólico en 'NMinimize' recientemente se resolvió en [otro hilo] (http://stackoverflow.com/questions/6971536/nminimize-eats-all-memory- bc-of-necessary-symbolic-work/6975501 # 6975501) de Daniel Lichtblau. –
Hmm ok gracias, lo comprobaré. También me acabo de dar cuenta de que este problema no ocurre en Mathematica 8 (estaba ejecutando 7 anteriormente). –