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)")
Создайте 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
patternsearch
| fcn2optimexpr
| solve