Улучшите 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 сбросьте и вы хотите попытаться найти другое решение, выполнить следующие шаги.

  1. Ослабьте некоторые ограничения.

    • Измените некоторые линейные ограничения в нелинейный, который заставляет решатель не настаивать на строгой выполнимости. Это может дать surrogateopt более допустимые точки, чтобы использовать в построении суррогатов.

    • Ослабьте некоторые линейные ограничения неравенства путем выбора больших значений для b вектор. Можно ослабить весь b значения целиком путем добавления скаляра:

      b = b + 5;
  2. Точно так же, если ваши связанные ограничения вызывают проблему иметь слишком мало допустимых точек, и если она целесообразна для вашей проблемы, ослабьте границы. Возьмите большие верхние границы или меньшие нижние границы или обоих. Можно ослабить все границы целиком путем добавления или вычитания скаляра.

    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 опция.

Смотрите также

Похожие темы