Можно установить 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: 3242
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 функция имеет только один локальный минимум. Все же GlobalSearch (fmincon) останавливается в нескольких точках. Означает ли это, что fmincon делает ошибку?
Причина, по которой fmincon остановки в нескольких граничных точках являются тонкими. tiltcircle функция имеет бесконечный градиент на границе, как видно из одномерного вычисления:
= 4.
Таким образом, существует огромный градиент по нормали к границе. Этот градиент подавляет небольшой дополнительный наклон от линейного члена. Насколько fmincon можно определить, что граничные точки являются стационарными точками для проблемы с зависимостью.
Такое поведение может возникнуть при наличии функции с квадратным корнем.