exponenta event banner

Создать структуру проблемы

Сведения о проблемных структурах

Для использования GlobalSearch или MultiStart решатели, сначала необходимо создать структуру проблемы. Рекомендуемый способ создания структуры проблем - использование createOptimProblem функция. Структуру можно создать вручную, но это может привести к ошибкам.

Используйте createOptimProblem Функция

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

  1. Определите целевую функцию как файловую или анонимную. Дополнительные сведения см. в разделе Вычисление целевых функций. Если решатель lsqcurvefit или lsqnonlin, убедитесь, что целевая функция возвращает вектор, а не скаляр.

  2. При необходимости создайте ограничения, такие как границы и функции нелинейных ограничений. Дополнительные сведения см. в разделе Ограничения записи.

  3. Создайте начальную точку. Например, для создания трехмерной случайной начальной точки xstart:

    xstart = randn(3,1);
  4. (Необязательно) Создать параметры с помощью optimoptions. Например,

    options = optimoptions(@fmincon,'Algorithm','interior-point');
  5. Войти

    problem = createOptimProblem(solver,

    где solver - имя локального решателя:

  6. Задайте начальную точку с помощью 'x0' параметр. Если ваша начальная точка xstart, и ваш решатель fmincon, ваша запись теперь

    problem = createOptimProblem('fmincon','x0',xstart,
  7. Включите дескриптор функции для целевой функции в objective:

    problem = createOptimProblem('fmincon','x0',xstart, ...
        'objective',@objfun,
  8. Задайте границы и другие ограничения, если применимо.

    ОграничениеИмя
    нижние границы'lb'
    верхние границы'ub'
    матрица Aineq для линейных неравенств Aineq x ≤ bineq'Aineq'
    вектор bineq для линейных неравенств Aineq x ≤ bineq'bineq'
    матрица Aeq для линейных уравнений Aeq x = beq'Aeq'
    вектор beq для линейных уравнений Aeq x = beq'beq'
    нелинейная функция ограничения'nonlcon'
  9. При использовании lsqcurvefit локальный решатель, включающий векторы входных данных и данных ответа, именованный 'xdata' и 'ydata' соответственно.

  10. Рекомендуется проверить структуру проблемы, запустив решатель на структуре. Например, если локальным решателем является fmincon:

    [x,fval,eflag,output] = fmincon(problem);

Пример: Создание структуры проблемы с помощью createOptimProblem

В этом примере минимизируется функция запуска решателя с учетом ограничения x1 + 2x2  ≥ 4. Цель -

sixmin = 4x2 - 2,1x4 + x6/3 + xy - 4y2 + 4y4.(1)

Используйте interior-point алгоритм fminconи установите начальную точку в [2;3].

  1. Запишите дескриптор функции для целевой функции.

    sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
        + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
  2. Запишите матрицы линейных ограничений. Измените ограничение на форму «меньше»:

    A = [-1,-2];
    b = -4;
  3. Создайте локальные параметры для использования interior-point алгоритм:

    opts = optimoptions(@fmincon,'Algorithm','interior-point');
  4. Создание структуры проблемы с помощью createOptimProblem:

    problem = createOptimProblem('fmincon', ...
        'x0',[2;3],'objective',sixmin, ...
        'Aineq',A,'bineq',b,'options',opts)
  5. Полученная структура:

    problem = 
    
      struct with fields:
    
        objective: @(x)(4*x(1)^2-2.1*x(1)^4+x(1)^6/3+x(1)*x(2)-4*x(2)^2+4*x(2)^4)
               x0: [2x1 double]
            Aineq: [-1 -2]
            bineq: -4
              Aeq: []
              beq: []
               lb: []
               ub: []
          nonlcon: []
           solver: 'fmincon'
          options: [1x1 optim.options.Fmincon]
  6. Рекомендуется проверить структуру проблемы, запустив решатель на структуре:

    [x,fval,eflag,output] = fmincon(problem);

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