surrogateopt
Решение или процессsurrogateopt
КиоскиКогда у вас есть как линейные ограничения, так и целочисленные ограничения, surrogateopt
может не найти какие-либо допустимые точки или достаточно различных допустимых точек, чтобы создать суррогат. В этих случаях решатель выходит с выходным флагом - 2
(не найдена допустимая точка) или 3
(слишком мало допустимых точек). Подробнее о выходном флаге - 2
, см. «Не найдена допустимая точка».
Выходной флаг 3
может происходить двумя различными способами:
Было слишком мало допустимых точек, чтобы создать первоначальный суррогат.
Было слишком мало допустимых точек, чтобы создать суррогат после суррогатного сброса.
Вы можете увидеть, какой случай применяется при помощи surrogateoptplot
постройте график функции.
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 и другими формами Solver.
Если задача не имеет целочисленных ограничений, попробуйте запустить fmincon
начиная с решения. Снова, если ваша задача имеет нелинейные ограничения, сначала преобразуйте ограничения в форму, которая fmincon
принимает использование Преобразования нелинейных ограничений между формой surrogateopt и другими формами Solver. Если задача использует симуляцию или ОДУ решатель, вам может потребоваться задать большие конечные опции различия для fmincon
. См. Оптимизацию симуляции или обыкновенного дифференциального уравнения.
Если задача имеет целочисленные ограничения, то мало что нужно сделать, кроме как попытаться запустить surrogateopt
для дополнительных вычислений функции. Делайте это наиболее эффективно при помощи файла контрольной точки. См. «Работа с файлами контрольных точек». Если вы не использовали файл контрольной точки, можно также задать набор начальных точек, используя InitialPoints
опция.