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

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

В этом примере показано, как найти Множество Парето для 2D целевой функции двух переменных. Пример представляет два подхода для минимизации: использование Оптимизировать задача Live Editor и работа в командной строке.

2D целевая функция f (x), где x также двумерен,

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

Найдите, что множество Парето Используя оптимизирует задачу Live Editor

  1. Создайте новый live скрипт путем нажатия кнопки New Live Script в разделе File по вкладке Home.

  2. Введите Live Editor Optimize задача. Кликните по вкладке Insert и затем, в разделе Code, выберите Task > Optimize.

    Inserting Optimize Live Editor task

    Optimize Live Editor task

  3. Для использования во вводе проблемных данных вставьте новый раздел путем нажатия кнопки Section Break на вкладке Insert. Новые разделы появляются выше и ниже задачи.

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

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

  6. Задайте проблемный тип

    В разделе Specify problem type задачи нажмите кнопку Objective > Nonlinear.

  7. Нажмите кнопки Constraints > Lower bounds и Upper bounds.

  8. Выберите Solver > gamultiobj - Multiobjective optimization using genetic algorithm.

    Objective, constraints, and solver specified

  9. Выберите Problem Data

    В разделе Select problem data выберите Objective function > Local function, и затем нажмите кнопку New. Функция появляется в новом разделе ниже задачи.

  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. Выберите Number of variables > nvar.

  13. Выберите Lower bounds > From workspace > lb и Upper bounds > From workspace > ub.

  14. Задайте опции решателя

    Расширьте раздел Specify solver options задачи, и затем нажмите кнопку Add. Чтобы иметь более плотную, более связанную переднюю сторону Парето, задайте более многочисленные, чем значение по умолчанию популяции путем выбора Population settings > Population size > 60.

  15. Чтобы иметь больше населения на передней стороне Парето, чем настройки по умолчанию, нажмите кнопку +. В получившихся опциях выберите Algorithm > Pareto set fraction > 0.7.

  16. Опции дисплея аппарата

    В разделе Display progress задачи выберите функцию построения графика Pareto front.

    Problem data, solver options, and display progress specified

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

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

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

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

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

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

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

    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);

И Оптимизировать задача Live Editor и командная строка позволяют вам формулировать и решать проблемы, и они дают идентичные результаты. Командная строка более оптимизирована, но обеспечивает меньше справки для выбора решателя, подготовки проблема и выбора опций, таких как функции построения графика. Можно также запустить, использование задач Оптимизируют, и затем генерируют код для использования командной строки, когда в Решают Ограниченную Нелинейную задачу, Основанную на решателе.

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

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

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

gamultiobj находит концы линейного сегмента, означая, что он находит в полной мере границу Парето.

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

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

|

Похожие темы