본문 바로가기

수학(Mathematic)/시뮬레이션(Simulation)

#1 시뮬레이션 구조(Simulation system)

자동차 엔진의 구조

한남동에서 신사역까지 차로 얼마나 걸릴까?

엄청 유명한 베이커리 카페에는 손님이 얼마나 올까?

떡볶이집에 들어와서 계산하고 나가기까지 사장님은 얼마를 팔았을까?

유로트럭2 시뮬레이터

 

안녕하세요. Air8입니다. 앞에 있는 세가지 질문과 비슷한 생각을 하신 적이 있으십니까?

그게 아니더라도 어떤 계산이 필요한 상상이나 호기심이 생겼던 적이 있으십니까?

그런 호기심 뒤에는 늘 생각해보자...혹은 계산해보자... 얼마쯤 나오겠다! 이렇게 말을 하곤 합니다.

물론 안할 수도 있구요.

 

#2가 끝났을 때는 손으로 시뮬레이션 차트를 그릴 수 있을 정도가 될 겁니다. 시뮬레이션이란 무엇일까요? 상상하는 것처럼 가상의 상황을 만들어 미래를 연출해보는 것일까요? 공대출신이 아닌 혹은 전혀 관련없는 사람이 물어본다면 충분한 대답이 됩니다. 2019년의 공대엔지니어, 공대생들에게는 충분한 대답이 아니라고 생각합니다.

 

시뮬레이션은 특정 시간에 예약된 행동들의 절차지향 연속입니다. 자동차 엔진은 간단하게 흡기 -> 압출 -> 폭발 -> 배기순으로 흘러갑니다. [흡기]라는 이벤트가 발생하고 다음 예약된 이벤트는 [압출], 실린더의 [압출] 이벤트 발생하면 [폭발]이 예약되어 있습니다. [폭발]하면 실린더가 뒤로 밀리면서 [배기]이벤트가 준비되고 [흡기]를 다시 준비합니다. 지금 4가지의 이벤트가 병렬적으로 진행되고 있지는 않습니다. 복잡한 시뮬레이션도 아주 잘게 나눌수록 병렬보다는 직렬절차로 보이며 곧 절차지향 '큐'의 FIFO 체계로 진행됩니다.

 

시뮬레이션을 하면서 일반적으로 얻을 수 있는 것은 생산량 예측, 큐의 대기시간, 대기 길이, 머신의 가동률정도 입니다.

시뮬레이션에서는 Key Performance Measures(KPM)이라고 키 성능 측정으로, 시뮬레이션을 통한 주요한 부분의 성능을 측정하는 의미로 쓰입니다. 본 장에서 자주 쓰이는 단어와 의미를 설명드리겠습니다.

 

처음보고 바로 이해가 안되고 외우지 못해도 됩니다. 이 밑으로는 앞으로 할 시뮬레이션 컨텐츠에서 계속 언급되니 아예 지금 창을 닫고 나가셔도 됩니다.

 

P = 시뮬레이션 시간동안의 총 생산량입니다.

N = 큐 대기가 완전히 끝난 요소들의 개수입니다.

WQ_i = i번째 요소의 큐 대기 시간입니다.

Q(t) = t시간동안의 큐의 개수(길이)입니다.

TS_i = 사이클 타임(time in system of part i)

B(t) = 1, 0밖에 없습니다. 1은 머신의 동작이고 0은 머신이 동작하지 않을 때 입니다.

그래서 시뮬레이션 동안의 평균 대기시간(Average waiting time)은 아래와 같이 설명할 수 있습니다.

WQ_i를 안다는 것은 max(i=1, ..., N) WQ_i도 알 수 있습니다. 큐 대기시간의 최대값(Maximum waiting time)도 시뮬레이션에서는 필요합니다.

처음부터 큐 대기가 완전히 끝난 N까지의 큐 대기시간 합을 N만큼 나눈다.

*큐 대기가 끝난 요소들만 취합하는 이유를 쉽게 이해하기위해 예를 든다면,

인구조사를 할 때 아직 뱃 속에 있는 아이까지 인구를 포함시키지 않습니다. 말 그대로 세상밖으로 나와야 인구조사 대상요소가 되는 것이죠.

남성/여성 평균 사망나이조사할 때도 마찬가지입니다. 병상에 있어도 죽지않았기에 대상에 속하지 않습니다. 태어나지 않은 아이, 죽지 않은 사람 모두 큐에 대기하고 있는 요소입니다. 어떠한 평균을 내기에는 미래가치가 남아있습니다.

Time-average number of parts in queue : 임의의 시간에 관찰한 평균 큐의 개수(길이)

20분동안 큐의 평균 길이를 알고싶다면?

적분은 그래프의 면적을 뜻합니다. 0~20분간 Q(t)의 면적을 20으로 나눈 것입니다.

Max(0<=t<=20) Q(t), 시뮬레이션 기간 동안의 큐 길이의 최대값(Maximum number of parts in queue)

P까지의 사이클타임의 평균(Average total time in system)입니다. max(i=1, ..., P) TS_i은 사이클 타임의 최대값(Maximum total time in system)입니다.

가동률(Utilization)은 아래의 식과 같습니다.

 

[시뮬레이션 전문용어](Simulation terminology)

 

(시뮬레이션 내부에서 사용하는 용어)

Entities : 주로 객체, 요소, 파트, 손님, 일반적으로 현실에 있는 것들, 대상(영향을 주는 것) - 동적인 특성을 지님

Attributes : 독립체(Entities)의 특성(Attributes)으로 지역 변수의 느낌을 준다.

Variables : 시스템의 독립체의 수, 시스템의 현재시간, 모델 전체의 특성으로 전역 변수 - 독립체에 영향을 받는다.(독립체가 증가하면 시스템의 독립체 수는 늘어난다.)

Resources : 자원, 버스 안 시뮬레이션에서의 좌석, 공간 등 한정적인 자원 - 독립체가 리소스를 가지고 있을 수도 놓을 수도 있다.

Queues : 독립체가 배치되고 기다리는 곳, 모델의 용량에 따라 유한적이다.

 

(시뮬레이션 외부에서 사용하는 용어 - 통계용으로 쓰이는 것들) Statistical accumulators

데이터를 선별하고 관찰하는데 쓰이는 용어들입니다.

Clock = 시스템의 현 시간 = t

B(t) = 1, 0밖에 없습니다. 1은 머신의 동작이고 0은 머신이 동작하지 않을 때 입니다.

Q(t) = t시간의 큐의 개수(길이)

Arrival times of custs. in queue = Entities가 큐에 도착한 시간입니다.

Event calendar = 예약된 이벤트들을 시간과 엔티티번호와 함께 적습니다. 주로 큐에 도착할 엔티티, 서비스가 끝날 엔티티, 시뮬이 종료될 시간등이 적힙니다.

Number of completed waiting times in queue = 큐에서 빠져나온 엔티티의 총 개수입니다.

Total of waiting times in queue = 모든 엔티티의 큐에서의 대기시간입니다.

Area under Q(t) = t시간까지의 Queue 길이의 적분값(면적)입니다.

Area under B(t) = t시간까지의 가동시간입니다.

Interarrival times = 현재 엔티티와 다음 엔티티 사이의 주기(시간)입니다.

Service times = 큐에서 서버로 들어와 서비스받는 시간입니다.(서버에 머무는 시간)