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;

Рассмотрите проблему.

showproblem(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