Para ver os resultados da patternsearch optimization para cada iteração em MATLAB
eu tenho um problema de otimização que é muito demorado e eu preciso fazer isso muitas vezes (isto é de alguma forma um problema de tentativa e erro para mim). No entanto, não quero esperar pelo resultado final. Preciso de ver o resultado da optimização em cada iteração. Mais especificamente, eu quero ver o valor x (a solução) e não estou tão interessado em fval (valor da função objetiva em x). Infelizmente, a pesquisa do Pattern só mostra o sval e não a solução de otimização em cada iteração. I saiba que eu devo corrigir este problema através da "função de saída" e passou muito tempo e não poderia entender como fazê-lo. Para tornar tudo conveniente para você e vamos considerar o seguinte problema de otimização simples:
options = optimoptions('patternsearch');
options = optimoptions(options,'Display', 'iter','TolX',1e-6);
x0=2;lb=-3;ub=3;
x = patternsearch(@(x)x^2,x0,[],[],[],[],lb,ub,[],options);
as primeiras linhas que vemos na janela de comandos parecem ser as seguintes:
Iter f-count f(x) MeshSize Method
0 1 4 1
1 2 4 0.5 Refine Mesh
2 3 0 1 Successful Poll
Infelizmente, não vejo nada sobre X.
pode alterar o meu código para que eu também possa ver a solução (x) em cada iteração, é muito agradecido!
Babak
1 answers
Um manipulador de função de saída válido para patternsearch
deve ser especificado do seguinte modo:
function [stop,options,optchanged] = fun(optimvalues,options,flag)
O seguinte código deve ser suficiente para mostrar a informação que procura:
options = optimoptions('patternsearch');
options = optimoptions(options,'Display','iter','OutputFcns',@custom,'TolX',1e-6);
x0 = 2; lb = -3; ub = 3;
x = patternsearch(@(x)x^2,x0,[],[],[],[],lb,ub,[],options);
function [stop,options,optchanged] = custom(optimvalues,options,flag)
stop = false;
optchanged = false;
if (strcmp(flag,'iter'))
disp([' Iteration performed for X=' num2str(optimvalues.x)]);
end
end
Aqui está o resultado:
Iter Func-count f(x) MeshSize Method
0 1 4 1
Iteration performed for X=2
1 2 4 0.5 Refine Mesh
Iteration performed for X=0
2 3 0 1 Successful Poll
Iteration performed for X=0
3 3 0 0.5 Refine Mesh
Iteration performed for X=0
4 5 0 0.25 Refine Mesh
Iteration performed for X=0
...
É apenas um exemplo e você pode, claro, ajustar a função para que o texto seja exibido da maneira que você preferir.