Как можно сказать, определили ли вы местоположение глобального минимума своей целевой функции? Короткий ответ - то, что вы не можете; у вас нет гарантии, что результатом решателя Global Optimization Toolbox является глобальный оптимум. В то время как все решатели Global Optimization Toolbox неоднократно пытаются определить местоположение глобального решения, никакой решатель не использует алгоритм, который может сертифицировать решение как глобальную переменную.
Однако можно использовать стратегии в этом разделе для исследования решений.
Прежде чем можно будет определить, является ли подразумеваемое решение глобальной минимальной, первой проверкой, что это - локальный минимум. Для этого запустите patternsearch на проблеме.
Чтобы преобразовать problem, чтобы использовать patternsearch вместо fmincon или fminunc, войти
problem.solver = 'patternsearch';
Кроме того, измените стартовую точку на решение, которое вы только нашли, и очистите опции:
problem.x0 = x; problem.options = [];
Например, Проверка Соседние Точки (Optimization Toolbox) показывает следующее:
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 определяет местоположение глобального решения.
Например, рассмотрите функцию
Начальные слагаемые x 6 + y 6 обеспечивают функцию, чтобы стать большими и положительными для больших значений |x | или |y |. Компоненты глобального минимума функции должны быть в границах
– 10 ≤ x, y ≤ 10,
с тех пор 106 намного больше, чем все множители 104, которые происходят в других слагаемых функции.
Можно идентифицировать меньшие границы для этой проблемы; например, глобальный минимум между –2 и 2. Более важно идентифицировать разумные границы, чем это должно идентифицировать лучшие границы.
Проверять, существует ли лучшее решение вашей проблемы, выполнение MultiStart с дополнительными стартовыми точками. Используйте MultiStart вместо GlobalSearch для этой задачи, потому что GlobalSearch не запускает локальный решатель от всех стартовых точек.
Например, смотрите Пример: Поиск Лучшего Решения.