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 и длины записей cstr1к.

пример

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-by- cstr2.

Совет

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

    x = optimvar('x','LowerBound',1);
    y = x;
    y.LowerBound = 0;
    showbounds(x)
        0 <= x
Введенный в R2017b