Оптимизируйте только Используя выполнимые стартовые точки

Можно установить 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: 3258
         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 С Локальными Минимумами

 Код для генерации фигуры

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

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

ddx16x2=x16x2=± в |x|=4.

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

Это поведение может возникнуть каждый раз, когда у вас есть функция, которая имеет квадратный корень.

Похожие темы