exponenta event banner

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

Никаких гарантий

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

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

Проверьте, является ли решение локальным решением с patternsearch

Прежде чем вы сможете определить, является ли предполагаемое решение глобальным минимумом, сначала проверьте, что это локальный минимум. Для этого запустите 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 заставить функцию стать большой и положительной для больших значений |<reservedrangesplaceholder1>| или |<reservedrangesplaceholder0>|. Компоненты глобального минимума функции должны находиться в границах

– 10  ≤ <reservedrangesplaceholder1>  , <reservedrangesplaceholder0> ≤ 10,

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

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

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

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

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

Похожие темы