optimproblem

Создайте задачу оптимизации

Описание

Использовать optimproblem чтобы создать задачу оптимизации.

Совет

Полный рабочий процесс см. в разделе Рабочий процесс оптимизации на основе проблем.

пример

prob = optimproblem создает задачу оптимизации со свойствами по умолчанию.

пример

prob = optimproblem(Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Для примера, чтобы задать задачу максимизации вместо задачи минимизации, используйте prob = optimproblem('ObjectiveSense','maximize').

Примеры

свернуть все

Создайте задачу оптимизации со свойствами по умолчанию.

prob = optimproblem
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [0x0 struct] containing 0 OptimizationVariables
         Objective: [0x0 OptimizationExpression]
       Constraints: [0x0 struct] containing 0 OptimizationConstraints

  No problem defined.

Создайте задачу линейного программирования для максимизации. Задача имеет две положительные переменные и три линейных ограничения неравенства.

prob = optimproblem('ObjectiveSense','max');

Создайте положительные переменные. Включите целевую функцию в задачу.

x = optimvar('x',2,1,'LowerBound',0);
prob.Objective = x(1) + 2*x(2);

Создайте линейные ограничения неравенства в задаче.

cons1 = x(1) + 5*x(2) <= 100;
cons2 = x(1) + x(2) <= 40;
cons3 = 2*x(1) + x(2)/2 <= 60;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;

Проверьте проблему.

show(prob)
  OptimizationProblem : 

	Solve for:
       x

	maximize :
       x(1) + 2*x(2)


	subject to cons1:
       x(1) + 5*x(2) <= 100

	subject to cons2:
       x(1) + x(2) <= 40

	subject to cons3:
       2*x(1) + 0.5*x(2) <= 60

	variable bounds:
       0 <= x(1)
       0 <= x(2)

Решите проблему.

sol = solve(prob);
Solving problem using linprog.

Optimal solution found.
sol.x
ans = 2×1

   25.0000
   15.0000

Входные параметры

свернуть все

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: Чтобы задать задачу максимизации, используйте prob = optimproblem('ObjectiveSense','maximize').

Ограничения задачи, заданные как OptimizationConstraint массив или структура с OptimizationConstraint массивы как поля.

Пример: prob = optimproblem('Constraints',sum(x,2) == 1)

Метка задачи, заданная как строковый или символьный вектор. Программное обеспечение не использует Description для расчетов. Description является произвольной меткой, которую можно использовать по любой причине. Например, вы можете делиться, архивировать, или представлять модель или задачу, и хранить описательную информацию о модели или проблеме в Description.

Пример: "An iterative approach to the Traveling Salesman problem"

Типы данных: char | string

Целевая функция, заданная как скаляр OptimizationExpression объект.

Пример: prob = optimproblem('Objective',sum(sum(x))) для переменной 2-D x

Чувство оптимизации, заданное как 'minimize' или 'maximize'. Можно также задать 'min' для получения 'minimize' или 'max' для получения 'maximize'. solve функция минимизирует цель, когда ObjectiveSense является 'minimize' и максимизирует цель при ObjectiveSense является 'maximize'.

Пример: prob = optimproblem('ObjectiveSense','max')

Типы данных: char | string

Выходные аргументы

свернуть все

Задача оптимизации, возвращенная как OptimizationProblem объект. Как правило, чтобы завершить описание задачи, вы задаете целевую функцию и ограничения. Однако у вас может быть задача выполнимости, которая не имеет целевой функции, или у вас может быть проблема без ограничений. Решите полную задачу, позвонив solve.

Предупреждение

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

Введенный в R2017b