exponenta event banner

optimvar

Создание переменных оптимизации

Описание

Использовать optimvar для создания переменных оптимизации.

пример

x = optimvar(name) создает скалярную переменную оптимизации. Переменная оптимизации является символическим объектом, который позволяет создавать выражения для целевой функции и ограничения задачи в терминах переменной.

Совет

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

metal = optimvar('metal')

пример

x = optimvar(name,n) создает n-by-1 вектор переменных оптимизации.

пример

x = optimvar(name,cstr) создает вектор переменных оптимизации, которые могут использовать cstr для индексации. Количество элементов x совпадает с длиной cstr вектор. Ориентация x совпадает с ориентацией cstr: x является вектором строки, когда cstr является вектором строки, и x является вектором столбца, когда cstr является вектором-столбцом.

пример

x = optimvar(name,cstr1,n2,...,cstrk) или x = optimvar(name,{cstr1,cstr2,...,cstrk}) или x = optimvar(name,[n1,n2,...,nk]), для любой комбинации положительных целых чисел nj и имена cstrk, создает массив переменных оптимизации с размерами, равными целым числам nj и длины записей cstr1k.

пример

x = optimvar(___,Name,Value), для любого предыдущего синтаксиса, использует дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары. Например, чтобы задать целочисленную переменную, используйте x = optimvar('x','Type','integer').

Примеры

свернуть все

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

Входные аргументы

свернуть все

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

Совет

Чтобы избежать путаницы относительно того, какое имя относится к какому аспекту переменной, задайте имя переменной рабочей области в качестве имени переменной. Например,

truck = optimvar('truck');

Пример: "Warehouse"

Пример: 'truck'

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

Переменная размерность, заданная как положительное целое число.

Пример: 4

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

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

Пример: x = optimvar('x',["Warehouse","Truck","City"])

Пример: x = optimvar('x',{'Warehouse','Truck','City'})

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: Создать x как 3-элементный неотрицательный вектор с x(2) <= 2 и x(3) <= 4 командой x = optimvar('x',3,'LowerBound',0,'UpperBound',[Inf,2,4])

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

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

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

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

Совет

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

Пример: 'integer'

Нижние границы, указанные как массив того же размера, что и x или как действительный скаляр. Если LowerBound является скаляром, значение применяется ко всем элементам x.

Пример: Установка нижней границы 0 ко всем элементам x, укажите скалярное значение 0.

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

Верхние границы, заданные как массив того же размера, что и x или как действительный скаляр. Если UpperBound является скаляром, значение применяется ко всем элементам x.

Пример: Установка верхней границы 2 ко всем элементам x, укажите скалярное значение 2.

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

Выходные аргументы

свернуть все

Переменная оптимизации, возвращаемая как OptimizationVariable массив. Размеры массива совпадают с размерами соответствующих входных переменных, таких как cstr1около-cstr2.

Совет

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

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