exponenta event banner

Парето Фронт для двух целей

Многообъективная оптимизация с двумя целями

В этом примере показано, как найти набор Парето для двухобъектной функции двух переменных. В примере представлены два подхода к минимизации: использование задачи «Оптимизировать интерактивный редактор» и работа в командной строке.

Двухобъектная функция f (x), где x также является двумерной,

f1 (x) = x14 + x24 + x1x2 (x1x2) 2 10x12f2 (x) = x14 + x24 + x1x2 − (x1x2) 2.

Поиск набора Pareto с помощью задачи «Оптимизировать оперативный редактор»

  1. Создайте новый сценарий в реальном времени, нажав кнопку «Создать сценарий в реальном времени» в разделе «Файл» на вкладке «Главная».

  2. Вставка задачи «Оптимизировать интерактивный редактор». Перейдите на вкладку Вставка, а затем в разделе Код выберите Задача > Оптимизировать.

    Inserting Optimize Live Editor task

    Optimize Live Editor task

  3. Для использования при вводе данных о проблемах вставьте новый раздел, нажав кнопку «Разрыв раздела» на вкладке «Вставка». Новые разделы появляются над и под задачей.

  4. В новом разделе над задачей введите следующий код для определения количества переменных и нижней и верхней границ.

    nvar = 2;
    lb = [0 -5];
    ub = [5 0];
  5. Чтобы поместить эти переменные в рабочее пространство, запустите раздел, нажав клавиши CTRL + ENTER.

  6. Укажите тип проблемы

    В разделе Задание типа задачи нажмите кнопку Цель > Нелинейный.

  7. Нажмите кнопки «Ограничения» > «Нижние границы» и «Верхние границы».

  8. Выберите Решатель > gamultiobj - Многообъективная оптимизация с использованием генетического алгоритма.

    Objective, constraints, and solver specified

  9. Выбор данных проблемы

    В разделе Выбор данных проблемы выберите Целевая функция > Локальная функция, а затем нажмите кнопку Создать. Функция появится в новом разделе под задачей.

  10. Отредактируйте результирующее определение функции, чтобы оно содержало следующий код.

    function f = mymulti1(x)
    
    f(2) = x(1)^4 + x(2)^4 + x(1)*x(2) - (x(1)*x(2))^2;
    f(1) = f(2) - 10*x(1)^2;
    end
  11. В разделе Select problem data выберите функцию Local function > mymulti1.

  12. Выберите Число переменных > nvar.

  13. Выберите Нижние границы > Из рабочей области > Lb и Верхние границы > Из рабочей области > ub.

  14. Задать параметры решателя

    Разверните раздел Задание параметров решателя и нажмите кнопку Добавить. Чтобы иметь более плотный и подключенный фронт Pareto, укажите больше, чем по умолчанию, выбрав Параметры населения > Размер населения > 60.

  15. Для увеличения числа пользователей на передней панели Pareto по сравнению с настройками по умолчанию нажмите кнопку +. В полученных опциях выберите Алгоритм > Парето задать дробь > 0,7.

  16. Задать параметры отображения

    В разделе «Ход выполнения» задачи выберите функцию переднего графика «Парето».

    Problem data, solver options, and display progress specified

  17. Запустить решатель и проверить результаты

    Чтобы запустить решатель, нажмите кнопку опций в правом верхнем углу окна задачи и выберите Выполнить раздел. График отображается в отдельном окне рисунка и в области вывода задания.

    Set of points on a convex curve from about [-38,33] to about [-5,0]

    График показывает компромисс между двумя компонентами f, который строится в пространстве целевой функции. Для получения более подробной информации см. рис. 9-2, Набор решений Noninferior.

Найти набор Парето в командной строке

Чтобы выполнить ту же оптимизацию в командной строке, выполните следующие действия.

  1. Создать mymulti1 файл целевой функции по пути MATLAB ®.

    function f = mymulti1(x)
    
    f(2) = x(1)^4 + x(2)^4 + x(1)*x(2) - (x(1)*x(2))^2;
    f(1) = f(2) - 10*x(1)^2;
    end
  2. Задайте параметры и границы.

    options = optimoptions('gamultiobj','PopulationSize',60,...
              'ParetoFraction',0.7,'PlotFcn',@gaplotpareto);
    lb = [0 -5];
    ub = [5 0];
  3. Выполните оптимизацию с помощью опций.

    [solution,ObjectiveValue] = gamultiobj(@mymulti1,2,...
                              [],[],[],[],lb,ub,options);

Задача «Оптимизировать интерактивный редактор» и командная строка позволяют формулировать и решать задачи, и они дают одинаковые результаты. Командная строка является более удобной, но предоставляет меньше возможностей для выбора решателя, настройки проблемы и выбора таких параметров, как функции печати. Можно также запустить проблему с помощью команды Оптимизировать (Optimize), а затем создать код для использования в командной строке, как в разделе Решение ограниченной нелинейной проблемы на основе решателя (Solver-Based).

Альтернативные представления

Эту проблему можно просмотреть другими способами. Следующий рисунок содержит график кривых уровня двух целевых функций, границы Парето, рассчитанные gamultiobj (прямоугольники) и значения x истинного рубежа Парето (алмазы, соединенные почти прямой линией). Истинные граничные точки Парето - это точки, в которых кривые уровня целевых функций параллельны. Алгоритм вычисляет эти точки, обнаруживая, где градиенты целевых функций параллельны. Рисунок печатается в пространстве параметров; см. рис. 9-1, Отображение из пространства параметров в пространство целевой функции.

Контуры объективных функций и границы Парето

gamultiobj находит концы отрезка линии, то есть находит всю протяженность границы Парето.

 Код для создания фигуры

См. также

|

Связанные темы