Как вы можете сказать, если вы нашли глобальный минимум вашей целевой функции? Короткий ответ, что вы не можете; у вас нет гарантии, что результат решателя 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 определяет местоположение глобального решения.
Для примера рассмотрим функцию
Начальные сводки x6 + y6 заставить функцию стать большой и положительной для больших значений |<reservedrangesplaceholder1>| или |<reservedrangesplaceholder0>|. Компоненты глобального минимума функции должны находиться в границах
– 10 ≤ <reservedrangesplaceholder1> , <reservedrangesplaceholder0> ≤ 10,
начиная с 106 намного больше, чем все кратные 104 которые происходят в других сводках функции.
Можно идентифицировать меньшие границы для этой задачи; например, глобальный минимум находится в диапазоне от -2 до 2. Более важно определить разумные границы, чем определить наилучшие границы.
Чтобы проверить, есть ли лучшее решение вашей задачи, запустите MultiStart с дополнительными стартовыми точками. Использование MultiStart вместо GlobalSearch для этой задачи, потому что GlobalSearch не запускает локальный решатель из всех начальных точек.
Например, см. Пример: Поиск лучшего решения.