"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away"
(by Antoine de Saint-Exupéry, 1900~1944)
시뮬레이션이란 현실 세계나 시스템의 복잡한 작동을 모델링하여 가상으로 구현하는 것으로, 주로 컴퓨터 프로그램을 통해 진행된다. 시뮬레이션은 물리학, 공학, 의학 등 다양한 분야에서 사용가능하다.
시뮬레이션은 항상 필요할까? 모델 구조가 간단하여 수학적 방법만으로도 정확한 정보를 얻을 수 있다면 시뮬레이션은 필요하지 않다(analytical solution). 하지만 현실 세계의 대부분은 너무 복잡하여 수학만으로 분석하기 힘들기에, 시뮬레이션을 통해 현실 세계를 최대한 모방하여, 정답에 근사한 선택을 하고자 하는 것이다.
본격적으로 살펴보기에 앞서, 시뮬레이션 관련 개념을 살펴본다.
- System: 목적을 향해 함께 작용하고 상호 작용하는 Entities(사람, 부품, 메시지, 기계, 서버 등)의 모음 (Schmidt and Taylor, 1970)
- State of a system: 특정 시간에 시스템을 설명하는 데 필요한 변수와 그 값의 모음
- Event: 시스템의 상태를 변경할 수도 있는 즉각적인 사건
- Entities: 시뮬레이션 모델을 구성하는 객체
시뮬레이션은 특징에 따라 서로 다르게 분류된다. 시뮬레이션을 구현할 때 고려해야 하는 3가지 특징을 살펴본다.
Discrete System vs Continuous System
Discrete는 State variable이 Event 발생과 동시에 변경되는 것을 말한다. 예를 들어, 은행 모형에서는 고객 수(State variable)가 고객이 도착하거나 떠날 때(Event)만 변경된다. Continuous는 State variable이 Event 발생과 상관없이 시간의 흐름에 따라 연속적으로 변경된다. 예를 들어, 항공기는 속도(State variable)가 연속적으로 변경된다. 하지만 대부분의 시스템은 Discrete, Continuous로 완벽히 단정적으로 분리할 수 없다. 대개 Discrete와 Continuous 특징을 함께 지니고 있다. 따라서 일반적으로 우세한 특징을 기준으로 Discrete, Continuous로 분류하거나, 연구의 목적에 맞게 선택할 수 있다.
Static simulation models vs Dynamic simulation models
Static은 특정 시점에 시스템을 나타내거나 시간이 역할을 하지 않는 시스템을 나타내고, Dynamic은 시간이 지남에 따라 시스템이 어떻게 발전하는지를 나타낸다.
Deterministic simulation models vs Stochastic simulation models
Deterministic은 확률적 구성 요소가 없는 시뮬레이션 모델로, 입력에 따라 출력이 결정되는 반면, Stochastic은 Randomness가 추가되어 입력에 따라 확률에 따라 다른 출력이 나올 수 있다. 대부분의 시스템은 확률적으로 모델링된다.
많은 시뮬레이션 모델은 dynamic, stochastic, 그리고 discret 한 특징을 지니고 있다. 이러한 특성을 지닌 모델을 discrete-event simulation models라고 한다. discrete-event simulation models 은 상태 변수가 시간적으로 분리된 시간 지점에서 순간적으로 변경되는 표현을 통해 시스템이 시간이 지남에 따라 어떻게 진화하는지 모델링한다. 더 정확히 말하면, 상태는 이벤트가 발생하는 순간에만 변경될 수 있다.
시뮬레이션의 기타 개념을 살펴본다.
Validation은 연구 목적에 맞게 시뮬레이션 모델이 실제 시스템을 정확하게 나타내는지 여부를 결정하는 과정으로, 목적에 따라 Validation 여부가 바뀔 수 있다. 예를 들어, 항공기의 속도를 확인하기 위해 만든 모델은, 항공기의 위치를 확인하는 데는 적합하지 않을 수 있다. 시뮬레이션 모델은 현실 세계의 정확한 모방이 아니라, 풀고자 하는 문제를 정확히 모방하는 것에 목적이 있기 때문이다. 만약 현실 세계를 정확히 모방하고자 한다면 불필요한 모형의 추가로 자원을 낭비할 수 있다.
관리자(사용자) 및 참여자가 시뮬레이션 모델과 그 결과를 "정확하다"라고 인정하는 경우, 그 시뮬레이션 모델과 결과는 Credibility가 있다고 말할 수 있다.
Verification은 개념적인 시뮬레이션 모델(모델 가정)이 올바르게 컴퓨터 프로그램으로 만들어졌는지를 확인하는 과정이다.
세 가지 개념의 관계를 정리한 그림은 다음과 같다.
시뮬레이션 구현에서 많은 사람이 오해하는 것이, 시뮬레이션의 목적이 현실 세계의 보편적인 재현에 있다고 생각하는 것이다. 시뮬레이션은 효과적으로 목적을 달성하기 위한 수단으로, 원하는 부분만 제대로 구현하면 된다. 이를 위해 구체적인 문제 정의와 평가 척도를 잘 정의해야 한다. 또한 문제와 주어진 자원에 맞게, 구현의 정도를 잘 선택하는 것도 중요하다.
시뮬레이션에 필요한 역량은 직관, 수학, 코딩이라고 생각한다. 현실 세계를 뚜렷이 바라보며, 그중 목적에 적합한 최소한의 핵심을 바라보는 직관과, 이를 수학적으로 해석하는 능력, 그리고 현실을 가상 세계로 모방하는 코딩 능력이 필요하지 않을까.
참고 문헌
Simulation Modeling and Analysis 5e, Averill M. Law
데이터 구조 및 분석: Linear Structure and Dynamic Programming, 문일철 교수님, KOOC
'공부 정리 > Computer' 카테고리의 다른 글
객체 지향 프로그래밍(Object-Oriented Programming, OOP) (0) | 2024.02.14 |
---|