OptimizationVariable

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

Описание

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

Создание

Создайте объект OptimizationVariable с помощью optimvar.

Свойства

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

Свойства всего массива

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

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

Name дает переменную метку, которая будет отображена, такой как в showbounds, showconstr, showexpr, showproblem или showvar. Name также дает имена полей в структуре решения, которую возвращает solve.

Совет

Чтобы избежать беспорядка, установите name быть именем переменной MATLAB®. Например,

metal = optimvar('metal')

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

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

  • 'continuous' – Действительные значения

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

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

Совет

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

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

Имена индексов, заданные как массив ячеек строк или векторов символов. Для получения информации об использовании имен индексов смотрите Названный Индекс для Переменных Оптимизации.

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

Поэлементные свойства

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

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

var.LowerBound = 0

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

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

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

var.UpperBound = 1

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

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

showboundsОтобразите переменные границы
showvarОтобразите переменную оптимизации
writeboundsСохраните описание переменных границ
writevarСохраните описание переменной оптимизации

Примеры

свернуть все

Создайте скалярную переменную оптимизации под названием dollars.

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

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

  See variables with showvar.
  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 showvar.
  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 showvar.
  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 showvar.
  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 showvar.
  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 showvar.
  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 showvar.
  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 showvar.
  See bounds with showbounds.

Больше о

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

Советы

  • Объекты OptimizationVariable имеют поведение копии указателя. Смотрите Поведение объекта Указателя (MATLAB) и Сравнение Классов Указателя и Значения (MATLAB). Обработайте средние значения поведения копии, что копия OptimizationVariable указывает на оригинал и не имеет независимого существования. Например, создайте переменную x, скопируйте ее в y, затем установите свойство y. Обратите внимание на то, что x берет новое значение свойства.

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

Введенный в R2017b