Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

optimvar

Cree variables de optimización

Descripción

Utilice optimvar para crear variables de optimización.

Sugerencia

Para ver el flujo de trabajo completo, consulte Problem-Based Optimization Workflow o Problem-Based Workflow for Solving Equations.

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 espacio 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 de índices, especificados como un arreglo de cadenas o un arreglo de celdas de arreglos de caracteres.

Ejemplo: x = optimvar('x',["Warehouse","Truck","City"])

Ejemplo: x = optimvar('x',{'Warehouse','Truck','City'})

Tipos de datos: string | cell

Argumentos de par nombre-valor

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])

Especifique argumentos opcionales de par Name,Value separados por comas. Name es el nombre del argumento y Value el valor correspondiente. Name debe aparecer entre comillas. Puede especificar varios argumentos de par nombre-valor en cualquier orden, como Name1,Value1,...,NameN,ValueN.

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 Handle Object Behavior 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