컴퓨터 시뮬레이션

[thumb|[기상 연구 및 예측 모델을 사용하여 태풍 마와르를 48시간 동안 컴퓨터 시뮬레이션한 모습]]
thumb|컴퓨터 모델을 구축하는 과정과 실험, 시뮬레이션, 이론 사이의 상호작용

**컴퓨터 시뮬레이션**(computer simulation)은 컴퓨터에서 수학적 모델을 실행하는 것으로, 해당 모델은 실제 세계나 물리적 시스템의 동작 또는 결과를 나타내도록 설계된다. 일부 수학적 모델의 신뢰성은 모델이 예측하고자 하는 실제 세계의 결과와 시뮬레이션 결과를 비교함으로써 결정될 수 있다. 컴퓨터 시뮬레이션은 물리학(계산물리학), 천체물리학, 기후학, 화학, 생물학, 제조업뿐만 아니라 경제학, 심리학, 사회과학, 의료, 공학 분야의 인간 시스템에 대한 수학적 모델링을 위한 유용한 도구가 되었다. 시스템의 시뮬레이션은 해당 시스템 모델의 실행으로 표현된다. 이는 새로운 테크놀로지를 탐구하고 통찰력을 얻거나, 해석적 해를 구하기에는 너무 복잡한 시스템의 성능을 추정하는 데 사용될 수 있다.

컴퓨터 시뮬레이션은 소형 기기에서 즉시 실행되는 작은 컴퓨터 프로그램이나, 네트워크 기반의 컴퓨터 그룹에서 수 시간 또는 수일 동안 실행되는 대규모 프로그램을 통해 실현된다. 컴퓨터 시뮬레이션으로 시뮬레이션되는 사건의 규모는 전통적인 종이와 연필을 이용한 수학적 모델링으로 가능했던(또는 상상할 수 있었던) 범위를 훨씬 넘어섰다. 1997년, 한 군대가 다른 군대를 침공하는 사막 전투 시뮬레이션에서는 DoD 고성능 컴퓨터 현대화 프로그램의 여러 슈퍼컴퓨터를 사용하여 쿠웨이트 주변의 가상 지형에서 66,239대의 탱크, 트럭 및 기타 차량을 모델링했다.
다른 예로는 재료 변형에 대한 10억 개의 원자 모델, 2005년 모든 생명체의 복잡한 단백질 생성 세포소기관인 리보솜의 264만 개 원자 모델,
2012년 마이코플라스마 제니탈리움의 전체 생애 주기 시뮬레이션, 그리고 분자 수준까지 인간의 뇌 전체를 최초로 컴퓨터 시뮬레이션하기 위해 2005년 5월 시작된 EPFL(스위스)의 블루 브레인 프로젝트 등이 있다.

시뮬레이션의 계산 비용 때문에, 불확실성 정량화와 같은 추론을 수행하기 위해 컴퓨터 실험이 사용되기도 한다.

## 시뮬레이션 대 모델
모델은 시스템의 동작을 포착하는 데 사용되는 방정식으로 구성된다. 반면 컴퓨터 시뮬레이션은 해당 방정식을 종종 근사적인 방식으로 해결하는 알고리즘을 수행하는 프로그램의 실제 실행이다. 따라서 시뮬레이션은 모델을 실행하는 과정이다. 그러므로 누군가는 "시뮬레이션을 구축"하는 것이 아니라 "모델(또는 시뮬레이터)을 구축"한 다음, "모델을 실행"하거나 이와 동등하게 "시뮬레이션을 실행"하는 것이다.

## 역사
컴퓨터 시뮬레이션은 컴퓨터의 급격한 성장과 발을 맞추어 발전했다. 컴퓨터는 제2차 세계 대전 중 맨해튼 계획에서 핵무기 폭발 과정을 모델링하기 위해 처음으로 대규모로 배치되었다. 이는 몬테카를로 알고리즘을 사용한 12개의 강구 시뮬레이션이었다. 컴퓨터 시뮬레이션은 간단한 폐쇄형 해석적 해를 구할 수 없는 시스템을 모델링할 때 보조 수단이나 대체 수단으로 자주 사용된다. 컴퓨터 시뮬레이션에는 많은 유형이 있다. 이들의 공통점은 모델의 모든 가능한 상태를 완전히 열거하는 것이 금지되거나 불가능한 모델에 대해 대표적인 시나리오 샘플을 생성하려는 시도라는 점이다.

## 데이터 준비
시뮬레이션과 모델의 외부 데이터 요구 사항은 매우 다양하다. 어떤 경우에는 입력값이 단지 몇 개의 숫자일 수도 있고(예: 전선의 교류 전력 파형 시뮬레이션), 일기예보나 기후 모델처럼 테라바이트 단위의 정보가 필요할 수도 있다.

입력 소스 또한 매우 다양하다:
* 모델에 연결된 센서 및 기타 물리적 장치
* 시뮬레이션의 진행을 어떤 방식으로든 유도하는 데 사용되는 제어 표면
* 수동으로 입력된 현재 또는 과거 데이터
* 다른 프로세스의 부산물로 추출된 값
* 다른 시뮬레이션, 모델 또는 프로세스에서 해당 목적을 위해 출력된 값

마지막으로, 데이터를 사용할 수 있는 시점도 다양하다:
* "불변" 데이터는 값이 정말 불변이거나(예: π 값), 설계자가 모든 관심 사례에 대해 불변이라고 간주하기 때문에 종종 모델 코드에 내장된다.
* 데이터는 시뮬레이션이 시작될 때 하나 이상의 파일을 읽거나 전처리기로부터 읽어 들임으로써 입력될 수 있다.
* 데이터는 센서 네트워크 등을 통해 시뮬레이션 실행 중에 제공될 수 있다.

이러한 다양성 때문에, 그리고 다양한 시뮬레이션 시스템이 많은 공통 요소를 가지고 있기 때문에 다수의 전문화된 시뮬레이션 언어가 존재한다. 가장 잘 알려진 것은 시뮬라일 수 있으며, 현재는 다른 많은 언어들이 존재한다.

외부 소스로부터 데이터를 받는 시스템은 무엇을 받고 있는지 파악하는 데 매우 신중해야 한다. 컴퓨터가 텍스트나 이진 파일에서 값을 읽어 들이는 것은 쉽지만, 그 값의 정확도(정밀도 및 측정 해상도와 비교하여)가 어느 정도인지 아는 것은 훨씬 어렵다. 종종 데이터는 실제 값이 포함될 것으로 예상되는 범위에서의 최소 및 최대 편차인 "오차 막대"로 표현된다. 디지털 컴퓨터의 수학은 완벽하지 않기 때문에 반올림 및 절단 오차가 이 오차를 증폭시키므로, 시뮬레이션에서 출력된 값이 여전히 유용하게 정확한지 확인하기 위해 "오차 분석"을 수행하는 것이 유용하다.

## 유형
컴퓨터 시뮬레이션에 사용되는 모델은 다음과 같은 여러 독립적인 속성 쌍에 따라 분류될 수 있다:
* 확률적 또는 결정론적 (결정론적의 특수한 경우로 혼돈 모델이 있음)
* 정상 상태(Steady-state) 또는 동적(Dynamic)
* 연속 또는 이산 (이산의 중요한 특수한 경우로 이산 사건 시뮬레이션 또는 DE 모델이 있음)
* 동적 시스템 시뮬레이션, 예: 전기 시스템, 유압 시스템 또는 다체 역학 시스템(주로 DAE로 설명됨) 또는 장(field) 문제의 역학 시뮬레이션, 예: FEM 시뮬레이션의 CFD(PDE로 설명됨).
* 로컬 또는 분산 컴퓨팅.

모델을 분류하는 또 다른 방법은 기본 데이터 구조를 살펴보는 것이다. 시간 단계별 시뮬레이션의 경우 두 가지 주요 클래스가 있다:
* 데이터를 정규 그리드에 저장하고 인접 노드 접근만 필요한 시뮬레이션을 스텐실 코드라고 한다. 많은 전산 유체 역학(CFD) 애플리케이션이 이 범주에 속한다.
* 기본 그래프가 정규 그리드가 아닌 경우 모델은 격자 없는 방법(meshfree method) 클래스에 속할 수 있다.

정상 상태 시뮬레이션의 경우, 방정식은 모델링된 시스템 요소 간의 관계를 정의하고 시스템이 평형 상태에 있는 상태를 찾으려고 시도한다. 이러한 모델은 동적 시뮬레이션을 시도하기 전의 더 단순한 모델링 사례로 물리적 시스템 시뮬레이션에 자주 사용된다.
* 동적 시뮬레이션은 (보통 변화하는) 입력 신호에 대응하여 시스템의 변화를 포착하려고 시도한다.
* 확률적 모델은 우연이나 무작위 사건을 모델링하기 위해 난수 생성기를 사용한다.
* 이산 사건 시뮬레이션(DES)은 시간 경과에 따른 사건을 관리한다. 대부분의 컴퓨터, 논리 테스트 및 결함 트리 시뮬레이션이 이 유형이다. 이 유형의 시뮬레이션에서 시뮬레이터는 발생해야 하는 시뮬레이션 시간별로 정렬된 사건 큐를 유지한다. 시뮬레이터는 큐를 읽고 각 사건이 처리됨에 따라 새로운 사건을 트리거한다. 시뮬레이션을 실시간으로 실행하는 것은 중요하지 않다. 시뮬레이션에서 생성된 데이터에 액세스하고 설계 또는 사건 순서의 논리적 결함을 발견하는 것이 더 중요한 경우가 많다.
* 연속 동적 시뮬레이션은 미분 대수 방정식 또는 미분방정식(편미분 방정식 또는 상미분 방정식)의 수치 해를 구한다. 주기적으로 시뮬레이션 프로그램은 모든 방정식을 풀고 그 숫자를 사용하여 시뮬레이션의 상태와 출력을 변경한다. 응용 분야에는 비행 시뮬레이터, 건설 및 경영 시뮬레이션 게임, 화학 공정 모델링, 전자 회로 시뮬레이션 등이 있다. 원래 이러한 종류의 시뮬레이션은 미분 방정식을 연산 증폭기와 같은 다양한 전기 부품으로 직접 표현할 수 있는 아니로그 컴퓨터에서 실제로 구현되었다. 그러나 1980년대 후반에 이르러 대부분의 "아날로그" 시뮬레이션은 아날로그 컴퓨터의 동작을 에뮬레이션하는 일반적인 디지털 컴퓨터에서 실행되었다.
* 기본 방정식이 있는 모델에 의존하지 않지만 공식적으로 표현될 수 있는 특수한 유형의 이산 시뮬레이션은 행위자 기반 시뮬레이션이다. 행위자 기반 시뮬레이션에서 모델의 개별 개체(분자, 세포, 나무 또는 소비자 등)는 (밀도나 농도가 아닌) 직접적으로 표현되며, 한 시간 단계에서 다음 단계로 행위자의 상태가 업데이트되는 방식을 결정하는 내부 상태와 행동 또는 규칙 세트를 보유한다.
* 분산 모델은 아마도 인터넷을 통해 서로 연결된 컴퓨터 네트워크에서 실행된다. 이처럼 여러 호스트 컴퓨터에 분산된 시뮬레이션을 종종 "분산 시뮬레이션"이라고 한다. 분산 시뮬레이션에는 ALSP(Aggregate Level Simulation Protocol), DIS(Distributed Interactive Simulation), HLA, TENA(Test and Training Enabling Architecture) 등 여러 표준이 있다.

## 시각화
과거에는 컴퓨터 시뮬레이션의 출력 데이터가 시뮬레이션 매개변수의 수많은 변화에 의해 데이터가 어떻게 영향을 받는지 보여주는 표나 행렬로 제시되기도 했다. 행렬 형식의 사용은 수학적 모델에서 행렬 개념을 전통적으로 사용하는 것과 관련이 있었다. 그러나 심리학자 등은 인간이 데이터를 통해 생성된 그래프나 동영상, 즉 컴퓨터 생성 이미지(CGI) 애니메이션을 봄으로써 추세를 빠르게 인식할 수 있다는 점에 주목했다. 관찰자가 반드시 숫자를 읽거나 수학 공식을 인용할 수는 없더라도, 움직이는 기상도를 관찰함으로써 강우 구름 좌표 표를 훑어보는 것보다 훨씬 빠르게 사건을 예측(그리고 "비가 그들 쪽으로 향하고 있다는 것"을 확인)할 수 있다. 숫자와 공식의 세계를 초월한 이러한 강렬한 그래픽 디스플레이는 때때로 좌표 격자가 없거나 타임스탬프가 생략된 출력을 생성하여 수치 데이터 디스플레이에서 너무 멀어지기도 했다. 오늘날 일기예보 모델은 움직이는 눈/비 구름의 모습과 수치 좌표 및 사건의 수치 타임스탬프를 사용하는 지도의 균형을 맞추는 경향이 있다.

마찬가지로, CAT 스캔의 CGI 컴퓨터 시뮬레이션은 장기간의 치료 과정 동안 종양이 어떻게 줄어들거나 변하는지 시뮬레이션하여, 종양이 변함에 따라 인간의 머리 모습을 회전하는 뷰로 시간의 경과를 보여줄 수 있다.

시뮬레이션 실행 중에 변화가 발생함에 따라 대량의 데이터를 움직이는 그래픽으로 표시하기 위한 CGI 컴퓨터 시뮬레이션의 다른 응용 분야도 개발되고 있다.

## 과학 분야에서
[thumb|[삼투 과정의 컴퓨터 시뮬레이션]]

기본적인 수학적 설명을 기반으로 한 과학 분야의 컴퓨터 시뮬레이션 유형에 대한 일반적인 예는 다음과 같다:
* 해석적으로 풀 수 없는 미분방정식의 수치 시뮬레이션. 물리 우주론의 현상, 유체동역학(예: 기후 모형, 도로 소음 모델, 도로 대기 확산 모델), 연속체 역학 및 화학 반응속도론과 같은 연속 시스템을 포함하는 이론들이 이 범주에 속한다.
* 사건이 확률적으로 발생하고 미분 방정식으로 직접 설명할 수 없는 이산 시스템에 주로 사용되는 확률적 시뮬레이션(이는 위에서 언급한 이산 시뮬레이션임). 이 범주의 현상에는 유전적 부동, 소수의 분자를 가진 생화학 또는 유전자 조절 네트워크가 포함된다. (참조: 몬테카를로 방법)
* 나노 물질의 열탄성 및 열역학적 특성을 모델링할 목적으로 가해진 힘에 대한 다중 스케일에서의 반응을 다입자 시뮬레이션. 이러한 시뮬레이션에 사용되는 기술로는 분자동역학, 분자역학, 몬테카를로 방법 및 다중 스케일 그린 함수(Multiscale Green's function)가 있다.

컴퓨터 시뮬레이션의 구체적인 예는 다음과 같다:
* 특정 지역에 대한 다양한 기상 데이터를 입력할 수 있는 수용 수역의 평형 온도 예측과 같이 대량의 입력 프로필 모음을 기반으로 한 통계적 시뮬레이션. 이 기술은 열 오염 예측을 위해 개발되었다.
* 행위자 기반 시뮬레이션은 생태학에서 효과적으로 사용되어 왔으며, 종종 "개체 기반 모델링"이라고 불린다. 이는 연어와 송어류의 개체군 역학(대부분의 순수 수학적 모델은 모든 송어가 동일하게 행동한다고 가정함)과 같이 행위자의 개별 변동성을 무시할 수 없는 상황에서 사용된다.
* 시간 단계별 동적 모델. 수문학에는 강물 수질 예측을 위해 미국 환경 보호국에서 개발한 SWMM 및 DSSAM 모델과 같은 여러 수문 수송 모델이 있다.
* 컴퓨터 시뮬레이션은 ACT-R과 같이 인간의 인지 및 수행 이론을 공식적으로 모델링하는 데에도 사용되었다.
* 약물 발견을 위해 분자 모델링을 사용한 컴퓨터 시뮬레이션.
* 포유류 세포의 바이러스 감염을 모델링하기 위한 컴퓨터 시뮬레이션.
* 유기 분자의 분쇄 과정에서 메카노케미스트리에 의한 결합의 선택적 민감도를 연구하기 위한 컴퓨터 시뮬레이션.
* 전산 유체 역학 시뮬레이션은 흐르는 공기, 물 및 기타 유체의 거동을 시뮬레이션하는 데 사용된다. 1차원, 2차원 및 3차원 모델이 사용된다. 1차원 모델은 파이프 내의 수격 현상 효과를 시뮬레이션할 수 있다. 2차원 모델은 비행기 날개 단면의 항력을 시뮬레이션하는 데 사용될 수 있다. 3차원 시뮬레이션은 대형 건물의 냉난방 요구 사항을 추정할 수 있다.
* 통계 열역학 분자 이론에 대한 이해는 분자 용액의 가치를 이해하는 데 기본적이다. 전위 분포 이론(Potential Distribution Theorem, PDT)의 발전을 통해 이 복잡한 주제를 명쾌한 분자 이론 발표로 단순화할 수 있다.

과학계에서 사용되는 주목할 만하고 때로는 논란이 되는 컴퓨터 시뮬레이션에는 도넬라 메도우즈의 성장의 한계에서 사용된 World3, 제임스 러브록의 데이지 월드, 토마스 레이의 티에라 등이 있다.

사회과학에서 컴퓨터 시뮬레이션은 데이터 침투 방법론(Data Percolation Methodology)이 육성하는 5가지 분석 관점의 필수 구성 요소이며, 여기에는 정성적 및 정량적 방법, 문헌 검토(학술 포함) 및 전문가 인터뷰가 포함되며 데이터 삼각 측량의 확장 형태를 이룬다. 물론 다른 과학적 방법과 마찬가지로 복제는 전산 모델링의 중요한 부분이다.

## 실제 문맥에서

컴퓨터 시뮬레이션은 다음과 같은 다양한 실제 문맥에서 사용된다:
* 대기 확산 모델링을 이용한 대기 오염 물질 분산 분석
* 동물권과 관련하여 살아있는 동물 실험에 대한 인도적인 대안
* 항공기 및 물류 시스템과 같은 복잡한 시스템의 설계
* 도로 소음 저감을 위한 방음벽 설계
* 애플리케이션 성능 모델링
* 조종사 교육을 위한 비행 시뮬레이터
* 일기예보
* 위험 예측
* 전자 회로 시뮬레이션
* 전력 계통 시뮬레이션
* 다른 컴퓨터를 시뮬레이션하는 에뮬레이션
* 금융 시장의 가격 예측(예: Adaptive Modeler)
* 응력 및 기타 조건 하에서의 구조물(건물 및 산업 부품 등)의 거동
* 화학 처리 공장과 같은 산업 공정 설계
* 경영전략론 및 조직론
* 지하 저류층을 모델링하기 위한 석유 공학의 저류층 시뮬레이션
* 공정 공학 시뮬레이션 도구
* 로봇 설계 및 로봇 제어 알고리즘을 위한 로봇 시뮬레이터
* 도시 개발의 동적 패턴과 도시 토지 이용 및 교통 정책에 대한 반응을 시뮬레이션하는 도시 시뮬레이션 모델
* 단일 교차로에서 도시, 국가 고속도로망에 이르기까지 도로망의 일부를 계획하거나 재설계하거나 교통 시스템 계획, 설계 및 운영을 위한 트래픽 공학. 교통 시뮬레이션에 대한 더 자세한 기사를 참조하라.
* 새 자동차 모델의 안전 메커니즘을 테스트하기 위한 자동차 충돌 모델링
* 전용 소프트웨어 프레임워크(예: BioMA, OMS3, APSIM)를 통한 농업의 작물-토양 시스템

사람들이 컴퓨터 시뮬레이션에 부여하는 신뢰와 신뢰성은 시뮬레이션 모델의 타당성에 달려 있으므로, 검사와 타당성 검증은 컴퓨터 시뮬레이션 개발에서 매우 중요하다. 컴퓨터 시뮬레이션의 또 다른 중요한 측면은 결과의 재현성인데, 이는 시뮬레이션 모델이 실행할 때마다 다른 답을 제공해서는 안 된다는 것을 의미한다. 이것이 당연해 보일 수도 있지만, 난수가 실제로는 준난수여야 하는 확률적 시뮬레이션에서는 특별히 주의해야 할 점이다. 재현성의 예외로는 비행 시뮬레이션이나 컴퓨터 게임과 같이 인간이 루프에 포함된 시뮬레이션이 있다. 여기서는 인간이 시뮬레이션의 일부이므로 결과에 영향을 미치며, 이를 정확하게 재현하는 것은 불가능하지는 않더라도 어렵다.

탈것 제조업체는 새로운 설계의 안전 기능을 테스트하기 위해 컴퓨터 시뮬레이션을 사용한다. 물리 시뮬레이션 환경에서 자동차 사본을 구축함으로써, 고유한 시제품을 제작하고 테스트하는 데 드는 수십만 달러를 절약할 수 있다. 엔지니어는 시뮬레이션을 밀리초 단위로 진행하며 시제품의 각 섹션에 가해지는 정확한 응력을 결정할 수 있다.

컴퓨터 그래픽스는 컴퓨터 시뮬레이션 결과를 표시하는 데 사용될 수 있다. 훈련 시뮬레이션 등에서 시뮬레이션을 실시간으로 경험하기 위해 애니메이션을 사용할 수 있다. 어떤 경우에는 실시간보다 빠르거나 느린 모드의 애니메이션이 유용할 수도 있다. 예를 들어, 실시간보다 빠른 애니메이션은 건물에서 대피하는 사람들의 시뮬레이션에서 대기열이 쌓이는 것을 시각화하는 데 유용할 수 있다. 또한 시뮬레이션 결과는 종종 다양한 과학적 시각화 방법을 사용하여 정지 이미지로 집계된다.

디버깅에서 (기본적으로 실행하는 대신) 테스트 중인 프로그램 실행을 시뮬레이션하면 하드웨어 자체가 감지할 수 있는 것보다 훨씬 더 많은 오류를 감지할 수 있으며, 동시에 명령어 추적, 메모리 변경 및 명령어 수와 같은 유용한 디버깅 정보를 기록할 수 있다. 이 기술은 버퍼 오버플로 및 유사한 "감지하기 어려운" 오류를 감지할 수 있을 뿐만 아니라 성능 정보 및 튜닝 데이터를 생성할 수도 있다.

## 함정
컴퓨터 시뮬레이션에서 때때로 무시되기도 하지만, 결과의 정확도를 적절히 이해하기 위해 민감도 분석을 수행하는 것은 매우 중요하다. 예를 들어, 유전 탐사 프로그램의 성공을 결정하는 요인에 대한 확률적 위험 분석에는 몬테카를로 방법을 사용하여 다양한 확률 분포에서 얻은 샘플을 결합하는 과정이 포함된다. 만약 핵심 매개변수 중 하나(예: 수유층의 순 비율)가 유효숫자 한 자리만 알려져 있다면, 시뮬레이션 결과가 (오해의 소지가 있게) 유효숫자 네 자리로 제시되더라도 실제로는 유효숫자 한 자리보다 더 정밀할 수 없다.

## 같이 보기

* 에뮬레이터
* 일러스트리스 프로젝트
* 디지털 트윈
* 시뮬레이션 게임
* 모의실험 가설
* 가상 현실

## 각주

분류:계산 학문 분야
분류:모델링 (과학)
분류:가상 현실
분류:시뮬레이션 소프트웨어