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