Main Content

OptimizationProblem

Problema de optimización

Descripción

Un objeto OptimizationProblem describe un problema de optimización, incluyendo variables para la optimización, restricciones, la función objetivo e información sobre si el objetivo debe maximizarse o minimizarse. Resuelva un problema completo utilizando solve.

Sugerencia

Para ver el flujo de trabajo completo, consulte Flujo de trabajo de optimización basada en problemas.

Creación

Cree un objeto OptimizationProblem utilizando optimproblem.

Advertencia

El enfoque basado en problemas no es compatible con valores complejos en una función objetivo, igualdades no lineales o desigualdades no lineales. Si el cálculo de una función tiene un valor complejo, incluso como valor intermedio, el resultado final puede ser incorrecto.

Propiedades

expandir todo

Etiqueta de problema, especificada como una cadena o vector de caracteres. El software no utiliza Description. Es una etiqueta arbitraria que puede utilizar por cualquier motivo. Por ejemplo, puede compartir, archivar o presentar un modelo o problema, y almacenar información descriptiva sobre el modelo o el problema en la propiedad Description.

Ejemplo: "Describes a traveling salesman problem"

Tipos de datos: char | string

Indicación para minimizar o maximizar, especificada como 'minimize' o 'maximize'. Esta propiedad afecta al funcionamiento de solve.

Puede utilizar el nombre corto 'min' para 'minimize' o 'max' para 'maximize'.

Ejemplo: 'maximize'

Tipos de datos: char | string

Esta propiedad o parámetro es de solo lectura.

Variables de optimización en el objeto, especificadas como una estructura de objetos OptimizationVariable.

Tipos de datos: struct

Función objetivo, especificada como un escalar OptimizationExpression o como una estructura que contiene un escalar OptimizationExpression. Incorpore una función objetivo en el problema cuando cree el problema, o después utilizando la notación de puntos.

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

Restricciones de optimización, especificadas como un objeto OptimizationConstraint, un objeto OptimizationEquality, un objeto OptimizationInequality o como una estructura que contiene uno de estos objetos. Incorpore restricciones en el problema cuando cree el problema, o más tarde, utilizando la notación de puntos:

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

Elimine una restricción estableciéndola en [].

prob.Constraints.TrayArea = [];

Funciones del objeto

optimoptionsCrear opciones de optimización
prob2structConvert optimization problem or equation problem to solver form
showMuestre información sobre el objeto de optimización
solveResolver un problema de optimización o un problema de ecuación
solversDetermine default and valid solvers for optimization problem or equation problem
varindexMap problem variables to solver-based variable index
writeSave optimization object description

Ejemplos

contraer todo

Cree un problema de programación lineal para su maximización. El problema tiene dos variables positivas y tres restricciones de desigualdad lineales.

prob = optimproblem('ObjectiveSense','max');

Cree variables positivas. Incluya una función objetivo en el problema.

x = optimvar('x',2,1,'LowerBound',0);
prob.Objective = x(1) + 2*x(2);

Cree restricciones de desigualdad lineales en el problema.

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;

Revise el problema.

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)

Resuelva el problema.

sol = solve(prob);
Solving problem using linprog.

Optimal solution found.
sol.x
ans = 2×1

    25
    15

Historial de versiones

Introducido en R2017b