exponenta event banner

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