Оптимизируйте несглаженную функцию Используя patternsearch, Основанный на проблеме

В этом примере показано, как минимизировать несглаженную функцию с помощью прямого поиска в подходе, основанном на проблеме. Функция, чтобы минимизировать, ps_example(x), включен с программным обеспечением Global Optimization Toolbox.

Постройте целевую функцию.

fsurf(@(x,y)reshape(ps_example([x(:),y(:)]),size(x)),...
    [-6 2 -4 4],"LineStyle","none","MeshDensity",300)
colormap 'jet'
view(-26,43)
xlabel("x(1)")
ylabel("x(2)")
title("ps\_example(x)")

Figure contains an axes object. The axes object with title p s _ e x a m p l e ( x ) contains an object of type functionsurface.

Создайте 2D переменную x оптимизации. ps_example функция ожидает, что переменная будет вектором-строкой, поэтому задайте x как вектор-строка с 2 элементами.

x = optimvar("x",1,2);

Использовать ps_example как целевая функция, преобразуйте функцию в выражение оптимизации с помощью fcn2optimexpr.

fun = fcn2optimexpr(@ps_example,x);

Создайте задачу оптимизации с целевой функцией ps_example.

prob = optimproblem("Objective",fun);

Задайте начальную точку x0 как структура с полем x принимая значение [2.1 1.7].

x0.x = [2.1 1.7];

Решите задачу, задав patternsearch решатель.

[sol,fval] = solve(prob,x0,"Solver","patternsearch")
Solving problem using patternsearch.
Optimization terminated: mesh size less than options.MeshTolerance.
sol = struct with fields:
    x: [-4.7124 -7.6294e-07]

fval = -2.0000

patternsearch находит лучшее решение (более низкое значение функции), чем fminunc по умолчанию решатель, который не рекомендуется для минимизации несглаженных функций.

[solfminunc,fvalfminunc] = solve(prob,x0)
Solving problem using fminunc.

Local minimum possible.

fminunc stopped because it cannot decrease the objective function
along the current search direction.
solfminunc = struct with fields:
    x: [1.9240 8.8818e-16]

fvalfminunc = 2.9161

Смотрите также

| |

Похожие темы