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))) для 2D переменной x

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

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

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

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

свернуть все

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

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

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

Введенный в R2017b

Для просмотра документации необходимо авторизоваться на сайте