surrogateopt
Решение или процессsurrogateopt
ОстановыКогда у вас есть и линейные ограничения и целочисленные ограничения, surrogateopt
может не найти, что любые допустимые точки или достаточно отличных допустимых точек создают суррогат. В этих случаях выходы решателя с выходом отмечают –2
(никакая найденная допустимая точка) или 3
(слишком мало допустимых точек). Для получения дополнительной информации на выходе отмечают –2
, не смотрите Найденную Допустимую точку.
Выйдите из флага 3
может произойти двумя различными способами:
Было слишком мало допустимых точек, чтобы создать начальный суррогат.
Было слишком мало допустимых точек, чтобы создать суррогат после суррогатного сброса.
Вы видите, какой случай применяется при помощи surrogateoptplot
функция plot.
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot'); [sol,fval,exitflag] = surrogateopt(arguments,options);
После каждого суррогатного сброса, surrogateopt
требует, чтобы более допустимые точки создали следующий суррогат. Когда существуют целочисленные ограничения, surrogateopt
может исчерпать набор допустимых точек или может не найти новые допустимые точки, даже когда некоторые остаются
Если surrogateopt
выполнил по крайней мере один сброс, затем он успешно искал решение. В этом случае у вас может быть решение проблемы.
Если surrogateopt
не могло создать начальный суррогат, или если surrogateopt
сбросьте и вы хотите попытаться найти другое решение, выполнить следующие шаги.
Ослабьте некоторые ограничения.
Измените некоторые линейные ограничения в нелинейный, который заставляет решатель не настаивать на строгой выполнимости. Это может дать surrogateopt
более допустимые точки, чтобы использовать в построении суррогатов.
Ослабьте некоторые линейные ограничения неравенства путем выбора больших значений для b
вектор. Можно ослабить весь b
значения целиком путем добавления скаляра:
b = b + 5;
Точно так же, если ваши связанные ограничения вызывают проблему иметь слишком мало допустимых точек, и если она целесообразна для вашей проблемы, ослабьте границы. Возьмите большие верхние границы или меньшие нижние границы или обоих. Можно ослабить все границы целиком путем добавления или вычитания скаляра.
ub = ub + 3; lb = lb - 1;
Когда surrogateopt
не может найти точку, которая выполнима относительно границ, целочисленных ограничений и линейных ограничений, она возвращает выходной флаг –2
. В этом случае проблема действительно неосуществима.
Однако решатель может также возвратить выходной флаг –2
когда это не может определить местоположение точки, которая выполнима относительно нелинейных ограничений неравенства. Это может иногда происходить, даже когда допустимые точки существуют. Чтобы продолжить, выполните шаги в Сходившемся к Неосуществимой Точке.
Обычно, surrogateopt
остановки, когда это исчерпывает вычисления функции. Это означает это surrogateopt
не останавливается, потому что это достигает оптимального решения. Однако, когда суррогатный сброс происходит, текущее решение обычно около локального оптимума.
Как можно оценить качество решения? Обычно это затрудняет, чтобы сделать. Вот некоторые шаги для исследования решения помочь определить его локальное качество. Однако нет никакой процедуры, которая гарантирует, что точка является глобальным решением. Смотрите, что можно Сертифицировать, Что Решение Является Глобальной переменной?.
Если проблема не имеет никаких целочисленных ограничений, посмотрите на соседние точки. Для этого вызовите patternsearch
на возвращенном решении. Установите InitialMeshSize
опция к размеру поискового шага вы хотите использовать. Сохранить patternsearch
от взятия слишком большого количества времени, набор MaxIterations
опция к 1
и UseCompletePoll
опция к true
:
options = optimoptions('patternsearch',... 'InitialMeshSize',1e-3,... 'MaxIterations',1,'UseCompletePoll',true);
Если ваша проблема имеет нелинейные ограничения, сначала преобразуйте ограничения в форму это patternsearch
признает, что использование Преобразует Нелинейные Ограничения Между Формой surrogateopt и Другими Формами Решателя.
Если проблема не имеет никаких целочисленных ограничений, попытайтесь запуститься fmincon
запуск с решения. Снова, если ваша проблема имеет нелинейные ограничения, сначала преобразуйте ограничения в форму это fmincon
признает, что использование Преобразует Нелинейные Ограничения Между Формой surrogateopt и Другими Формами Решателя. Если проблема использует симуляцию или решатель ОДУ, вы можете должны быть установить большие опции конечной разности для fmincon
. Смотрите оптимизацию симуляции или обыкновенного дифференциального уравнения.
Если проблема имеет целочисленные ограничения, то существует мало, чтобы сделать кроме попытаться запуститься surrogateopt
для большего количества вычислений функции. Сделайте так наиболее эффективно при помощи файла контрольной точки. Смотрите работу с Файлами контрольной точки. Если вы не использовали файл контрольной точки, можно также дать набор начальных точек с помощью InitialPoints
опция.