exponenta event banner

Можете ли вы подтвердить, что решение является глобальным?

Нет гарантий

Как вы можете сказать, если вы нашли глобальный минимум вашей целевой функции? Короткий ответ заключается в том, что вы не можете; нет гарантии, что результат решения Global Optimization Toolbox станет глобальным оптимумом. Хотя все решатели Global Optimization Toolbox неоднократно пытаются найти глобальное решение, ни один решатель не использует алгоритм, который может сертифицировать решение как глобальное.

Однако стратегии, описанные в этом разделе, можно использовать для поиска решений.

Проверьте, является ли решение локальным решением с помощью поиска по образцу

Прежде чем определить, является ли предполагаемое решение глобальным минимумом, сначала проверьте, является ли оно локальным минимумом. Для этого выполните команду patternsearch по проблеме.

Чтобы преобразовать problem использовать patternsearch вместо fmincon или fminunc, введите

problem.solver = 'patternsearch';

Также измените начальную точку на только что найденное решение и снимите флажки:

problem.x0 = x;
problem.options = [];

Например, параметр «Проверить ближайшие точки» показывает следующее:

options = optimoptions(@fmincon,'Algorithm','active-set');
ffun = @(x)(x(1)-(x(1)-x(2))^2);
problem = createOptimProblem('fmincon', ...
    'objective',ffun,'x0',[1/2 1/3], ...
    'lb',[0 -1],'ub',[1 1],'options',options);
[x,fval,exitflag] = fmincon(problem)

x =
  1.0e-007 *
         0    0.1614

fval =
 -2.6059e-016

exitflag =
     1

Однако проверка этого предполагаемого решения с помощью patternsearch показывает, что существует лучшее решение. Начать patternsearch из сообщенного решения x:

% set the candidate solution x as the start point
problem.x0 = x;
problem.solver = 'patternsearch';
problem.options = [];
[xp,fvalp,exitflagp] = patternsearch(problem)

Optimization terminated: mesh size less than options.MeshTolerance.

xp =

    1.0000   -1.0000


fvalp =

   -3.0000


exitflagp =

     1

Определение ограниченной области, содержащей глобальное решение

Предположим, что у вас есть гладкая целевая функция в ограниченной области. Учитывая достаточное время и начальные точки, MultiStart в конечном итоге находит глобальное решение.

Поэтому, если вы можете связать регион, где может существовать глобальное решение, вы можете получить некоторую степень уверенности, что MultiStart определяет местоположение глобального решения.

Например, рассмотрим функцию

f = x6 + y6 + sin (x + y) (x2 + y2) cos (x21 + y2) (2 + x4 + x2y2 + y4).

Начальные сумматоры x6  + y6 заставляют функцию становиться большой и положительной для больших значений | x | или | y |. Компоненты глобального минимума функции должны находиться в пределах границ

- 10 ≤ x, y ≤ 10,

поскольку 106 намного больше, чем все кратные 104, которые встречаются в других сумматорах функции.

Можно определить меньшие границы для этой проблемы; например, глобальный минимум находится в диапазоне от -2 до 2. Более важно определить разумные границы, чем определить наилучшие границы.

Использование MultiStart с дополнительными начальными точками

Чтобы проверить, есть ли лучшее решение вашей проблемы, запустите MultiStart с дополнительными начальными точками. Использовать MultiStart вместо GlobalSearch для этой задачи, потому что GlobalSearch не запускает локальный решатель из всех начальных точек.

Например, см. Пример: Поиск лучшего решения.

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