Main Content

OptimizationInequality

부등식 제약 조건

설명

OptimizationInequality 객체는 OptimizationVariable 객체 또는 OptimizationExpression 객체에 대한 부등식 제약 조건을 포함합니다. 부등식 제약 조건에는 비교 연산자 <= 또는 >=가 사용됩니다.

단일 명령문은 부등식으로 구성된 하나의 배열을 나타낼 수 있습니다. 예를 들어 다음과 같은 단일 명령문으로 행렬 변수 x의 각 행의 합이 1을 넘지 않는다는 부등식을 표현할 수 있습니다.

constrsum = sum(x,2) <= 1

OptimizationInequality 객체는 OptimizationProblem의 제약 조건으로 사용할 수 있습니다.

전체 워크플로는 문제 기반 최적화 워크플로 항목을 참조하십시오.

생성

최적화 표현식에 비교 연산자 <= 또는 >=를 사용하여 부등식을 만듭니다.

점 표기법을 사용하여 최적화 문제의 Constraints 속성에 부등식을 포함합니다.

prob = optimproblem;
x = optimvar('x',4,6);
SumLessThanOne = sum(x,2) <= 1;
prob.Constraints.SumLessThanOne = SumLessThanOne;

optimineq 또는 optimconstr을 사용하여 빈 최적화 부등식을 만들 수도 있습니다. 그런 다음, 일반적으로 루프에서 부등식을 설정합니다. 예제는 루프에서 부등식 만들기 항목을 참조하십시오. 하지만 문제를 최대한 효율적으로 정식화하려면 루프에서 부등식을 설정하지 마십시오. Create Efficient Optimization Problems 항목을 참조하십시오.

속성

모두 확장

인덱스 이름으로, string형 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 인덱스 이름 사용에 관한 자세한 내용은 Named Index for Optimization Variables 항목을 참조하십시오.

데이터형: cell

이 속성은 읽기 전용입니다.

객체의 최적화 변수로, OptimizationVariable 객체의 구조체로 지정됩니다.

데이터형: struct

객체 함수

infeasibilityConstraint violation at a point
showoptimization 객체에 대한 정보 표시
writeSave optimization object description

예제

모두 축소

이름이 x인 4×6 최적화 변수 행렬을 만듭니다.

x = optimvar('x',4,6);

x의 각 행의 합이 1을 넘지 않는다는 부등식을 만듭니다.

constrsum = sum(x,2) <= 1
constrsum = 
  4x1 Linear OptimizationInequality array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 1 OptimizationVariable

  See inequality formulation with show.

부등식을 표시합니다.

show(constrsum)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) + x(1, 6) <= 1

(2, 1)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) + x(2, 6) <= 1

(3, 1)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) + x(3, 6) <= 1

(4, 1)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) + x(4, 6) <= 1

최적화 문제에 부등식을 포함하기 위해 점 표기법을 사용하여 Constraints 속성을 constrsum으로 설정합니다.

prob = optimproblem;
prob.Constraints.constrsum = constrsum
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [1x1 struct] containing 1 OptimizationVariable
         Objective: [0x0 OptimizationExpression]
       Constraints: [1x1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

요소를 2개 가진 변수 x가 여러 원판(중심과 반지름이 배열 centersradii 내에 있음)의 교점에 있어야 한다는 제약 조건을 만듭니다.

x = optimvar('x',1,2);
centers = [1 -2;3 -4;-2 3];
radii = [6 7 8];
constr = optimineq(length(radii));
for i = 1:length(constr)
    constr(i) = sum((x - centers(i,:)).^2) <= radii(i)^2;
end

부등식 표현식을 표시합니다.

show(constr)
  arg_LHS <= arg_RHS

  where:

        arg1 = zeros(3, 1);
        arg1(1) = sum((x - extraParams{1}).^2);
        arg1(2) = sum((x - extraParams{2}).^2);
        arg1(3) = sum((x - extraParams{3}).^2);
        arg_LHS = arg1(:);
        arg1 = zeros(3, 1);
        arg1(1) = 36;
        arg1(2) = 49;
        arg1(3) = 64;
        arg_RHS = arg1(:);

    extraParams{1}:

     1    -2


  extraParams{2}:

     3    -4


  extraParams{3}:

    -2     3

루프를 사용하는 대신, 변수에 행렬 연산을 사용하여 동일한 제약 조건을 만들 수 있습니다.

constr2 = sum(([x;x;x] - centers).^2,2) <= radii'.^2;

루프에서 부등식을 만드는 작업은 행렬 연산을 사용하여 부등식을 만드는 작업보다 시간이 더 오래 걸릴 수 있습니다.

버전 내역

R2019b에 개발됨