Main Content

optimvar

Crear variables de optimización

Descripción

Utilice optimvar para crear variables de optimización.

ejemplo

x = optimvar(name) crea una variable de optimización escalar. Una variable de optimización es un objeto simbólico que le permite crear expresiones para la función objetivo y las restricciones de problema en términos de la variable.

Sugerencia

Para evitar confusiones, establezca name de forma que sea el nombre de variable de MATLAB®. Por ejemplo:

metal = optimvar('metal')

ejemplo

x = optimvar(name,n) crea un vector de n por 1 de variables de optimización.

ejemplo

x = optimvar(name,cstr) crea un vector de variables de optimización que puede utilizar cstr para indexar. El número de elementos de x es el mismo que la longitud del vector cstr. La orientación de x es la misma que la orientación de cstr: x es un vector fila cuando cstr es un vector fila y x es un vector columna cuando cstr es un vector columna.

ejemplo

x = optimvar(name,cstr1,n2,...,cstrk) o x = optimvar(name,{cstr1,cstr2,...,cstrk}) o x = optimvar(name,[n1,n2,...,nk]), para cualquier combinación de enteros positivos nj y nombres cstrk, crea un arreglo de variables de optimización con dimensiones idénticas a los enteros nj y a las longitudes de las entradas cstr1k.

ejemplo

x = optimvar(___,Name,Value), para cualquier sintaxis anterior, utiliza opciones adicionales especificadas por uno o más argumentos de par Name,Value. Por ejemplo, para especificar una variable de enteros, utilice x = optimvar('x','Type','integer').

Ejemplos

contraer todo

Cree una variable de optimización escalar llamada dollars.

dollars = optimvar('dollars')
dollars = 
  OptimizationVariable with properties:

          Name: 'dollars'
          Type: 'continuous'
    IndexNames: {{}  {}}
    LowerBound: -Inf
    UpperBound: Inf

  See variables with show.
  See bounds with showbounds.

Cree un vector de variable de optimización de 3 por 1 llamado x.

x = optimvar('x',3)
x = 
  3x1 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'x'
          Type: 'continuous'
    IndexNames: {{}  {}}

  Elementwise properties:
    LowerBound: [3x1 double]
    UpperBound: [3x1 double]

  See variables with show.
  See bounds with showbounds.

Cree un vector de variable de optimización de enteros llamado bolts indexado por las cadenas "brass", "stainless" y "galvanized". Utilice los índices de bolts para crear una expresión de optimización y experimente con la creación de bolts utilizando arreglos de caracteres o en una orientación diferente.

Cree bolts utilizando cadenas en una orientación de fila.

bnames = ["brass","stainless","galvanized"];
bolts = optimvar('bolts',bnames,'Type','integer')
bolts = 
  1x3 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'bolts'
          Type: 'integer'
    IndexNames: {{}  {1x3 cell}}

  Elementwise properties:
    LowerBound: [-Inf -Inf -Inf]
    UpperBound: [Inf Inf Inf]

  See variables with show.
  See bounds with showbounds.

Cree una expresión de optimización utilizando los índices de cadena.

y = bolts("brass") + 2*bolts("stainless") + 4*bolts("galvanized")
y = 
  Linear OptimizationExpression

    bolts('brass') + 2*bolts('stainless') + 4*bolts('galvanized')

Utilice un arreglo de celdas de vectores de caracteres en lugar de cadenas para obtener una variable con los mismos índices que anteriormente.

bnames = {'brass','stainless','galvanized'};
bolts = optimvar('bolts',bnames,'Type','integer')
bolts = 
  1x3 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'bolts'
          Type: 'integer'
    IndexNames: {{}  {1x3 cell}}

  Elementwise properties:
    LowerBound: [-Inf -Inf -Inf]
    UpperBound: [Inf Inf Inf]

  See variables with show.
  See bounds with showbounds.

Utilice una versión de bnames orientada a columnas, de 3 por 1 en lugar de 1 por 3, y observe que bolts también tiene esa orientación.

bnames = ["brass";"stainless";"galvanized"];
bolts = optimvar('bolts',bnames,'Type','integer')
bolts = 
  3x1 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'bolts'
          Type: 'integer'
    IndexNames: {{1x3 cell}  {}}

  Elementwise properties:
    LowerBound: [3x1 double]
    UpperBound: [3x1 double]

  See variables with show.
  See bounds with showbounds.

Cree un arreglo de 3 por 4 por 2 de variables de optimización llamado xarray.

xarray = optimvar('xarray',3,4,2)
xarray = 
  3x4x2 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'xarray'
          Type: 'continuous'
    IndexNames: {{}  {}  {}}

  Elementwise properties:
    LowerBound: [3x4x2 double]
    UpperBound: [3x4x2 double]

  See variables with show.
  See bounds with showbounds.

También puede crear variables multidimensionales indexadas por una mezcla de nombres e índices numéricos. Por ejemplo, cree un arreglo de 3 por 4 de variables de optimización donde la primera dimensión esté indexada por las cadenas 'brass', 'stainless' y 'galvanized', y la segunda dimensión esté indexada numéricamente.

bnames = ["brass","stainless","galvanized"];
bolts = optimvar('bolts',bnames,4)
bolts = 
  3x4 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'bolts'
          Type: 'continuous'
    IndexNames: {{1x3 cell}  {}}

  Elementwise properties:
    LowerBound: [3x4 double]
    UpperBound: [3x4 double]

  See variables with show.
  See bounds with showbounds.

Cree una variable de optimización llamada x con un tamaño de 3 por 3 por 3 que represente variables binarias.

x = optimvar('x',3,3,3,'Type','integer','LowerBound',0,'UpperBound',1)
x = 
  3x3x3 OptimizationVariable array with properties:

  Array-wide properties:
          Name: 'x'
          Type: 'integer'
    IndexNames: {{}  {}  {}}

  Elementwise properties:
    LowerBound: [3x3x3 double]
    UpperBound: [3x3x3 double]

  See variables with show.
  See bounds with showbounds.

Argumentos de entrada

contraer todo

Nombre de variable, especificado como un vector de caracteres o cadena.

Sugerencia

Para evitar confusiones sobre qué nombre hace referencia a qué aspecto de una variable, establezca el nombre de variable del área de trabajo como nombre de variable. Por ejemplo:

truck = optimvar('truck');

Ejemplo: "Warehouse"

Ejemplo: 'truck'

Tipos de datos: char | string

Dimensión de variable, especificada como entero positivo.

Ejemplo: 4

Tipos de datos: double

Nombres que se desea indexar, especificados como un arreglo de celdas de vectores de caracteres o un vector de cadenas.

Nota

cstr no puede ser un escalar de cadena como "Tp", sino que debe ser un vector como ["Tp" "ul"]. Para especificar un único nombre, utilice {'Tp'} o el equivalente cellstr("Tp").

Ejemplo: {'red','orange','green','blue'}

Ejemplo: ["red";"orange";"green";"blue"]

Tipos de datos: string | cell

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value el valor correspondiente. Los argumentos nombre-valor deben aparecer tras otros argumentos, aunque no importa el orden de los pares.

En versiones anteriores a R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: Cree x como un vector no negativo de 3 elementos con x(2) <= 2 y x(3) <= 4 por medio del comando x = optimvar('x',3,'LowerBound',0,'UpperBound',[Inf,2,4])

Tipo de variable, especificado como 'continuous' o 'integer'.

  • 'continuous': valores reales

  • 'integer': valores enteros

El tipo de variable se aplica a todas las variables del arreglo. Para tener varios tipos de variables, cree múltiples variables.

Sugerencia

Para especificar variables binarias, utilice el tipo 'integer' con LowerBound igual a 0 y UpperBound igual a 1.

Ejemplo: 'integer'

Límites inferiores, especificados como un arreglo del mismo tamaño que x o como un escalar real. Si LowerBound es un escalar, el valor se aplica a todos los elementos de x.

Ejemplo: Para establecer un límite inferior de 0 en todos los elementos de x, especifique el valor escalar 0.

Tipos de datos: double

Límites superiores, especificados como un arreglo del mismo tamaño que x o como un escalar real. Si UpperBound es un escalar, el valor se aplica a todos los elementos de x.

Ejemplo: Para establecer un límite superior de 2 en todos los elementos de x, especifique el valor escalar 2.

Tipos de datos: double

Argumentos de salida

contraer todo

Variable de optimización, devuelta como un arreglo OptimizationVariable. Las dimensiones del arreglo son las mismas que las de las variables de entrada correspondiente, como cstr1 por cstr2.

Sugerencias

  • Los objetos OptimizationVariable tienen comportamiento de copia de identificador. Consulte Comportamiento de los objetos de identificadores y Comparison of Handle and Value Classes. Comportamiento de copia de identificador significa que una copia de una OptimizationVariable apunta al original y no existe de forma independiente. Por ejemplo, cree una variable x, cópiela en y y, después, establezca una propiedad de y. Tenga en cuenta que x toma el valor de propiedad nuevo.

    x = optimvar('x','LowerBound',1);
    y = x;
    y.LowerBound = 0;
    showbounds(x)
        0 <= x

Historial de versiones

Introducido en R2017b