Можно установить StartPointsToRun
опция так, чтобы MultiStart
и GlobalSearch
используйте только стартовые точки, которые удовлетворяют ограничениям неравенства. Эта опция может ускорить вашу оптимизацию, поскольку локальный решатель не должен искать выполнимую область. Однако опция может заставить решатели пропускать некоторые области притяжения.
Существует три настройки для StartPointsToRun
опция:
all
— Принимает все стартовые точки
bounds
— Стартовые точки отклонений, которые не удовлетворяют границам
bounds-ineqs
— Стартовые точки отклонений, которые не удовлетворяют границам или ограничениям неравенства
Например, предположите, что ваша целевая функция
function y = tiltcircle(x) vx = x(:)-[4;4]; % ensure vx is in column form y = vx'*[1;1] + sqrt(16 - vx'*vx); % complex if norm(x-[4;4])>4
tiltcircle
возвращает комплексные числа для norm(x - [4 4]) > 4
.
Запишите ограничительную функцию, которая положительна на съемочной площадке где norm(x - [4 4]) > 4
function [c ceq] = myconstraint(x) ceq = []; cx = x(:) - [4;4]; % ensure x is a column vector c = cx'*cx - 16; % negative where tiltcircle(x) is real
Установите GlobalSearch
использовать только стартовые точки, удовлетворяющие ограничениям неравенства:
gs = GlobalSearch('StartPointsToRun','bounds-ineqs');
Чтобы завершить пример, создайте структуру задачи и запустите решатель:
opts = optimoptions(@fmincon,'Algorithm','interior-point'); problem = createOptimProblem('fmincon',... 'x0',[4 4],'objective',@tiltcircle,... 'nonlcon',@myconstraint,'lb',[-10 -10],... 'ub',[10 10],'options',opts); rng(7,'twister'); % for reproducibility [x,fval,exitflag,output,solutionset] = run(gs,problem) GlobalSearch stopped because it analyzed all the trial points. All 5 local solver runs converged with a positive local solver exit flag. x = 1.1716 1.1716 fval = -5.6530 exitflag = 1 output = struct with fields: funcCount: 3258 localSolverTotal: 5 localSolverSuccess: 5 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'GlobalSearch stopped because it analyzed all the trial po...' solutionset = 1x4 GlobalOptimSolution array with properties: X Fval Exitflag Output X0
tiltcircle С Локальными Минимумами
tiltcircle
функция имеет всего один локальный минимум. Все же GlobalSearch
(fmincon
) остановки в нескольких точках. Делает этот средний fmincon
совершает ошибку?
Причина, что fmincon
остановки в нескольких граничных точках являются тонкими. tiltcircle
функция имеет бесконечный градиент на контуре, как вы видите от одномерного вычисления:
Таким образом, существует огромный градиент, нормальный к контуру. Этот градиент сокрушает маленький дополнительный наклон от линейного члена. До fmincon
может сказать, граничные точки являются стационарными точками для ограниченной проблемы.
Это поведение может возникнуть каждый раз, когда у вас есть функция, которая имеет квадратный корень.