Main Content

optimvar

최적화 변수 만들기

설명

optimvar을 사용하여 최적화 변수를 만듭니다.

전체 워크플로는 문제 기반 최적화 워크플로 또는 방정식 풀이를 위한 문제 기반 워크플로 항목을 참조하십시오.

예제

x = optimvar(name)은 스칼라 최적화 변수를 만듭니다. 최적화 변수는 기호 객체로서, 이를 사용하여 해당 변수에 관한 목적 함수 및 문제 제약 조건의 표현식을 만들 수 있습니다.

혼동을 피하려면 name을 MATLAB® 변수 이름이 되도록 설정하십시오. 예를 들면 다음과 같습니다.

metal = optimvar('metal')

예제

x = optimvar(name,n)은 최적화 변수로 구성된 n×1 벡터를 만듭니다.

예제

x = optimvar(name,cstr)은 인덱싱에 cstr을 사용할 수 있는 최적화 변수로 구성된 벡터를 만듭니다. x의 요소 개수는 cstr 벡터의 길이와 같습니다. x의 방향은 cstr의 방향과 같습니다. 즉, cstr이 행 벡터이면 x는 행 벡터이고, cstr이 열 벡터이면 x는 열 벡터입니다.

예제

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.

string형 "brass", "stainless", "galvanized"로 인덱싱된 정수 최적화 변수 벡터 bolts를 만듭니다. bolts의 인덱스를 사용하여 최적화 표현식을 만들고, 문자형 배열을 사용하거나 다른 방향으로 bolts 생성을 시험해 봅니다.

행 방향으로 string형을 사용하여 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.

string형 인덱스를 사용하여 최적화 표현식을 만듭니다.

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

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

string형 대신에 문자형 벡터로 구성된 셀형 배열을 사용하여 이전과 동일한 인덱스를 갖는 변수를 얻습니다.

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.

1×3이 아닌 3×1의 열 방향 버전 bnames를 사용하고 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.

xarray라는 최적화 변수로 구성된 3×4×2 배열을 만듭니다.

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 배열을 만듭니다. 여기서 첫 번째 차원은 string형 '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.

이진 변수를 나타내며 크기가 3×3×3인 최적화 변수 x를 만듭니다.

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.

입력 인수

모두 축소

변수 이름으로, 문자형 벡터나 string형으로 지정됩니다.

어떤 이름이 변수의 어떤 측면과 관련되는지에 대한 혼동을 피하려면 작업 공간 변수 이름을 변수 이름으로 설정하십시오. 예를 들면 다음과 같습니다.

truck = optimvar('truck');

예: "Warehouse"

예: 'truck'

데이터형: char | string

변수 차원으로, 양의 정수로 지정됩니다.

예: 4

데이터형: double

인덱싱을 위한 이름으로, 문자형 벡터 또는 string형 벡터로 구성된 셀형 배열로 지정됩니다.

참고

cstr"Tp"와 같은 string형 스칼라일 수 없고 ["Tp" "ul"]과 같은 벡터여야 합니다. 단일 이름을 지정하려면 {'Tp'} 또는 이와 동등한 cellstr("Tp")를 사용하십시오.

예: {'red','orange','green','blue'}

예: ["red";"orange";"green";"blue"]

데이터형: string | cell

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 명령 x = optimvar('x',3,'LowerBound',0,'UpperBound',[Inf,2,4])를 사용하여 xx(2) <= 2x(3) <= 4를 충족하는, 요소를 3개 가진 음이 아닌 벡터로 생성합니다.

변수 유형으로, 'continuous' 또는 'integer'로 지정됩니다.

  • 'continuous' – 실수 값

  • 'integer' – 정수 값

변수 유형은 배열에 포함된 모든 변수에 적용됩니다. 여러 변수 유형을 포함하려면 변수를 여러 개 만드십시오.

이진 변수를 지정하려면 'integer' 유형을 사용하고 LowerBound0, UpperBound1로 지정하십시오.

예: 'integer'

하한으로, x와 동일한 크기의 배열이나 실수형 스칼라로 지정됩니다. LowerBound가 스칼라이면 값은 x의 모든 요소에 적용됩니다.

예: x의 모든 요소에 대해 하한을 0으로 설정하려면 스칼라 값 0을 지정합니다.

데이터형: double

상한으로, x와 동일한 크기의 배열이나 실수형 스칼라로 지정됩니다. UpperBound가 스칼라이면 값은 x의 모든 요소에 적용됩니다.

예: x의 모든 요소에 대해 상한을 2로 설정하려면 스칼라 값 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에 개발됨