OptimizationProblem

Задача оптимизации

Описание

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

Совет

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

Создание

Создайте OptimizationProblem объект при помощи optimproblem.

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

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

Свойства

расширить все

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

Пример: "Describes a traveling salesman problem"

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

Индикация для минимизации или максимизации, заданная как 'minimize' или 'maximize'. Это свойство влияет на то, как solve работает.

Можно использовать краткое имя 'min' для 'minimize' или 'max' для 'maximize'.

Пример: 'maximize'

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

Это свойство доступно только для чтения.

Переменные оптимизации в объекте, заданные как структура OptimizationVariable объекты.

Типы данных: struct

Целевая функция, заданная как скаляр OptimizationExpression или как структура, содержащая скаляр OptimizationExpression. Включите целевую функцию в задачу, когда вы создаете задачу, или позже с помощью записи через точку.

prob = optimproblem('Objective',5*brownies + 2*cookies)
% or
prob = optimproblem;
prob.Objective = 5*brownies + 2*cookies

Ограничения оптимизации, заданные как OptimizationConstraint объект, OptimizationEquality объект, OptimizationInequality объект или как структура, содержащая один из этих объектов. Включите ограничения в задачу, когда вы создаете задачу, или позже с помощью записи через точку:

constrs = struct('TrayArea',10*brownies + 20*cookies <= traysize,...
    'TrayWeight',12*brownies + 18*cookies <= maxweight);
prob = optimproblem('Constraints',constrs)
% or
prob.Constraints.TrayArea = 10*brownies + 20*cookies <= traysize
prob.Constraints.TrayWeight = 12*brownies + 18*cookies <= maxweight

Удалите ограничение, задав для него значение [].

prob.Constraints.TrayArea = [];

Функции объекта

optimoptionsСоздайте опции оптимизации
prob2structПреобразуйте задачу оптимизации или задачу уравнения в форму решателя
showОтобразите информацию об объекте оптимизации
solveРешите задачу оптимизации или уравнения
varindexСопоставьте переменные задачи с индексом переменной на основе решателя
writeСохраните описание объекта оптимизации

Примеры

свернуть все

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

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

Введенный в R2017b