exponenta event banner

OptimizationVariable

Переменная для оптимизации

Описание

Один OptimizationVariable содержит переменные для выражений оптимизации. Выражения используются для представления целевой функции, ограничений или уравнений. Переменные носят символический характер и могут быть массивами любого размера.

Создание

Создание OptimizationVariable объект с использованием optimvar.

Свойства

развернуть все

Свойства на уровне массива

Это свойство доступно только для чтения.

Имя переменной, указанное как строковый или символьный вектор.

Name дает метку переменной, которая должна отображаться, например, в show или write. Name также дает имена полей в структуре решения, которые solve возвращает.

Совет

Во избежание путаницы установите name является именем переменной MATLAB ®. Например,

metal = optimvar('metal')

Типы данных: char | string

Тип переменной, указанный как 'continuous' или 'integer'.

  • 'continuous' - Реальные значения

  • 'integer' - Целочисленные значения

Тип переменной применяется ко всем переменным в массиве. Чтобы иметь несколько типов переменных, создайте несколько переменных.

Совет

Чтобы указать двоичную переменную, используйте 'integer' введите и укажите LowerBound = 0 и UpperBound = 1.

Типы данных: char | string

Имена индексов, заданные как массив ячеек строк или векторов символов. Сведения об использовании имен индексов см. в разделе Именованный индекс для переменных оптимизации.

Типы данных: cell

Свойства по элементам

Нижняя граница, заданная как действительный скаляр или как действительный массив, имеющий те же размеры, что и OptimizationVariable объект. Скалярные значения применяются ко всем элементам переменной.

LowerBound свойство всегда отображается в виде массива. Однако свойство можно задать как скаляр, применяемый ко всем элементам. Например,

var.LowerBound = 0

Типы данных: double

Верхняя граница, заданная как действительный скаляр или как действительный массив, имеющий те же размеры, что и OptimizationVariable объект. Скалярные значения применяются ко всем элементам переменной.

UpperBound свойство всегда отображается в виде массива. Однако свойство можно задать как скаляр, применяемый ко всем элементам. Например,

var.UpperBound = 1

Типы данных: double

Функции объекта

showОтображение информации об объекте оптимизации
showboundsОтображать границы переменных
writeСохранить описание объекта оптимизации
writeboundsСохранить описание переменных границ

Примеры

свернуть все

Создание переменной скалярной оптимизации с именем 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.

Создание вектора переменной оптимизации 3 к 1 с именем 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.

Создание вектора целочисленной переменной оптимизации с именем bolts который индексируется строками "brass", "stainless", и "galvanized". Использовать индексы bolts чтобы создать выражение оптимизации и поэкспериментировать с созданием bolts с использованием массивов символов или в другой ориентации.

Создать bolts использование строк в ориентации строки.

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.

Создайте выражение оптимизации с помощью строковых индексов.

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

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

Используйте массив ячеек символьных векторов вместо строк, чтобы получить переменную с теми же индексами, что и раньше.

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.

Использование колонноориентированной версии bnames, 3 на 1 вместо 1 на 3, и обратите внимание, что bolts имеет и такую ориентацию.

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.

Создание массива переменных оптимизации 3 на 4 на 2 с именем 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.

Можно также создать многомерные переменные, индексированные смесью имен и числовых индексов. Например, создайте массив переменных оптимизации 3 на 4, где первое измерение индексируется строками 'brass', 'stainless', и 'galvanized'и второе измерение численно индексируется.

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.

Создание переменной оптимизации с именем x размера 3-на-3-на-3, который представляет двоичные переменные.

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.

Подробнее

развернуть все

Совет

  • OptimizationVariable объекты имеют режим копирования дескриптора. См. раздел Поведение объекта-дескриптора и сравнение классов дескрипторов и значений. Поведение обработки копирования означает, что копия OptimizationVariable указывает на оригинал и не имеет самостоятельного существования. Например, создайте переменную x, скопируйте его в y, затем задайте свойство y. Обратите внимание, что x принимает новое значение свойства.

    x = optimvar('x','LowerBound',1);
    y = x;
    y.LowerBound = 0;
    showbounds(x)
        0 <= x
Представлен в R2017b