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

В этом примере показано, как минимизировать многомерную функцию с помощью суррогатной оптимизации в подходе, основанном на проблеме. Функция, чтобы минимизировать, multirosenbrock(x), появляется в конце этого примера. multirosenbrock функция имеет один локальный минимум 0 в точке [1,1,...,1]. Функция спроектирована, чтобы быть сложной для решателей, чтобы минимизировать.

Примечание: код для multirosenbrock функция помощника обеспечивается в конце этого примера. Убедитесь, что код включен в конце вашего скрипта или в файле на пути.

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

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

surrogateopt решатель требует конечных границ на всех переменных задачи. Задайте нижние границы –3 и верхние границы 3. Когда вы задаете скалярные границы, они применяются ко всем переменным задачи.

x.LowerBound = -3;
x.UpperBound = 3;

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

fun = fcn2optimexpr(@multirosenbrock,x);

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

prob = optimproblem("Objective",fun);

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

rng default % For reproducibility
[sol,fval] = solve(prob,"Solver","surrogateopt")
Solving problem using surrogateopt.

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 1.58773 contains an object of type line. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
sol = struct with fields:
    x: [0.0900 0.0120 0.1300 0.0136]

fval = 1.5877

Попытайтесь улучшить решение

Возвращенное решение не хорошо, потому что значение целевой функции не очень близко к 0. Попытайтесь улучшить решение путем выполнения surrogateopt для большего количества оценок. Используйте предыдущее решение в качестве стартовой точки.

options = optimoptions("surrogateopt","MaxFunctionEvaluations",1000);
[sol2,fval2] = solve(prob,sol,"Solver","surrogateopt","Options",options)
Solving problem using surrogateopt.

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 0.0961091 contains an object of type line. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
sol2 = struct with fields:
    x: [0.8613 0.7429 0.7247 0.5220]

fval2 = 0.0961

На этот раз решатель достигает хорошего решения.

Функция помощника

Этот код создает multirosenbrock функция помощника.

function F = multirosenbrock(x)
% This function is a multidimensional generalization of Rosenbrock's
% function. It operates in a vectorized manner, assuming that x is a matrix
% whose rows are the individuals.

% Copyright 2014 by The MathWorks, Inc.

N = size(x,2); % assumes x is a row vector or 2-D matrix
if mod(N,2) % if N is odd
    error('Input rows must have an even number of elements')
end

odds  = 1:2:N-1;
evens = 2:2:N;
F = zeros(size(x));
F(:,odds)  = 1-x(:,odds);
F(:,evens) = 10*(x(:,evens)-x(:,odds).^2);
F = sum(F.^2,2);
end

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

| |

Похожие темы