exponenta event banner

Оптимизация с использованием только возможных начальных точек

Можно установить StartPointsToRun вариант так, чтобы MultiStart и GlobalSearch используйте только начальные точки, удовлетворяющие ограничениям неравенства. Эта опция может ускорить оптимизацию, так как локальный решатель не должен искать выполнимую область. Однако этот вариант может привести к пропуску решателями некоторых бассейнов притяжения.

Существует три параметра настройки для StartPointsToRun вариант:

  • all - Принимает все начальные точки

  • bounds - Отклоняет начальные точки, не удовлетворяющие границам

  • bounds-ineqs - отклоняет начальные точки, которые не удовлетворяют ограничениям или ограничениям неравенства;

Например, предположим, что ваша целевая функция

function y = tiltcircle(x)
vx = x(:)-[4;4]; % ensure vx is in column form
y = vx'*[1;1] + sqrt(16 - vx'*vx); % complex if norm(x-[4;4])>4

tiltcircle возвращает комплексные значения для norm(x - [4 4]) > 4.

 Код для создания рисунка

Запишите положительную функцию ограничения в наборе, где norm(x - [4 4]) > 4

function [c ceq] = myconstraint(x)
ceq = [];
cx = x(:) - [4;4]; % ensure x is a column vector
c = cx'*cx - 16; % negative where tiltcircle(x) is real

Набор GlobalSearch для использования только начальных точек, удовлетворяющих ограничениям неравенства:

gs = GlobalSearch('StartPointsToRun','bounds-ineqs');

Чтобы завершить пример, создайте структуру проблемы и запустите решатель:

opts = optimoptions(@fmincon,'Algorithm','interior-point');
problem = createOptimProblem('fmincon',...
    'x0',[4 4],'objective',@tiltcircle,...
    'nonlcon',@myconstraint,'lb',[-10 -10],...
    'ub',[10 10],'options',opts);
rng(7,'twister'); % for reproducibility
[x,fval,exitflag,output,solutionset] = run(gs,problem)

GlobalSearch stopped because it analyzed all the trial points.

All 5 local solver runs converged with a positive local solver exit flag.

x =

    1.1716    1.1716


fval =

   -5.6530


exitflag =

     1


output =

  struct with fields:

                funcCount: 3242
         localSolverTotal: 5
       localSolverSuccess: 5
    localSolverIncomplete: 0
    localSolverNoSolution: 0
                  message: 'GlobalSearch stopped because it analyzed all the trial po...'

solutionset = 

  1x4 GlobalOptimSolution array with properties:

    X
    Fval
    Exitflag
    Output
    X0

Наклон с локальными минимумами

 Код для создания рисунка

tiltcircle функция имеет только один локальный минимум. Все же GlobalSearch (fmincon) останавливается в нескольких точках. Означает ли это, что fmincon делает ошибку?

Причина, по которой fmincon остановки в нескольких граничных точках являются тонкими. tiltcircle функция имеет бесконечный градиент на границе, как видно из одномерного вычисления:

ddx16−x2=−x16−x2=±∞ в | x | = 4.

Таким образом, существует огромный градиент по нормали к границе. Этот градиент подавляет небольшой дополнительный наклон от линейного члена. Насколько fmincon можно определить, что граничные точки являются стационарными точками для проблемы с зависимостью.

Такое поведение может возникнуть при наличии функции с квадратным корнем.

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