코로나 바이러스의 확산 시뮬레이션

바이러스 확산 시뮬레이션



코로나 바이러스의 수렴시기를 예측하기 위해 감염이 확대되는 모습을 시뮬레이션하는 프로그램을 MATLAB에서 만들어 보았습니다. 소스 코드 을 게시하고 있습니다. 아래에 표시된 애니메이션 gif는 실행 예이며 각 그림의 의미는 다음과 같습니다.
・왼쪽의 그림:파랑이 미감염으로, 황색이 회복(항체 획득 완료)
・중앙의 그림:황색이 보균자, 파랑이 그 이외
・우측의 그림:보균자의 수(보균자가 지나치게 늘어나면, 의료 현장이 펑크의 우려 있음)


시뮬레이션 개요



첫째, 이 시뮬레이션의 시간 단위는 일입니다. 즉, 1 단계로 하루가 경과합니다. 다음으로, 300×300의 격자를 생각해, 각 격자점에서 사람을 나타냅니다. 각 사람은 상하 좌우와 대각선 사람 (총 8 명)과 접촉합니다. 보균자와 접촉하는 사람은 일정한 확률로 접촉한 보균자로부터 바이러스가 옮겨 감염합니다. 보균자는 규정된 일수가 경과하면 회복합니다. 회복된 사람은 항체를 획득하고 다시 감염하지 않습니다. 각 파라미터는 다음과 같이 설정했습니다.
・감염 확률:3%(1일당 3%의 확률로, 접촉한 보균자로부터 감염)
・회복까지의 경과일수:10일

구현 방법



이 시뮬레이션을 구현하는 방법을 설명합니다. 우선, 각 격자점(사람)의 상태를 나타내기 위해서, 300×300의 배열(9만 인분)을 이용합니다. 배열은 정수를 저장하고 값이 0이면 그 사람은 감염되지 않았음을 나타냅니다. 감염되면 이 값을 1로 합니다. 감염 후 1일 경과할 때마다 이 값을 1씩 늘립니다. 다만, 10(회복까지의 경과일수)이 되면, 그 이상은 늘리지 않습니다. 그리고 값이 10이면 그 사람은 회복하고 항체를 획득한 사람임을 나타냅니다. 한편, 값이 1 이상 9 이하인 경우는 보균자이며, 접촉하는 미감염자에게 감염 확률에 따라 바이러스를 옮깁니다. 이 배열은 한 번에 모든 값을 업데이트합니다.

보충(경계 조건)



모두가 감염되지 않으면 아무도 감염되지 않습니다. 그래서 중앙에 한 사람 감염자를 배치합니다. 이 사람은 회복하지 않기로 결정합니다. 또, 격자의 최외주의 사람은 감염하지 않기로 합니다. 그러면 프로그램이 간단해집니다(번병이라는 테크닉이군요).

소감



이 시뮬레이션은 모든 사람이 8 명과 접촉한다고 가정하며 감염 확률과 경과 일수도 좋은 가치입니다. 이 때문에 어느 정도 현실적인지는 불분명합니다. 그러나이 시뮬레이션이 보여주는 것 중 하나는 감염이 확대되는 조건에서 바이러스 확산의 수렴에 연간 시간이 필요할 수 있다는 것입니다. 그렇다고 해서 이 소동이 수렴하기 위해서는 좀 더 시간이 걸릴지도 모릅니다. 혹은, 어느 기상 조건하에서, 바이러스가 단번에 불활성화하는 것도 생각할 수 있습니다만.

이식



MATLAB에서 구현했기 때문에 움직일 수있는 사람이 제한됩니다. 접촉자수 등의 파라미터를 바꾼 거동의 분석을 해 주었으면 한다고 생각하고 있어 이를 위해 Python이나 Julia에 이식해 주시면 기쁩니다. GPU를 사용하여 고속으로 계산할 수 있으므로 GPU 프로그래밍 연습도 될 것입니다.

좋은 웹페이지 즐겨찾기