Mathematica: порядок оценки при численной оптимизации функций черного ящика - PullRequest
6 голосов
/ 09 августа 2011

Я пытаюсь выполнить численную оптимизацию функции «черного ящика» в Mathematica.Схематически это выглядит так:

NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]

где гребень [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];
];

Однако все функции минимизации, которые я пробовал, кажутсяне сразу предоставлять гребню [x, y, z] числовые значения, и в итоге он пытается вычислить FindMaximum с символическими значениями для x, y, z (что легко проверить, поскольку Print [x, y, z] такжеоценивает символически).Таким образом, Findmaximum терпит неудачу (FindMaximum :: nrnum: значение функции бла-бла не является действительным числом), и поэтому минимизация завершается неудачей.

Как исправить порядок вычисления, чтобы подфункции гребенки былиоценивается с помощью числовых значений?

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Порядок оценки для FindMinimum, FindMaximum, FindRoot и FindFit задокументирован на странице tutorial / UnconstrainedOptimizationSymbolicEvaluation Documentation. Я думаю, что нечто очень похожее применимо к функции NMinimize. Описание довольно длинное, поэтому я приведу здесь только предложенное решение с этой страницы:

Если ваша функция такова, что символическая оценка не сохранит функционировать как задумано или будет слишком медленным, вы должны определить ваша функция, так что она оценивает только для числовых значений переменные. Самый простой способ сделать это, определив свою функцию используя PatternTest (?), как в f [x_? NumberQ]: = определение.

Может показаться, что символическая оценка просто создает беспокойство, так как вы должны определить функцию специально, чтобы предотвратить это. Тем не мение, без символической оценки Mathematica трудно принять Преимущество его уникального сочетания числовой и символической силы. Символическая оценка означает, что команды могут последовательно принимать преимущество преимуществ, которые приходят из символического анализа, таких как алгоритм определения, автоматический расчет производных, автоматическая оптимизация, компиляция и структурный анализ.

4 голосов
/ 09 августа 2011

Как насчет изменения comb на

comb[x_?NumericQ, y_?NumericQ, z_?NumericQ] := 
 Module[{}, Print[x, y, z];
 M = FindMaximum[SkewNormal[a, x, y, z], {a, x}] // First;
 val = f[x, y, z, M];
 Return[val];];

что вызывает определение comb только в том случае, если его аргументы являются числами?

...