Main Content

Flujo de trabajo de optimización basada en problemas

Nota

Optimization Toolbox™ ofrece dos enfoques para resolver problemas de optimización de objetivo único. Esta sección describe el enfoque basado en problemas. Configuración de problema de optimización basada en solvers describe el enfoque basado en solvers.

Para resolver un problema de optimización, siga los pasos siguientes.

  • Cree un objeto de problema de optimización con optimproblem. Un objeto de problema es un contenedor en el que se definen una expresión objetivo y restricciones. El objeto de problema de optimización define el problema y cualquier límite que exista en las variables del problema.

    Por ejemplo, cree un problema de maximización.

    prob = optimproblem('ObjectiveSense','maximize');
  • Cree variables con nombre mediante optimvar. Una variable de optimización es una variable simbólica que se utiliza para describir el objetivo del problema y las restricciones. Incluya cualquier límite en las definiciones de la variable.

    Por ejemplo, cree un arreglo de variables binarias de 15 por 3 llamado 'x'.

    x = optimvar('x',15,3,'Type','integer','LowerBound',0,'UpperBound',1);
  • Defina la función objetivo en el objeto del problema como una expresión en las variables con nombre.

    Nota

    Si tiene una función no lineal que no está compuesta por polinomios, expresiones racionales y funciones elementales como exp, convierta la función en una expresión de optimización utilizando fcn2optimexpr. Consulte Convertir una función no lineal en una expresión de optimización y Operaciones compatibles con variables y expresiones de optimización.

    Si fuera necesario, incluya parámetros adicionales en la expresión como variables del espacio de trabajo; consulte Pasar parámetros adicionales en el enfoque basado en problemas.

    Por ejemplo, asuma que tiene una matriz real f del mismo tamaño que una matriz de variables x y el objetivo es la suma de las entradas en f por las variables x correspondientes.

    prob.Objective = sum(sum(f.*x));
  • Defina restricciones para problemas de optimización como comparaciones en las variables con nombre o como comparaciones de expresiones.

    Nota

    Si tiene una función no lineal que no está compuesta por polinomios, expresiones racionales y funciones elementales como exp, convierta la función en una expresión de optimización utilizando fcn2optimexpr. Consulte Convertir una función no lineal en una expresión de optimización y Operaciones compatibles con variables y expresiones de optimización.

    Por ejemplo, asuma que la suma de las variables de cada fila de x debe ser uno y la suma de las variables de cada columna debe ser menos de uno.

    onesum = sum(x,2) == 1;
    vertsum = sum(x,1) <= 1;
    prob.Constraints.onesum = onesum;
    prob.Constraints.vertsum = vertsum;
  • Para problemas no lineales, establezca un punto inicial como una estructura cuyos campos son los nombres de las variables de optimización. Por ejemplo:

    x0.x = randn(size(x));
    x0.y = eye(4); % Assumes y is a 4-by-4 variable
  • Resuelva el problema utilizando solve.

    sol = solve(prob);
    % Or, for nonlinear problems,
    sol = solve(prob,x0)

Además de estos pasos básicos, puede revisar la definición del problema antes de resolverlo utilizando show o write. Establezca opciones para solve utilizando optimoptions, como se explica en Change Default Solver or Options.

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.

Nota

Todos los nombres en un problema de optimización deben ser únicos. Específicamente, todos los nombres de variables, de funciones objetivo y de funciones de restricción deben ser diferentes.

Para ver un ejemplo básico de programación lineal de enteros mixtos, consulte Aspectos básicos de la programación lineal de enteros mixtos: Basada en problemas o la versión en vídeo Resuelva un problema de programación lineal de enteros mixtos utilizando el modelado de optimización. Para ver un ejemplo no lineal, consulte Resolver un problema no lineal restringido, basado problemas. Para obtener ejemplos más exhaustivos, consulte Optimización no lineal basada en problemas, Programación lineal y programación lineal de enteros mixtos o Programación cuadrática y programación de cono.

Consulte también

| | | | | |

Temas relacionados