블록 파라미터 값 최적화, 추정 및 스윕하기
하나 이상의 파라미터를 스윕한다는 것은 매 시뮬레이션 실행에서 그 값을 변경한 다음, 각 실행의 출력 신호 데이터를 비교 및 분석하는 것을 의미합니다. 파라미터 스윕을 사용하여 제어 파라미터를 조정하고, 미지의 모델 파라미터를 추정하고, 실제 시스템의 불확실성을 고려하여 제어 알고리즘의 강인성을 테스트합니다.
블록 파라미터 값 또는 파라미터 값을 설정하는 데 사용하는 작업 공간 변수의 값을 스윕할 수 있습니다. 모델 데이터 편집기의 파라미터 탭(모델링 탭의 모델 데이터 편집기 클릭), 속성 인스펙터(모델링 탭의 설계 아래에서 속성 인스펙터 클릭), 명령 프롬프트 또는 스크립트를 사용하여 매 시뮬레이션 실행의 파라미터 값을 변경할 수 있습니다.
블록 파라미터의 값을 반복적으로 변경하려면 작업 공간에 변수를 만드는 것이 좋습니다. 모델에서 블록을 찾거나 식별하는 대신 모델 탐색기나 프로그래밍 방식 명령을 사용하여 변수의 값을 변경할 수 있습니다. 파라미터 최적화, 추정 및 스윕을 사용하는 여러 기능 및 제품에서도 작업 공간 변수를 생성하여 블록 파라미터 값을 설정해야 합니다.
모델 생성을 위한 반복적인 과정에서 파라미터 값을 조작하는 방법을 알아보려면 Tune and Experiment with Block Parameter Values 항목을 참조하십시오.
모델을 설계할 때 블록 파라미터 값을 액세스 및 설정하는 방법에 대한 기본적인 정보는 블록 파라미터 값 설정하기 항목을 참조하십시오. 스크립트를 사용하는 등 모델을 프로그래밍 방식으로 시뮬레이션하는 방법에 대한 기본적인 정보는 프로그래밍 방식으로 시뮬레이션 실행하기 항목을 참조하십시오.
파라미터 값을 스윕하고 시뮬레이션 결과 검사하기
이 예제에서는 매 프로그래밍 방식의 시뮬레이션 실행마다 블록 파라미터 값을 변경하는 방법을 보여줍니다. 이 기법을 사용하여 각 실행의 출력 신호 데이터를 비교하여 최적의 파라미터 값을 정하십시오.
예제 모델 ex_sldemo_absbrake
는 Constant 블록을 사용하여 잠금 방지 제동 시스템에 대한 미끄러짐 설정점을 지정합니다. 두 개의 미끄러짐 설정점 값 0.24와 0.25로 모델을 시뮬레이션한 다음 각 시뮬레이션 실행의 출력 휠 속도를 비교합니다.
설정점 값을 저장하려면 기본 작업 공간에 변수를 생성하십시오. 이렇게 하면 값에 의미 있는 이름을 할당할 수 있습니다.
예제 모델을 엽니다.
open_system('ex_sldemo_absbrake');
모델링 탭에서 모델 데이터 편집기를 클릭합니다.
모델 데이터 편집기에서 신호 탭을 선택합니다.
보기를 변경합니다 드롭다운 목록을 Instrumentation
으로 설정합니다. 데이터 기록 열에서 신호 yout
(가상 버스)과 slp
가 기록하도록 구성되어 있음을 볼 수 있습니다. 모델을 시뮬레이션할 때 시뮬레이션 데이터 인스펙터를 사용하여 이들 신호의 값을 수집하고 나중에 검사할 수 있습니다.
모델 데이터 편집기에서 파라미터 탭을 선택합니다. 보기를 변경합니다를 Design
으로 설정합니다.
모델에서 Desired relative slip
이라는 Constant 블록을 선택합니다. 모델 데이터 편집기가 블록의 상수 값 파라미터에 대응되는 행을 강조 표시합니다.
값 열을 사용하여 파라미터 값을 relSlip
으로 설정합니다.
값을 편집할 때 relSlip
옆에서 동작 버튼(세로 점 3개가 있는 버튼)을 클릭하고 만들기를 선택합니다.
새 데이터 만들기 대화 상자에서 값을 0.2
로 설정하고 만들기를 클릭합니다. 기본 작업 공간에 값이 0.2
인 변수가 나타납니다. 이제부터 모델은 이 변수에서 상대 미끄러짐 설정점을 가져옵니다.
또는 명령 프롬프트에서 다음 명령을 사용하여 변수를 만들고 블록을 구성할 수도 있습니다.
relSlip = 0.2; set_param('ex_sldemo_absbrake/Desired relative slip','Value','relSlip')
명령 프롬프트에서 상대 미끄러짐 설정점에 대한 2개의 실험 값 0.24
와 0.25
를 저장할 배열을 만듭니다.
relSlip_vals = [0.24 0.25];
실행하려는 각 시뮬레이션(여기서는 2개)에 대해 Simulink.SimulationInput
객체를 만듭니다. 객체를 단일 배열 변수 simIn
에 저장합니다. 각 객체의 setVariable
메서드를 사용하여 2개의 실험 값을 식별합니다.
for i = 1:length(relSlip_vals) simIn(i) = Simulink.SimulationInput('ex_sldemo_absbrake'); simIn(i) = setVariable(simIn(i),'relSlip',relSlip_vals(i)); end
sim
함수를 사용하여 모델을 시뮬레이션합니다. 선택적으로, 출력값을 simOutputs
라는 변수에 저장합니다.
simOutputs = sim(simIn);
[20-Jul-2024 19:13:08] Running simulations... [20-Jul-2024 19:13:10] Completed 1 of 2 simulation runs [20-Jul-2024 19:13:11] Completed 2 of 2 simulation runs
모델은 기록된 신호 yout
과 slp
를 시뮬레이션 데이터 인스펙터로 스트리밍합니다. 시뮬레이션 데이터 인스펙터에서 신호 데이터를 볼 수 있습니다.
마지막 2개의 시뮬레이션 실행의 출력 데이터를 비교합니다.
runIDs = Simulink.sdi.getAllRunIDs(); runResult = Simulink.sdi.compareRuns(runIDs(end-1), runIDs(end));
결과 인덱스 1
을 지정하여 (가상 버스 신호 yout
의 요소인) Ww
신호의 값의 차이를 플로팅합니다.
signalResult = getResultByIndex(runResult,1); plot(signalResult.Diff);
Simulink.SimulationInput
객체에 스윕 값 저장하기
여러 시뮬레이션을 실행하는 스크립트를 작성할 때는 Simulink.SimulationInput
객체로 구성된 배열을 생성하십시오(실행하려는 각 시뮬레이션에 대해 객체 1개씩). 각 객체의 setVariable
함수와 setBlockParameter
함수를 사용하여 해당 시뮬레이션 실행에 사용할 파라미터 값을 식별하십시오. 이렇게 하면 set_param
함수를 사용하여 블록 파라미터 값을 수정하고 할당 명령을 사용하여 매 시뮬레이션 실행의 작업 공간 변수 값을 수정할 필요가 없습니다.
Simulink.SimulationInput
객체를 사용하여 여러 시뮬레이션을 실행하는 방법에 대한 자세한 내용은 sim
항목을 참조하십시오.
비 스칼라, 구조체 및 parameter 객체 스윕하기
비 스칼라 변수, 구조체 변수 또는 Simulink.Parameter
객체를 사용하여 블록 파라미터 값을 설정할 때는 각 Simulink.SimulationInput
객체의 setVariable
함수를 사용하십시오. 아래 표의 예시를 참조하십시오.
시나리오 | 예 |
---|---|
값이 배열인 MATLAB® 변수 myArray . 배열의 세 번째 요소를 설정합니다(1부터 시작하는 인덱싱이라고 가정). | simIn = setVariable(simIn,'myArray(3)',15.23) |
이름이 field1 인 필드를 갖는 MATLAB 변수 myStruct . | simIn = setVariable(simIn,'myStruct.field1',15.23) |
Value 속성이 스칼라인 parameter 객체 myParam . | simIn = setVariable(simIn,'myParam.Value',15.23) |
Value 속성이 배열인 parameter 객체 myArrayParam . 배열의 세 번째 요소를 설정합니다. | simIn = setVariable(simIn,'myArrayParam.Value(3)',15.23) |
Value 속성이 구조체인 parameter 객체 myStructParam . 구조체는 이름이 field1 인 필드를 갖습니다. | simIn = setVariable(simIn,'myStructParam.Value.field1',15.23) |
모델 작업 공간에 있는 변수의 스윕 값
모델 작업 공간을 사용하여 변수를 저장하는 경우 Simulink.SimulationInput
객체의 setVariable
함수를 사용하여 변수 값을 수정할 때는 Workspace
쌍 인수를 사용하여 포함하는 모델을 식별하십시오.
simIn = setVariable(simIn,'myVar',15.23,'Workspace','myModel')
시뮬레이션 결과 캡처 및 시각화하기
파라미터 스윕이 진행될 때 실행되는 각 시뮬레이션은 Outport 블록에서의 신호 값 및 기록된 신호에서의 신호 값 등의 출력값을 생성합니다.
이러한 출력값을 추가 분석을 위해 변수와 객체에 캡처할 수 있습니다. 자세한 내용은 시뮬레이션 데이터 저장하기 항목을 참조하십시오.
각 파라미터 값의 영향을 비교하기 위해 시뮬레이션 출력 데이터를 시각화하려면 Decide How to Visualize Simulation Data 항목을 참조하십시오.
시뮬레이션 속도 개선하기
각각 서로 다른 파라미터 값을 사용하는 여러 번의 시뮬레이션을 수행하기 위해 가속화된 시뮬레이션 모드를 사용할 수 있습니다. 규모가 큰 모델에서 가속화된 시뮬레이션은 일반 시뮬레이션보다 실행 시간이 적게 걸립니다. Parallel Computing Toolbox™가 있는 경우 프로세서의 멀티코어를 사용하여 시뮬레이션을 동시에 실행할 수 있습니다. sim
함수와 parsim
함수의 인수를 사용하십시오.
가속화된 시 시뮬레이션 및 그 밖의 기법을 사용하여 모델의 시뮬레이션 속도를 개선하려면 성능 최적화하기 항목을 참조하십시오. 예제와 자세한 내용은 Running Multiple Simulations 항목을 참조하십시오.
파라미터 값을 스윕하여 테스트 및 시스템 검증하기
Simulink® Test™가 있는 경우 서로 다른 파라미터 값을 사용할 때 모델이 여전히 요구 사항을 충족하는지 확인할 수 있습니다. 파라미터 재정의와 테스트 반복을 통해 각 테스트 케이스별로 다른 파라미터 값을 설정할 수 있습니다. 자세한 내용은 Parameter Overrides (Simulink Test) 항목과 Test Iterations (Simulink Test) 항목을 참조하십시오.
모델 파라미터 추정 및 보정하기
Simulink Design Optimization™이 있는 경우 시뮬레이션 출력값이 실제 상황에서 측정한 데이터와 비슷해지도록 모델 파라미터 값을 추정할 수 있습니다. 값을 직접 측정할 수 없는 경우 이 기법을 사용하여 실제 시스템의 동특성을 나타내는 플랜트 모델에서 파라미터의 실제 값을 추정하십시오. 이 추정은 플랜트 모델의 정확도를 개선해 줍니다. 자세한 내용은 Estimate Parameters from Measured Data (Simulink Design Optimization) 항목을 참조하십시오.
PID 및 제어기 파라미터 조정 및 최적화하기
Simulink Control Design™이 있는 경우 PID 조정기를 사용하여 PID Controller 블록의 파라미터를 조정할 수 있습니다. 자세한 내용은 Simulink에서 PID 제어기 조정하기 (Simulink Control Design) 항목을 참조하십시오.
Simulink Design Optimization이 있는 경우 시뮬레이션 출력값이 지정한 응답 요구 사항을 충족하도록 제어 파라미터 값을 최적화할 수 있습니다. 자세한 내용은 계단 응답 요구 사항을 충족하기 위한 설계 최적화(GUI) (Simulink Design Optimization) 항목을 참조하십시오.