라그랑주 승수 구조체
제약 조건이 있는 최적화에는 1차 최적성 측정값에 설명된 대로 일련의 라그랑주 승수가 수반됩니다. 솔버는 추정된 라그랑주 승수를 구조체로 반환합니다. 라그랑주 승수의 일반적인 기호가 그리스 문자 람다(λ)이므로, 이 구조체를 lambda
라고 합니다. 이 구조체는 승수를 다음과 같은 유형(필드라고 함)으로 분리합니다.
lower
– 하한과 관련upper
– 상한과 관련eqlin
– 선형 등식과 관련ineqlin
– 선형 부등식과 관련eqnonlin
– 비선형 등식과 관련ineqnonlin
– 비선형 부등식과 관련soc
– 2차 원뿔 제약 조건과 관련
예를 들어, 라그랑주 승수 구조체의 비선형 부등식 필드에 액세스하려면 lambda.inqnonlin
을 입력하십시오. 하한과 관련된 라그랑주 승수의 세 번째 요소에 액세스하려면 lambda.lower(3)
을 입력하십시오.
라그랑주 승수 구조체의 내용은 솔버에 따라 다릅니다. 예를 들어, 선형 계획법에는 비선형성이 없으므로 이 솔버에는 eqnonlin
또는 ineqnonlin
필드가 없습니다. 적용 가능한 각 솔버의 함수 도움말 페이지에서 “출력값” 제목 아래에 라그랑주 승수 구조체에 대한 설명이 포함되어 있습니다.
선형 및 비선형 부등식 제약 조건과 범위가 있는 비선형 문제의 해에 대한 라그랑주 승수 구조체를 살펴보겠습니다.
lb = [-3 -3]; % lower bounds ub = [3 3]; % upper bounds A = [1 1]; % linear inequality x(1) + x(2) <= 1 b = 1; Aeq = []; beq = []; x0 = [-1 1]; fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; % Rosenbrock function nlcons = @(x)deal(x(1)^2 + x(2)^2 - 1,[]); % nonlinear inequality options = optimoptions('fmincon','Display','off'); [x,fval,exitflag,output,lambda] = ... fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcons,options); disp(lambda)
eqlin: [0×1 double] eqnonlin: [0×1 double] ineqlin: 0.3407 lower: [2×1 double] upper: [2×1 double] ineqnonlin: 1.7038e-07
다음은 이 라그랑주 승수 구조체에 대한 해석입니다.
선형 등식 제약 조건과 비선형 등식 제약 조건이 없으므로
lambda.eqlin
필드와lambda.eqnonlin
필드의 크기는 0입니다.lambda.ineqlin
필드는 값0.3407
을 가지며, 이는 선형 부등식 제약 조건이 활성 상태임을 나타냅니다. 선형 부등식 제약 조건은x(1) + x(2) <= 1
입니다. 제약 조건이 해에서 활성 상태인지(즉, 해에서 부등식이 등식이 됨) 확인합니다.x(1) + x(2)
ans = 1.0000
lambda.lower
필드와lambda.upper
필드의 값을 확인합니다.lambda.lower
ans = 1.0e-07 * 0.2210 0.2365
lambda.upper
ans = 1.0e-07 * 0.3361 0.3056
이들 값은 사실상 0이며, 이는 해가 경계값 가까이에 있지 않음을 나타냅니다.
lambda.ineqnonlin
필드의 값은1.7038e-07
이며, 이는 이 제약 조건이 활성 상태가 아님을 나타냅니다. 제약 조건x(1)^2 + x(2)^2 <= 1
을 확인합니다.x(1)^2 + x(2)^2
ans = 0.5282
비선형 제약 조건 함수 값이 그 제한값 가까이에 있지 않으므로, 라그랑주 승수는 대략 0입니다.