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
Для просмотра документации необходимо авторизоваться на сайте