Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

계단 응답 요구 사항을 충족하기 위한 설계 최적화(코드)

이 예제는 sdo.optimize 함수를 사용하여 계단 응답 요구 사항을 충족하도록 제어기 파라미터를 프로그래밍 방식으로 최적화하는 방법을 보여줍니다.

모델 구조

이 예제에서는 watertank_stepinput 모델을 사용합니다. 이 모델은 단일 루프 피드백 시스템에 비선형 Water-Tank System 플랜트와 PI 제어기가 포함되어 있습니다.

모델을 엽니다.

sys = 'watertank_stepinput';
open_system(sys)

watertank-model.png

물탱크 모델을 보기 위해 Water-Tank System 서브시스템을 엽니다.

watertank-subsystem.png

이 모델은 다음과 같은 물탱크 시스템을 나타냅니다.

op_watertank_schematic.gif

여기서 각각은 다음을 나타냅니다.

  • Vol은 탱크에 있는 물의 부피입니다.

  • A는 탱크의 단면적입니다.

  • H는 탱크의 물 높이입니다.

  • V는 펌프에 인가되는 전압입니다.

  • b는 탱크 안으로 유입되는 유량과 관련된 상수입니다.

  • a는 탱크 밖으로 유출되는 유량과 관련된 상수입니다.

물은 밸브 개방에 비례하는 비율로 맨 위에서 탱크로 들어갑니다. 밸브 개방은 펌프에 인가되는 전압 V에 비례합니다. 물은 물 높이 H의 제곱근에 비례하는 비율로 탱크 바닥의 구멍을 통해 빠져나갑니다. 물 유량에 제곱근이 있으면 비선형 플랜트가 됩니다. 물 유량에 따른 탱크 부피의 변화율은 다음과 같습니다.

ddtVol=AddtH=bV-aH

설계 요구 사항

탱크의 물 높이 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;

StepRespsdo.requirements.StepResponseEnvelope 객체입니다. StepResp.FinalValueStepResp.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';

소프트웨어는 디폴트 최적화 방법인 fminconfmincon에 대한 순차적 2차 계획법 알고리즘을 사용하도록 opt를 구성합니다.

응답을 최적화합니다.

[pOpt,optInfo] = sdo.optimize(evalDesign,p,opt);
 Optimization started 2023-Sep-27, 03:54:16

                               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     5.42e-20            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

모든 값은 최적화 허용오차 내에서 Cleq0을 만족하며, 이는 계단 응답 요구 사항이 충족되었음을 나타냅니다.

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);

참고 항목

| | | | | |

관련 항목