Как можно сказать, определили ли вы местоположение глобального минимума своей целевой функции? Короткий ответ - то, что вы не можете; у вас нет гарантии, что результатом решателя 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
не запускает локальный решатель от всех стартовых точек.
Например, смотрите Пример: Поиск Лучшего Решения.