exponenta event banner

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