exponenta event banner

Выдержать сравнение fminimax и fminunc

Задача minimax сводит к минимуму максимум набора целевых функций. Почему бы не минимизировать эту максимальную функцию, которая является скалярной функцией? Ответ заключается в том, что максимум не является гладким, а оптимизация Toolbox™ решателями, такими как fminunc требуют гладкости.

Например, определить fun(x) как три линейные объективные функции в двух переменных, и fun2 как максимум из этих трех целей.

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
fun2 = @(x)max(fun(x),[],2);

Постройте график максимум из трех целей.

[X,Y] = meshgrid(linspace(-5,5));
Z = fun2([X(:),Y(:)]);
Z = reshape(Z,size(X));
surf(X,Y,Z,'LineStyle','none')
view(-118,28)

Figure contains an axes. The axes contains an object of type surface.

fminimax легко находит точку minimax.

x0 = [0,0];
[xm,fvalm,maxfval] = fminimax(fun,x0)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
xm = 1×2

   -2.5000    2.2500

fvalm = 1×3

    1.7500    1.7500    1.7500

maxfval = 1.7500

Однако fminunc останавливается в точке, которая находится далеко от точки минимакса.

[xu,fvalu] = fminunc(fun2,x0)
Local minimum possible.

fminunc stopped because it cannot decrease the objective function
along the current search direction.
xu = 1×2

         0    1.0000

fvalu = 3.0000

fminimax находит лучшее (меньшее) решение.

fprintf("fminimax finds a point with objective %g,\nwhile fminunc finds a point with objective %g.",maxfval,fvalu)
fminimax finds a point with objective 1.75,
while fminunc finds a point with objective 3.

См. также

Связанные темы