계단 응답 요구 사항을 충족하기 위한 설계 최적화(코드)
이 예제는 sdo.optimize
함수를 사용하여 계단 응답 요구 사항을 충족하도록 제어기 파라미터를 프로그래밍 방식으로 최적화하는 방법을 보여줍니다.
모델 구조
이 예제에서는 watertank_stepinput
모델을 사용합니다. 이 모델은 단일 루프 피드백 시스템에 비선형 Water-Tank System 플랜트와 PI 제어기가 포함되어 있습니다.
모델을 엽니다.
sys = 'watertank_stepinput';
open_system(sys)
물탱크 모델을 보기 위해 Water-Tank System 서브시스템을 엽니다.
이 모델은 다음과 같은 물탱크 시스템을 나타냅니다.
여기서 각각은 다음을 나타냅니다.
은 탱크에 있는 물의 부피입니다.
는 탱크의 단면적입니다.
는 탱크의 물 높이입니다.
는 펌프에 인가되는 전압입니다.
는 탱크 안으로 유입되는 유량과 관련된 상수입니다.
는 탱크 밖으로 유출되는 유량과 관련된 상수입니다.
물은 밸브 개방에 비례하는 비율로 맨 위에서 탱크로 들어갑니다. 밸브 개방은 펌프에 인가되는 전압 에 비례합니다. 물은 물 높이 의 제곱근에 비례하는 비율로 탱크 바닥의 구멍을 통해 빠져나갑니다. 물 유량에 제곱근이 있으면 비선형 플랜트가 됩니다. 물 유량에 따른 탱크 부피의 변화율은 다음과 같습니다.
.
설계 요구 사항
탱크의 물 높이 H
는 다음 계단 응답 요구 사항을 충족해야 합니다.
상승 시간 2.5초 미만
정착 시간 20초 미만
오버슈트 5% 미만
계단 응답 요구 사항 지정하기
최적화 중에는 모델 파라미터의 현재 값을 사용하여 모델을 시뮬레이션하고 기록된 신호를 사용하여 설계 요구 사항을 평가합니다.
이 모델에서는 수위 H
를 기록합니다.
PlantOutput = Simulink.SimulationData.SignalLoggingInfo; PlantOutput.BlockPath = [sys '/Water-Tank System']; PlantOutput.OutputPortIndex = 1; PlantOutput.LoggingInfo.NameMode = 1; PlantOutput.LoggingInfo.LoggingName = 'PlantOutput';
다음으로 기록 정보를 저장할 sdo.SimulationTest
객체를 생성합니다. 이 객체는 또한 나중에 모델 시뮬레이션을 위해 사용합니다.
simulator = sdo.SimulationTest(sys); simulator.LoggingInfo.Signals = PlantOutput;
계단 응답 요구 사항을 지정합니다.
StepResp = sdo.requirements.StepResponseEnvelope; StepResp.RiseTime = 2.5; StepResp.SettlingTime = 20; StepResp.PercentOvershoot = 5; StepResp.FinalValue = 2; StepResp.InitialValue = 1;
StepResp
는 sdo.requirements.StepResponseEnvelope
객체입니다. StepResp.FinalValue
와 StepResp.InitialValue
에 할당된 값은 물탱크 높이가 1
에서 2
로 한 계단 변동한 것에 해당합니다.
설계 변수 지정하기
모델 응답을 최적화할 때 소프트웨어는 설계 요구 사항을 충족하기 위해 파라미터(설계 변수) 값을 수정합니다.
최적화할 모델 파라미터를 선택합니다. 여기에서는 PID 제어기의 파라미터를 최적화합니다.
p = sdo.getParameterFromModel(sys,{'Kp','Ki'});
p
는 두 개의 param.Continuous
객체로 구성된 배열입니다.
파라미터를 양수 값으로 제한하기 위해 각 파라미터의 최솟값을 0
으로 설정합니다.
p(1).Minimum = 0; p(2).Minimum = 0;
모델 응답 최적화하기
일련의 파라미터 값에 대해 시스템 성능을 평가하는 설계 함수를 생성합니다.
evalDesign = @(p) sldo_model1_design(p,simulator,StepResp);
evalDesign
은 비용 함수 sldo_model1_design
을 호출하는 익명 함수입니다. 비용 함수는 모델을 시뮬레이션하고 설계 요구 사항을 평가합니다. 이 함수를 보려면 명령줄에 edit sldo_model1_design
을 입력하십시오.
설계 변수의 현재 값을 사용하여 초기 모델 응답을 계산합니다.
initDesign = evalDesign(p);
비선형 부등식 제약 조건을 검토합니다.
initDesign.Cleq
ans = 8×1
0.1739
0.0169
-0.0002
-0.0101
-0.0229
0.0073
-0.0031
0.0423
일부 Cleq
값이 지정된 허용오차를 초과한 양수인 것은 현재 파라미터 값을 사용하는 응답이 설계 요구 사항을 위반했다는 것을 나타냅니다.
최적화 옵션을 지정합니다.
opt = sdo.OptimizeOptions;
opt.MethodOptions.Algorithm = 'sqp';
소프트웨어는 디폴트 최적화 방법인 fmincon
과 fmincon
에 대한 순차적 2차 계획법 알고리즘을 사용하도록 opt
를 구성합니다.
응답을 최적화합니다.
[pOpt,optInfo] = sdo.optimize(evalDesign,p,opt);
Optimization started 2024-Jul-20, 13:44:33 max First-order Iter F-count f(x) constraint Step-size optimality 0 5 0 0.1739 1 10 0 0.03411 1 0.81 2 15 0 0 0.235 0.0429 3 15 0 0 6.13e-19 0 Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
각 최적화 반복 시 소프트웨어는 모델을 시뮬레이션하고 디폴트 최적화 솔버인 fmincon
은 설계 요구 사항을 충족하도록 설계 변수를 수정합니다. 자세한 내용은 How the Optimization Algorithm Formulates Minimization Problems 항목을 참조하십시오.
메시지 Local minimum found that satisfies the constraints
는 최적화 솔버가 지정된 허용오차 내에서 설계 요구 사항을 충족하는 해를 구했음을 나타냅니다. 최적화하는 동안 표시되는 출력값에 대한 자세한 내용은 반복 과정 표시 항목을 참조하십시오.
optInfo
출력 인수에 포함된 최적화 종료 정보를 검토합니다. 이 정보는 응답이 계단 응답 요구 사항을 충족하는지 확인하는 데 도움이 됩니다.
예를 들어, Cleq
필드와 exitflag
필드를 확인합니다.
Cleq
는 최적화된 비선형 부등식 제약 조건을 보여줍니다.
optInfo.Cleq
ans = 8×1
-0.0001
-0.0028
-0.0050
-0.0101
-0.0135
-0.0050
-0.0050
-0.0732
모든 값은 최적화 허용오차 내에서 Cleq
≤ 0
을 만족하며, 이는 계단 응답 요구 사항이 충족되었음을 나타냅니다.
exitflag
는 최적화가 종료된 이유를 알려줍니다.
optInfo.exitflag
ans = 1
해당 값이 1
인 것은 솔버가 함수 값 및 제약 조건 위반에 대해 지정된 허용오차보다 작은 해를 구했음을 나타냅니다.
최적화된 파라미터 값을 봅니다.
pOpt
pOpt(1,1) = Name: 'Kp' Value: 2.0545 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct] pOpt(2,1) = Name: 'Ki' Value: 0.3801 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct] 2x1 param.Continuous
최적화된 값으로 모델을 시뮬레이션합니다.
sdo.setValueInModel(sys,pOpt); sim(sys);
모델 출력이 계단 응답 요구 사항을 충족하는지 확인합니다.
모델을 닫습니다.
close_system(sys,0);
참고 항목
sdo.optimize
| Simulink.SimulationData.SignalLoggingInfo
| sdo.SimulationTest
| sdo.getParameterFromModel
| sdo.requirements.StepResponseEnvelope
| param.Continuous
| sdo.OptimizeOptions