Улучшите surrogateopt Решение или процесс

surrogateopt Киоски

Когда у вас есть как линейные ограничения, так и целочисленные ограничения, surrogateopt может не найти какие-либо допустимые точки или достаточно различных допустимых точек, чтобы создать суррогат. В этих случаях решатель выходит с выходным флагом - 2 (не найдена допустимая точка) или 3 (слишком мало допустимых точек). Подробнее о выходном флаге - 2, см. «Не найдена допустимая точка».

Выходной флаг 3 может происходить двумя различными способами:

  • Было слишком мало допустимых точек, чтобы создать первоначальный суррогат.

  • Было слишком мало допустимых точек, чтобы создать суррогат после суррогатного сброса.

Вы можете увидеть, какой случай применяется при помощи surrogateoptplot постройте график функции.

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 и другими формами Solver.

  • Если задача не имеет целочисленных ограничений, попробуйте запустить fmincon начиная с решения. Снова, если ваша задача имеет нелинейные ограничения, сначала преобразуйте ограничения в форму, которая fmincon принимает использование Преобразования нелинейных ограничений между формой surrogateopt и другими формами Solver. Если задача использует симуляцию или ОДУ решатель, вам может потребоваться задать большие конечные опции различия для fmincon. См. Оптимизацию симуляции или обыкновенного дифференциального уравнения.

  • Если задача имеет целочисленные ограничения, то мало что нужно сделать, кроме как попытаться запустить surrogateopt для дополнительных вычислений функции. Делайте это наиболее эффективно при помощи файла контрольной точки. См. «Работа с файлами контрольных точек». Если вы не использовали файл контрольной точки, можно также задать набор начальных точек, используя InitialPoints опция.

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте