Korea Digital Contents Society

Journal Archive

Journal of Digital Contents Society - Vol. 23 , No. 10

[ Article ]
Journal of Digital Contents Society - Vol. 23, No. 10, pp. 2091-2107
Abbreviation: J. DCS
ISSN: 1598-2009 (Print) 2287-738X (Online)
Print publication date 31 Oct 2022
Received 10 Oct 2022 Revised 21 Oct 2022 Accepted 21 Oct 2022
DOI: https://doi.org/10.9728/dcs.2022.23.10.2091

몬테카를로 기반의 가축 질병 확산 네트워크 시뮬레이션 모델 개발 연구
이승헌1, ; 석희웅2, ; 김락우3, * ; 문준섭2 ; 김찬민2 ; 정득영4 ; 김태곤5 ; 이봉국6 ; 은지숙6
1공주대학교 농공학과 석사과정
2공주대학교 스마트팜공학과 학사과정
3공주대학교 스마트팜공학과 조교수, 산업개발연구소 수석연구원
4서울대학교 지역시스템공학과 박사과정 수료
5전북대학교 스마트팜학과 조교수
6한국전자통신연구원 책임연구원

Research on Development of Livestock Disease Spread Network Simulation Model based on Monte-Carlo
Seung-Hun Lee1, ; Hee-Woong Seok2, ; Rack-Woo Kim3, * ; Jun-Seop Mun2 ; Chan-Min Kim2 ; Deuk-Young Jeong4 ; Taegon Kim5 ; Bong-Kuk Lee6 ; Ji-Sook Eun6
1Master’s Course, Department of Agriculture Engineering, Kongju National University, Yesan 32349, Korea
2Undergraduate Student, Department of SmartFarm Engineering, Kongju National University, Yesan 32349, Korea
3Assistant Professor, Department of SmartFarm Engineering, Kongju National University, Chief Researcher, Industrial Development Institute, Kongju National University, Yesan 32349, Korea
4Ph.D course, Department of Rural Systems Engineering, Seoul National University, Seoul 08826, Korea
5Assistant Professor, Department of SmartFarm, Jeonbuk university, Jeonju 54896, Korea
6Principal Researcher, Electronics and Telecommunications Research Institute (ETRI), Daejeon 34129, Korea
Correspondence to : *Rack-Woo Kim E-mail: rwkim@kongju.ac.kr
Contributed by footnote: ‡These authors contributed equally to this work


Copyright ⓒ 2022 The Digital Contents Society
This is an Open Access article distributed under the terms of the Creative Commons Attribution Non-CommercialLicense(http://creativecommons.org/licenses/by-nc/3.0/) which permits unrestricted non-commercial use, distribution, and reproduction in any medium, provided the original work is properly cited.
Funding Information ▼

초록

본 연구에서는 가축질병 발생개체 집단 분석 및 표준정보 활용기술을 개발하고자 하였다. 이를 위하여 축종별 가축질병 발생관련 농장에 대한 역학조사, 감염사례 분석, 국가별 추정 바이러스 유입원 또는 전파 경로 등을 조사하였으며, 몬테카를로 기반의 네트워크 이론을 활용하여 조사된 자료들을 바탕으로 가축질병 확산도 변화를 제시하였다. 본 연구의 결과는 가축질병 발생 시 농장방역사항, 감염 전파경로 등을 분석하여 위험정도를 도출하고 이를 가축질병 행동절차에 반영하여 향후 전염병 방역 핵심 교본으로 활용할 수 있을 것으로 판단된다.

Abstract

In this study, a group analysis of livestock disease-inducing individuals and standard information utilization technology were developed. To this end, the network theory has been investigated for epidemiological investigations on farms with outbreaks of livestock diseases by livestock species, analysis of infection cases, and estimated virus inflow sources or transmission routes for each country. Changes are also presented. The results of this study are expected to be used as a core textbook for epidemic prevention in the future by deriving the risk level of the collected data by conducting epidemiological investigation and analysis of farm quarantine matters and transmission routes in case of livestock disease, and reflecting this in the livestock disease behavior procedure.


Keywords: Monte-Carlo, Network, Livestock, Disease, Simulation Model
키워드: 몬테카를로, 네트워크, 가축, 질병, 시뮬레이션 모델

Ⅰ. 서 론

전 세계 사육 가축 두수는 2015년 41억 마리에서 2050년 58억 마리로 증가할 것으로 예상된다[1]. 국내의 경우 농업에서 차지하는 축산업 생산액은 19조 8천억원 39.4%으로 지난 54년간 65~20년 연평균 12.2%가 증가하였다. 축산업의 양적 성장은 가축 사육 밀집도를 높이는 방향으로 이루어져 가축질병 발생위험도가 증가되었고 이는 막대한 경제적 피해로 이어지고 있다. 2000년 이전까지만 해도 우리나라에서 발생하지 않았던 구제역, 고병원성 조류인플루엔자 등 해외 악성 가축전염병은 최근 매년 발생하면서 축산업에 막대한 피해를 주고 있는 실정이다. 또한 우리나라에서 발생한 적이 없는 아프리카돼지열병은 2019년에 돼지 농가에서 처음으로 확인되었고, 야생 멧돼지에서 지금까지도 지속적으로 검출되고 있어 축산농가에 큰 위협이 되고 있다. 조류인플루엔자 등 인수공통전염병을 포함한 가축전염병은 축산업뿐만 아니라 인류를 계속해서 위협할 전망이다[2]. 실제로 국내 사회재해로 발생한 손실액 중 가축전염병으로 인한 피해액은 76%로 가장 높은 비율을 차지하고 있다. 이와 같은 질병은 위험도가 높은 관리대상 질병으로 전염성이 매우 강하며 치사율 또한 상당히 높으며 아프리카돼지열병의 경우 현재까지 백신이나 치료제가 없어 더욱이 치명적이다[3]. 축산 농가뿐아니라 사회경제적 손실비용을 줄이기 위해서는 가축 질병 발생 시 감염병의 경제적·환경적 피해를 최소화하기 위한 즉각적인 방역체계 구축, 위험요소 방역관리에 대한 대책은 필수적이다. 특히 전염병의 주요 확산 경로를 파악하고 이동 경로를 예측하여 질병 확산을 차단하는 기술은 반드시 필요하다. 이에 국내에서는 고병원성 가축질병 발생빈도와 높은 상관성을 보이는 요인들의 지역별 영향력 수준을 가늠하기 위한 연구, ICT 기반 가축 감염병 대응을 위한 커뮤니티 매핑 연구, 가축 관련 운송차랑 통행 데이터를 이용한 가축전염병 확산 예측 모형 개발 연구, 현장 조사를 통한 가축전염병 대응 정책개선 방안 연구, GIS를 이용한 가축전염병 확산 경로 분석 연구 등 가축 전염병 확산에 관련된 연구가 수행되었다[4][5][6][7][8]. 최근에는 AI, 네트워크 기술을 접목한 오픈소스 기반의 기술을 적용하여 가축 전염병의 여러 형태의 데이터를 다각적인 방법을 분석하는 연구, 빅데이터와 딥러닝을 통한 동물전염병 예방 연구, 축산시설간 차량이동망의 허브 시설 연구, 양돈 농장 및 도축장 간 네트워크 분석 연구 등도 진행되고 있는 추세이다[9][10][11][12]. 가축질병, 방역관리, 위험요소에 관련된 연구로는 축산차량 방문 정보를 이용하여 축산농가 간 차량 이동에 대해 접촉 네트워크 구축 및 분석 연구. 가축질병의 발생원리와 잠복감염 종오리 및 종란에 대한 방역관리, 병원체와 접촉한 오염된 인적자원의 방역관리 연구 등이 있다[13][14]. 가축질병 요인 및 확산에 관한 기존의 연구들은 전파확산을 억제하기 위한 방역활동 대안 및 우선순위에 대해 제시하는 방식을 취하고 있으나 실제로 농가 활용 가능성 및 구체적인 시스템은 미비한 실정이다. 또한 발생농가의 특성을 바탕으로 차후 바이러스 감염 가능농장의 지리적 위치와 밀집도를 예측하였으나, 연구 과정에서 역학조사 분석을 통해 도출된 요인들의 누락 가능성과 가축질병 예찰 및 방역에 투입 가능한 행정 인력 등의 한계로 어려움을 겪고 있다[15].

따라서 본 연구에서는 축종별 질병 발생 주요 요인을 수집하고 이를 바탕으로 가축 질병으로 인한 피해를 최소화할 수 있는 시스템을 제시하고자 하였다. 특히 본 연구에서는 요인들의 불확실성 및 한계를 보완하기 위해 몬테카를로 시뮬레이션을 활용하여 질병 확산 가능성을 확률적 변수로 지정하는 방안을 제시하였다. 질병 확산 경로를 파악하기 위해 다수의 시뮬레이션을 실행하여 가중치 및 설정값을 재추정한다면 확률적으로 정확도가 높은 결과예측이 가능할 것으로 판단된다. 몬테카를로 시뮬레이션은 무작위 추출된 난수를 이용하여 원하는 값의 확률적 분포를 계산하는 알고리즘으로 수집자료 및 통계자료가 많고 입력 값의 경향이 일치할수록 정밀한 시뮬레이션이 가능하다. 이를 바탕으로 가축전염병 확산 예측 모델을 개발하고 도출된 결과를 바탕으로 예측 모델을 평가하고자 한다. 먼저 가축질병 역학조사를 바탕으로 질병 확산에 영향을 끼치는 요인들을 도출한다. 수집된 자료를 바탕으로 질병 확산 위험도에 따라 각 요인별 가중치를 부여하였으며 몬테카를로 시뮬레이션의 적용성을 평가한다. 이후 질병 확산 예측 모델을 설계하고 질병 역학조사결과 및 실제사례를 적용하여 검증을 실시한다. 마지막으로 도출된 결과를 이용하여 질병 확산 양상을 예측할 수 있는 최종 시스템을 설계하고자 한다.


Ⅱ. 재료 및 방법
2-1 몬테카를로 방법론
1) 몬테카를로 방법론의 정의

몬테카를로 방법은 어떤 문제가 주어졌을 때, 난수를 발생시켜 무작위 추출을 이용하여 함수의 값을 수리적으로 근사하는 알고리즘을 부르는 용어이다. 몬테카를로 방법은 모델의 매개 변수를 확률분포로 바꾸어 다른 환경에서 결과값을 해석하는 방법이다. 몬테카를로 방법은 확률론적 해석을 가진 문제를 해결하기 위해 사용될 수 있다. 큰 수의 법칙에 의해, 어떤 확률 변수의 기댓값으로 설명되는 적분은 랜덤 표본의 표본 평균을 취함으로써 근사치를 구할 수 있다. 몬테카를로 시뮬레이션 결과는 난수를 이용한 방법으로 분석적 해를 통한 검증이 어려울 때 비교 수치로 사용된다.

2) 몬테카를로 시뮬레이션 과정

몬테카를로 시뮬레이션 방법은 문제 정의, 확률변수(X) 선택, 자료 수집, 확률변수와 확률분포(P(x)) 선택, 확률변수와 난수 발생, 시뮬레이션 실험 실시, 통계치 계산 및 결과 해석 순서대로 진행된다. 몬테카를로 시뮬레이션 과정중에서 확률변수(X) 선택과 확률변수와 난수 발생이 가장 중요하다. 확률변수(X) 선택하는 과정에서는 예측할 수 없는 확률모형의 영향을 미치는 대부분의 요소들이 확률변수이므로 확률변수(X) 선택이 중요하며, 확률변수와 난수 발생 과정에서는 난수는 균등하기 분포되어야하며 난수의 범위에서 각 난수는 동일한 선택 기회를 가져야 하며 난수의 순서는 특정한 반복적 형태가 불가능하다. 따라서 본 연구에서는 몬테카를로 시뮬레이션을 기반으로 하여 가축 질병 확산 네트워크 시뮬레이션 모델을 개발하고자 하였다.

2-2 대상 데이터 수집 및 범위

본 연구에서는 구제역, 아프리카돼지열병, 조류인플루엔자와 같은 1종가축전염병을 대상으로 농림축산검역본부로부터 수집된 역학조사 분석 데이터를 활용하여 가축 질병 예찰 및 효율적인 방역대 설정 방법을 제안하였다. 제안하는 데이터는 국내에서 발병한 질병을 대상으로 발병 원인, 농장방역사항 발생농장 및 농장소재지, 축산계열화사업자명, 가축전염병 발생일, 가축의 종류 및 사육규모, 가축전염병 예방·확산 방지를 확보하였다. 특히 사육농장내로 유입된 위험요인과 초기 전파확산 차단을 위해 축산관련차량 및 사람의 이동에 의한 병원체의 전파, 야생동물의 이동 등 주요 위험요인을 효과적으로 차단할 수 있는 프로그램을 개발하고자 하였다.

본 연구에서는 시뮬레이션 모델 설계 및 네트워크 구축을 위한 자료로 가축전염병 역학조사 분석 보고서의 주요 발병자료만을 사용하여 필요한 자료만 추출하여 새롭게 구성하였다 (그림1). 하지만 고려한 역학조사 분석보고서의 데이터는 도출된 요인들의 누락 가능성 등으로 인한 수집 자료의 한계가 존재한다. 불완전한 데이터로 인해 생길 수 있는 문제점을 최소화하기 위해 수집한 요인의 영향도 및 유효성을 판단하였다 (그림2). 또한 각 요인별로 확산 위험도에 따른 가중치를 적용시켜 예측모델을 구현하였다.


Fig. 1. 
visiting history report


Fig. 2. 
Major variable impact levels

2-3 확산 알고리즘 모델링 (Modeling)

가축 전염병 네트워크는 방향성 (연관성, 가중치)이 존재하며 한 절점에 많은 연결선이 연결되어 있다면 질병 확산에 얼마나 큰 영향을 끼칠 수 있는지 측정할 수 있다. 즉, 최초전파자와 특정지역에서 영향력이 높은 절점을 찾아 질병의 확산을 막는 것은 중요하다. 본 연구에서는 네트워크의 절점은 농가, 연결선은 농가간을 연결하는 연결성으로 정의하였다 (그림3). 연결선은 이동 정보 (사람, 차량), 지형 정보, 거리 정보, 산 정보, 내부 정보를 고려하였다. 예를 들어 농가 간에 산 거리 요소에 대한 연관성이 없으면 연결선을 배제하였다.


Fig. 3. 
Farm layout and distance information

투입된 절점 및 연결선에는 확률 통계적 분석방법인 몬테카를로 시뮬레이션 (Monte Carlo Simulations)이 적용된다. 이는 하나의 방향성에 의거하여 목표 값에 도달하는 것이 아니라, 다양한 시나리오를 고려하여 확률적 불확실성을 감안하여 예측양상을 띄기 때문에 예기치 못한 변동에 따른 위험성을 체계적으로 관리할 수 있다.

1) 1차 가중치

1차 가중치에 고려되는 인자는 축종별 가축 전염병 역학조사 분석 보고서에 따라 농가와 농가 간 질병 주요 전파 요인으로 산정했으며 이는 사람 이동 정보, 차량 이동 정보, 농장 거리 정보, 주변 지형 정보, 산 정보, 내부 정보에 해당한다. 1차 가중치는 농가 간 실제적인 확산 요인들을 중요도에 가중치를 고려하기 때문에 기존의 전염병을 예측하는 방법들과 달리 실제 영향을 끼치는 요인 및 중요도를 반영할 수 있다는 강점을 갖는다.


Fig. 4. 
Weighting factors by risk sources

1차 가중치 값은 각 요소별 중요도에 따라 0~10까지 설정할 수 있으며 영향도가 없는 요소의 가중치는 0에 해당한다. 각 요소별 최대값은 1이며, 연결선을 가지는 요소는 총 6개에 해당한다. 예를 들어 모든 요소의 가중치가 최대값으로 산정되면 적용되는 1차 가중치는 6에 달한다. 가중치에 따른 1차 가중치를 산정하는 식은 아래와 같다.

1=10(1) 
2) 2차 가중치

2차 가중치란 농장과 농장 사이 간 중요도를 의미하며, 실제 적용되는 2차 가중치는 1차 가중치를 산정 후 요소별 중요도에 따라 결정된다 (그림5).


Fig. 5. 
Weighting factors for the detailed options

2차 가중치 값은 각 요소별 중요도에 따라 사용자가 0부터 10까지 설정할 수 있다. 여기서, 사용자가 특정 요소에 대해 연결도가 없다고 판단하면 2차 가중치는 고려하지 않으며 가중치 값은 0에 해당한다.

3) 2차 가중치 (농장 거리 정보)

구제역 발생 원인과 바이러스가 전파되는 과정에 대해서 다양한 추측설들 (자연발생, 공기에 의한 전파, 사료차 및 이동수단 등)이 있지만 아직까지는 명확한 원인과 근거를 찾을 수 없는 실정이다. 현재 가축질병 발생 시 방역체계를 구축하기 위해 구제역 발생농가를 중심으로 한 오염지역 반경 500m, 위험지역 반경 3Km을 각각 설정하고 오염지역 내 가축은 모든 살처분 대상이 된다. 이에 발생농가의 지형적인 특정을 고려하여 지형분류도 작성 및 지형분리 체계를 수립함으로서 가축전염병 발생 시 불명확한 경계선으로 인한 피해를 최소화하였다[16]. 본 논문에서는 농장과 농장 간 거리 정보에 따른 연결성을 판별하기 위해 농장 위치에 대한 정보를 수집하였다. 위치 정보는 위도와 경도를 기준으로 측정하였으며, 각 농장에 ID를 부여하여 분석하였다 (그림6). 특정 농장을 기준으로 반경 10km 이하에 들어가는 농장들은 그림7과 같이 서로 네트워크로 연결하였으며 농장 거리를 기준으로 가중치를 달리 하였다. 농장 거리에 대한 연결도를 산정하는 식은 아래와 같다.

=1×(2) 
Table 1. 
Farm distance score by the distance between each two farms
Distance standard km Dis ≤ 1 1 <Dis≤ 2 2 <Dis≤ 3 3 <Dis≤ 4 4 <Dis ≤ 5
Score 1 0.9 0.8 0.7 0.6
Distance standard km 5 < Dis≤ 6 6 <Dis ≤ 7 7 <Dis ≤ 8 8 <Dis ≤ 9 9 <Dis ≤ 10
Score 0.5 0.4 0.3 0.2 0.1


Fig. 6. 
Farm location Information


Fig. 7. 
Node connection by distance among farms

4) 2차 가중치 (산 정보)

가축 질병 발생 시, 질병 특성 파악을 통해 바이러스 전파와 지형적인 요소의 상관여부를 중점적으로 분석하여 피해를 최소화하는 것은 중요하다. 사람이나 차량이 이동하는 경로를 소독하고 통제해도 전염병에 감염된 야생동물이 산을 이용해 장거리를 이동할 경우 확산 양상을 파악하기 어렵다. 이들의 행동반경은 하룻밤 사이 50km 내외를 오갈 수 있으며 축산농가에 가축들에게 전파될 가능성이 매우 높다. 구제역의 경우 발생농가와 비발생농가의 고도를 분석한 결과, 구제역 발생 농가가 비발생 농가보다 평균 24m 높게 분포되어 있었다[17]. 이에 본 연구에서는 산의 위치 정보를 고려하여 질병 예측 모델을 시뮬레이션 하였다. 산 정보는 위도, 경도, 높이를 포함한다 (그림8).


Fig. 8. 
Mountain Information


Fig. 9. 
Node connection by mountain information

산 정보는 특정 산 기준 반경 10km 이하에 들어가는 농장들을 서로 네트워크 연결하였다. 농장 간 네트워크 점수는 산으로부터 두 농장을 거리를 기준으로 계산한다. 단, 여러 네트워크 연결선 형성 시 산으로부터 해당 농장 거리에 대해 합하여 적용한다. 산으로부터 두 농장 거리의 합 점수는 거리 기준으로 하며 표2와 같다.

=1×2×(3) 
Table 2. 
Scores by mountain range
Distance standard km sum of dis ≤ 2 2 < sum of dis≤ 4 4 <sum of dis ≤ 6 6 <sum of dis ≤ 8 8 <sum of dis ≤ 10
Score 1 0.9 0.8 0.7 0.6
Distance standard km 10 < sum of dis ≤ 12 12 <sum of dis ≤ 14 14 <sum of dis ≤ 16 16 <sum of dis ≤ 18 18 <sum of dis ≤ 20
Score 0.5 0.4 0.3 0.2 0.1

5) 2차 가중치 (사람 및 차량 이동 정보)

가축관련 운송차량은 가축전염병 확산의 주요 원인으로 제기되고 있으나 국내에서는 가축관련운송차량의 이동성과 관련한 실증적인 방역절차와 기준이 마련되지 않고 있는 실정이다. 또한 가축관련 운송차량은 가축전염병 확산의 주요 원인으로 제기되고 있으나 국내에서는 가축관련 운송차량의 이동성과 관련한 실증적인 방역절차와 기준이 마련되지 않고 있는 실정이다[18]. 이에 본 연구에서는 Type (차량, 사람, ID) 기준으로 방문 농장 (이동) 농장의 네트워크를 연결하였다 (그림10, 11).


Fig. 10. 
People and vehicle movement information


Fig. 11. 
Node connection by people and vehicle information

농장 간 네트워크 연결은 시간 내림차순에 따라 ID별로 순서대로 연결하게 된다. (차량, 사람) 정보 가중치의 최대값은 각 1이며, 연결도가 겹치는 경우 각 가중치를 합하여 산정된다. 이를 식으로 나타내면 다음과 같다.

=1×2 ×(4) 
6) 2차 가중치 (내부 농장 관리 정보)

농림축산식품부에 의하면 방역시설 미흡, 과밀사육 등 사육환경이 방역 취약요인으로 작용하며 소독자원, 방역관련 업체 관리 등 방역지원체계 강화시키는 것은 필수적이다. 이에 본 논문에서는 농장 내부 관리 정보에 대해 가중치를 적용시켜 2차 가중치를 산정하였다. 가중에 따른 내부정보를 산정하는 식은 아래와 같다.

=x=0n1 ×2 ×NOi10×    (5) 
7) 2차 가중치 (주변 지형 정보)

가축 전염병의 확산은 발병 농장 주변의 지형 및 형태에 따라 확산 양상 및 규모가 결정된다. 주변지형 정보를 고려한 2차 가중치는 농장 사이 네트워크 연결이 있는 경우 주변 지형 점수를 0부터 최대 10까지 적용하였다. 반면 농장 사이 네트워크 연결이 없는 경우 주변 지형 정보 점수를 적용하지 않고 연결선 또한 생성하지 않는다. 가중치는 특정 농가를 기준으로 주변을 8방으로 나누었다 (그림12). 주변 지형 정보 2차 가중치는 8방 셀에 포함된 지목들을 각각 적용하여 1차 가중치, 2차 가중치를 산정한 후 주변 지형 점수의 최대값을 나누어 구한다. 주변 지형 정보를 산정하는 식은 아래와 같다.

=          x=0n1 × 2  x ×x x×8×10(6) 
Table 3. 
Internal Information Score Example
1 O out of 8 cells an orchard, a park 4 points and 3 points each
2 O out of 8 cells a park 1 point


Fig. 12. 
Estimation of surrounding terrain weights

8) 최종 연결선 도출

본 연구에서는 절점 (농가)간의 연결선을 통해 위험도가 높은 관계를 파악하여 가축 전염병 발생 시 확산 위험도를 분석하고 통계적 모형을 이용해 다양한 의미를 도출하고자 하였다. 네트워크 연결선을 도출하기 위해 농장과 농장 사이의 연결 여부 혹은 연결 강도를 산정하였다. 네트워크 연결선을 산정식은 식7과 같다. 농장 거리 정보, 이동 정보, 산 정보, 내부 정보에서 최종적으로 도출한 점수에 제시한 1차, 2차 가중치를 각각 곱한 뒤 더하여 최종 네트워크 연결도를 결정하였다.

=1×+1×2×+1×2×+1×2×+1×2×(7) 

Ⅲ. 결과 및 고찰
3-1 전처리 데이터 결과

본 연구에서 데이터를 활용하기 위하여 전처리 과정을 통하여 데이터들을 분류하였다. 앞서 말했듯이 이동 정보, 거리 정보, 지형 정보, 내부 정보로 나누어 전처리를 진행하였다. 전처리 된 데이터의 예시로 지형 정보와 같은 경우에 그림13은 각 농가별 점수를 나타내는 전처리 과정 결과이다. 그림14는 농가간의 평균값을 이용하여 연결가중치를 구하는 행렬형태의 데이터 처리 방식이며 그림15는 일반적으로 행렬의 값이 대부분 0의 값을 갖고 일부만 연결이 되기 때문에 0을 제외하고 값이 있는 정보를 도출해서 정리한 데이터 결과이다. 이처럼 전처리 된 데이터들의 가중치를 결정하여 시뮬레이션 시나리오를 결정한다면 사용자의 의해 원하는 시나리오 결과를 도출해낼수 있다.


Fig. 13. 
Weight data for each farm


Fig. 14. 
Linked weight calculation matrix data processing


Fig. 15. 
Data preprocessing results

3-2 몬테카를로 기반의 네트워크 시뮬레이션

몬테카를로 기반의 네트워크 시물레이션 구현을 위해 pyCharm IDE를 이용하여 python code를 작성하였다. 전처리 과정에서 분류한 csv 형태의 이동 정보, 거리 정보, 지형 정보, 내부 정보 데이터를 pandas, numpy 등의 라이브러리를 사용하여 input, output 데이터로 재가공 하였다. 데이터 타입을 정의하기 위해 NamedTuple 와 sys 모듈을 이용하였으며 os 모듈을 사용하여 전처리 데이터 경로를 변환 및 취합 하였다. 취합한 데이터에 각각 1차, 2차 가중치를 부여하였고 streamlit 라이브러리를 이용하여 결과를 분석하였다. 데이터 결과의 시각화를 위해 Uber의 pydeck 라이브러리를 이용하였으며 datetime 모듈을 사용하여 날짜, 시간 정보를 표시하였다. 지도를 더욱 정밀하게 표현하기 위해 contextily 라이브러리를 사용하여 지도에 거리, 도로 정보를 추가하였으며 geopandas를 이용하여 위도, 경도를 표시하였다. 최종적으로 mpl_toolkits.axes_grid1의 make_axes_locatable 라이브러리를 이용하여 농가의 감염정도를 나타내기위한 범례를 작성하였다. 본 연구의 몬테카를로 기반의 네트워크 시물레이션을 위한 pyhon code 결과는 Appendix 에 나타내었다.

3-3 요인별 시뮬레이션 분석 결과

본 연구에서는 가축 전염병 발생 원인과 바이러스가 전파되는 명확한 원인와 근거를 찾기 위해 몬테카를로 시뮬레이션을 이용하여 분석하였다. 분석 요인에는 거리 정보, 내부 관리 정보, 지형 정보 총 3가지 요인으로 분석을 진행하였다. 가축 전염병 발생 기준 농가는 한 곳으로 고정 설정하여 분석 요인별 몬테카를로 시뮬레이션을 진행하였으며 기준 농가 위치는 다음 그림16과 같다.


Fig. 16. 
Infectious Disease Outbreak Criteria Farmhouses

1) 거리 정보에 따른 분석 결과

그림17은 거리 정보에 따른 질병 확산률을 나타낸 그림이다. 기준 농장을 기점으로 반경 10km 이하에 들어가는 농장들은 서로 네트워크로 연결하였으며, 농장 거리를 기준으로 가중치를 달리 적용하였기 때문에 기준 농장과 거리가 가까울수록 전염병 확산률은 높았으며, 거리가 멀수록 전염병 확산률은 낮게 나타났다.


Fig. 17. 
Epidemic spread rate according to distance information

가축 전염병 발생 기준 농가를 기점으로 전국 농가 데이터 및 위치 정보를 이용하여 거리 정보 요인의 시간에 따른 질병 확산 양상을 분석하였으며 그 결과는 그림18과 같다. 전염병 발생 1일차에는 기준 농가를 기점으로 거리 정보상 가중치가 높은 주변 농가 3곳으로 전염병이 확산되었으며, 2일차부터 4일차까지 전염병 확산 속도가 증가하였는데 이는 추가 감염된 농장을 기점으로 거리 요인에 따른 가중치가 다시 설정되었기 때문이라고 판단된다. 전염병 발생 4일차 이후부터는 전염병 확산 속도가 점점 감소하기 시작하여 7일차때는 추가적인 전염병 확산은 나타나지 않았다. 이는 추가 감염된 농장으로부터의 주변 농장들의 거리 정보 가중치가 낮아 추가적인 감염병 전파는 없다고 판단된다.


Fig. 18. 
Epidemic spread over time of distance information factor (From the top left, day 1, 2, 4, 8)

2) 내부 관리 정보에 따른 분석 결과

그림19는 내부 관리 정보에 따른 질병 확산률을 나타낸 그림이다. 분석 결과 전염병 발생 기준 농가 포함하여 모든 농가의 전염병 확산률은 0%로 나타났다. 이는 내부 관리 정보 요인에는 전염병의 주 확산 원인인 사람, 차량, 야생동물과 같은 매개체의 이동 등이 포함되지 않기 때문에 내부 관리 정보 요인의 가중치는 다른 요인들의 가중치에 비해 작게 산정되어 영향이 미비하다고 판단된다.


Fig. 19. 
Epidemic spread rate according to interna management information

따라서 내부 관리 정보 요인 하나만을 가중치로 선정하지 않고 거리 정보 요인, 지형 정보 요인, 사람과 차량의 이동 정보 요인 등 다양한 전파 요인을 고려하여 시뮬레이션을 진행하면 내부 관리 정보 요인 하나만을 가중치로 선정하였을때보다 가축 전염병 확산에 영향을 미칠 것이라고 판단된다.

농장 내부 관리 정보에 대해 가중치를 적용시켜 가축 전염병 발생 기준 농가를 기점으로 2차 가중치를 산정하여 시간에 따른 내부 관리 정보 요인의 시간에 따른 질병 확산 양상을 분석하였으며 그 결과는 그림20과 같다. 전염병 발생 1일차부터 9일차까지 추가적인 전염병 확산은 없었으며 이는 위의 내용과 같이 내부 관리 정보 요인에는 전염병의 주 확산 원인인 매개체의 이동 등이 포함되지 않기 때문에 전염병 확산에 미치는 영향이 적어 추가적인 전염병 확산이 없었다고 판단된다. 또한 내부 관리 정보 요인만으로는 전염병 확산도를 파악하기에는 문제점이 있어 다른 전파 요인을 고려하여 분석해야 한다고 사료된다.


Fig. 20. 
Epidemic spread over time of internal management information factors (From the top left, day 1, 2, 4, 8)

3) 지형 정보에 따른 분석 결과

그림21은 지형 정보에 따른 질병 확산률을 나타낸 그림이다. 분석 결과 전염병 발생 기준 농가를 포함하여 모든 농가의 전염병 확산률은 100%로 나타났다. 지형 정보 요인은 주변 지형 정보를 고려하여 전염병 발생 기준 농가를 기준으로 주변을 8방으로 나눈후 8방에 포함된 지목들을 각각 적용하여 가중치를 산정하는 방식을 이용하였다. 이에 따라 전염병 발생 기준 농가로부터의 거리와 상관없이 감염 농가의 지형 정보 요인의 가중치가 높게 산정되어 지형 정보에 따른 전염병 확산률이 100%로 나타났다고 판단된다. 따라서 지형 정보 요인에 따른 전염병 확산률을 판단하기위해서는 전염병 발생 기준 농가로부터 특정범위를 한정하여 분석하여야 한다고 판단된다.


Fig. 21. 
Epidemic spread rate according to geographic information

지형 정보에 따른 가중치를 적용시켜 가축 전염병 발생 기준 농가를 기점으로 2차 가중치를 산정하여 시간에 따른 지형 정보 요인의 시간에 따른 질병 확산 양상을 분석하였으며 그 결과는 그림22과 같다. 분석 결과, 전염병 발생 1일차에는 기준 농가로부터 거리가 먼 농가로 전염병이 확산되었으며, 2일차부터 3일차까지 전염병 확산 속도가 증가하여 4일차에는 모든 농가가 감염되었다. 지형 정보 요인에 따른 질병 확산 시간은 은 3가지 분석 요인들중 가장 짧았으며 이는 앞선 내용과 같이 지형 정보 요인이 전염병 발생 기준 농가로부터의 거리와 상관없이 가중치가 높게 산정되어 확산 속도가 빠르다고 판단된다. 따라서 전국을 대상으로 지형 정보 요인에 따른 질병 확산 양상을 분석하기 위해서는 전염병 발생 기준 농가로부터 특정범위를 한정하여 분석하거나, 전염병 발생 기준 농가로부터의 거리 정보를 명확히 하여 추가적인 분석이 필요하다고 판단된다.


Fig. 22. 
Infectious disease spread over time of geospatial information factors (From the top left, day 1, 2, 4, 8)


Ⅳ. 결 론

본 연구에서는 몬테카를로 시뮬레이션을 이용하여 축종별 질병 발생 주요 요인을 수집하고 이를 바탕으로 가축 질병으로 인한 피해를 최소화할 수 있는 시스템을 개발하여 전염병 확산 요인별 전염병 확산률과 시간에 따른 전염병 확산 양상을 분석하였다. 이동정보, 거리정보, 지형정보, 내부정보로 나누어 전처리를 진행하였으며 전처리 된 데이터들의 가중치를 산정한 후 몬테카를로 기반의 네트워크 시뮬레이션 구현을 위해 pyCharm IDE를 이용하여 python code를 작성하였다. 취합한 데이터에 각각 1차, 2차 가중치를 부여하였고 streamlit 라이브러리를 이용하여 결과를 분석을 진행하였다.

이 연구를 통해 전염병 발생 주요 요인별 전염병 확산률과 시간에 따른 전염병 확산 양상을 분석할 수 있었다. 향후, 지형 정보 요인 분석시 전염병 발생 기준 농가로부터의 거리 정보를 명확히 하여 분석이 필요하다고 판단되며 추가적으로 기존 가축 전염병 확산 네트워크 모델을 보완하여 가축 전염병에 영향을 미치는 다양한 주요 요인들이 포함된 개선된 모델을 개발하고자 하였다.


Acknowledgments

본 연구는 농림축산식품부 스마트팜다부처패키지혁신개발사업(421042042SB010)의 지원에 의해 이루어진 것임.


References
1. Food and Agriculture Organization of the United Nations (FAO) [Internet]. Available: https://www.fao.org/home/en
2. Livestock Health Control Association (LHCA) [Internet]. Available:https://www.lhca.or.kr/business/index.do
3. World Organization for Animal Health (OIE) [Internet]. Available: http://www.oie.int
4. S. J. Hong, “Spatial Variations of Risk Factors Associated with the Diffusion of Highly Infectious Animal Diseases”, Journal of the Korean cartographic association, Vol. 18, No. 1, pp. 81-91, January 2018.
5. J. H. Koo, “A Study on Community Mapping for ICT-Based Livestock Infectious Disease Response”, Journal of the Korean Surveying Society, Vol. 38, No. 3, pp.247-257, June, 2020.
6. W. Kang, “Development of Predicting Model for Livestock Infectious Disease Spread Using Movement Data of Livestock Transport Vehicle”, The Journal of The Korea Institute of Intelligent Transportation Systems, Vol. 21, No. 4, pp. 78-95, August, 2022.
7. H. S. Park, “Study on Policy Improvement Measures to Respond to Infectious Diseases of Livestock through Field Investigation”, Journal of The Korean Society of Disaster Information, Vol. 17, No.2, pp. 275-288, June, 2021.
8. S. Y. Lee, “Analysis of Animal Infected Diseases Dispersion Route by GIS”, Korean Society of Agricultural Machinery and Machinery, Vol.17, No.1, pp.314-317, February, 2017.
9. M. J. Kyung, “Implementation of Open Source SOLAP Decision-Making System for Livestock Epidemic Surveillance and Prevention”, Korean Society Of Subveying Geodecy, Photogrammetry And Cartography, Vol. 30, No. 3, pp. 287-294, March 2012.
10. S. H. Kim, “Animal Infectious Diseases Prevention through Big Data and Deep Learning”, Korea Institute of Intelligent Information Systems, Vol. 24, No. 4, pp. 137-154, December, 2018.
11. G. J. Lee, “Hub Facilities in Vehicle Movement Network between Livestock Facilities ”, Journal of the Korea Academia-Industrial cooperation Society, Vol. 19, No. 6, pp. 137-146, May, 201.
12. M. J. Jeong, “Network Analysis of Swine Farms and Slaughters : Based on Automobile GPS Data”, Journal of the Korean Association of Cartography, Vol. 19, No. 1, pp. 69-79, April, 2019.
13. G. J. Lee, “Hub Facilities in Vehicle Movement Network between Livestock Facilities”, Journal of Korea Academia-Industrial cooperation Society, Vol. 19, No. 6, pp. 137-146, June 2018.
14. U. K. Mun, “Column - Principles of the occurrence of livestock diseases and the importance of prevention and prevention”, Korea Duck Association, Vol. 102, No. 102, pp. 34-49, December 2011.
15. C. H. Eom, “Analysis of Potential Infection Site by Highly PathogenicAvian Influenza Using Model Patterns of Avian Influenza Outbreak Area in Republic of Korea”, Journal of the Korean Association of Geographic Information Studies, Vol. 20, No. 2, pp. 60-74, February 2017.
16. G.Y. Baek, “Analysis of foot and mouth disease area according to terrain classification”, Proceedings of the Korean Society for Agricultural Machinery Conference, 2012, 17.2: 362-366.
17. Hyeon-Tae Kim, “Type Analysis of Gyeongbuk Region Occurred Foot and Mouth Disease According to Terrain Classification”, Journal of Agriculture & Life science, NOV. 28. 2013
18. Jeong HeeHyeon, “ Assessment of Livestock Infectious Diseases Exposure by Analyzing the Livestock Transport Vehicle's Trajectory Using Big Data”, J. Korea Inst. Intell. Transp. Syst, 2020, vol.19, no.6, 92 pp. 134-143 (10 pages)

저자소개

이승헌(Seung-Hun Lee)

2022년 2월 : 공주대학교 공학사

2022년 3월~현 재: 공주대학교 공학석사과정

※관심분야 : 스마트팜 환경&에너지조절 및 냉·난방공조시스템

석희웅(Hee-Woong Seok)

현 재 : 공주대학교 공학사과정

현 재: 공주대학교 스마트팜공학과 학부연구생

※관심분야 : 스마트팜 환경&에너지조절 및 냉·난방공조시스템

김락우(Rack-Woo Kim)

2013년 8월 : 서울대학교 공학사

2015년 8월 : 서울대학교 공학석사

2020년 2월 : 서울대학교 공학박사

2020년 3월~2021년 2월: 서울대학교 농업생명과학연구원 연구조교수

2021년 3월~현 재: 공주대학교 스마트팜공학과 조교수

※관심분야 : 스마트팜 환경&에너지조절 및 냉·난방공조시스템

문준섭(Jun-Seop Mun)

현 재 : 공주대학교 공학사과정

현 재: 공주대학교 스마트팜공학과 학부연구생

※관심분야 : 스마트팜 환경&에너지조절 및 냉·난방공조시스템

김찬민(Chan-Min Kim)

현 재 : 공주대학교 공학사과정

현 재: 공주대학교 스마트팜공학과 학부연구생

※관심분야 : 스마트팜 환경&에너지조절 및 냉·난방공조시스템

정득영(Deuk-Young Jeong)

2011년 2월 : 서울과학기술대학교 석사

2011년~2014년: 한국방송통신전파진흥원 차세대방송 PM실 주임 연구원

2019년~현 재: 서울대학교 박사과정 수료

※관심분야 : 디지털 트윈, 농축수산 ICT, ICT 융합 플랫폼 및 응용서비스, HCI

김태곤(Taegon Kim)

2005년 : 서울대학교 생물자원공학부 공학사

2007년 : 서울대학교 지역시스템공학 공학석사

2014년 : 서울대학교 지역시스템공학 공학박사

2014년 9월~2014년 11월: 서울대학교 그린바이오과학기술 연구원 선임연구원

2014년 12월~2019년 12월: Post-doctoral associate, University of Minnesota

2019년 12월~2021년 8월: Research associate, University of Minnesota

2021년 9월~현 재: 전북대학교 스마트팜학과 조교수

※관심분야 : 머신러닝, 딥러닝, 데이터, 스마트팜

이봉국(Bong-kuk Lee)

1996년 2월 : 동아대학교 공학사

2001년 2월 : 동아대학교 공학석사

2005년 3월 : 오사카대학 공학박사

2005년 5월~2008년 3월: 일본과학기술진흥기구 박사후연구원

2008년 4월~2010년 3월: 오사카대학 산업과학연구소 조교수

2010년 4월~2011년 2월: 한국생명공학연구원 박사후연구원

2011년 3월~현 재 : 한국전자통신연구원 농축수산지능화 연구센터 책임연구원

※관심분야 : 스마트팜, 가축질병 조기감지, 현장진단, 확산차단 시스템

은지숙(Ji-sook Eun)

2020년 8월 : 전북대학교 공학 석사

2020년 7월~현 재: 한국전자통신연구원 재직 중

※관심분야 : 농축수산 지능화 시스템


Appendix




import os
import csv
from typing import NamedTuple

import numpy as np
import tqdm

import sys

from network_farm.calc_farm_dist import generate_list_from_dist
from network_farm.calc_geometry import calc_geometry
from network_farm.calc_internal_condition import calc_internal
from network_farm.calc_movement_dist import calc_movement
from network_farm.network_analysis_MCS import network_analysis_mcs, network_analysis_prob
from network_farm.util import read_factor, get_sim_number

class Option(NamedTuple):
  name: str
  weight_1st_file: str
  weight_2nd_file: str
  movement_file: str
  internal_file: str
  geometry_file: str
  net_analysis_date: str
  net_analysis_first_farm: int
  output_dir: str

def generate_final_network(option: Option):
  output_dir = option.output_dir
  if not os.path.exists(output_dir):
    os.makedirs(output_dir)

  farm_id_filename = "../output/dist/farm_id.csv"
  mountain_dir = "../output/mountain/"
  output_base_dir = "../output/dist"

  # calculate some distances that uses factors
  calc_movement(output_dir, option.movement_file, farm_id_filename)
  calc_internal(output_dir, option.weight_2nd_file, option.internal_file, farm_id_filename)
  calc_geometry(output_dir, option.weight_2nd_file, option.geometry_file, farm_id_filename)

  movement_file = os.path.join(output_dir, "farm_movement_dist_score.csv")
  distance_file = os.path.join(output_base_dir, "farm_dist_score.csv")
  topology_file = os.path.join(output_dir, "farm_geometry_dist_score.csv")
  mountain_file = os.path.join(mountain_dir, "farm_mountain_dist_score.csv")
  management_file = os.path.join(output_dir, "farm_status_dist_score.csv")

  output_filename = os.path.join(output_dir, "farm_dist_final.csv")

  dist_movement = np.genfromtxt(movement_file, delimiter=',')
  dist_distance = np.genfromtxt(distance_file, delimiter=',')
  dist_topology = np.genfromtxt(topology_file, delimiter=',')
  dist_mountain = np.genfromtxt(mountain_file, delimiter=',')
  dist_management = np.genfromtxt(management_file, delimiter=',')

factor_1st = read_factor(option.weight_1st_file, 1, 3)
factor_2nd = read_factor(option.weight_2nd_file, 1, 3)

  dist_topology[dist_mountain > 0] = 0
  dist_mountain = dist_mountain * factor_2nd["B_5"] / 10.
  dist_mountain_topo = dist_mountain + dist_topology

  dist_final = (dist_movement * factor_1st["MOVEMENT"]
         + dist_distance * factor_1st["DISTANCE"]
         + dist_mountain_topo * factor_1st["TOPOGRAPHY"]
         + dist_management * factor_1st["MANAGEMENT"]) / 40.
  print(np.max(dist_movement))
  print(np.max(dist_distance))
  print(np.max(dist_mountain_topo))
  print(np.max(dist_management))

  np.savetxt(output_filename, dist_final, delimiter=',', fmt='%.5f')
  output_final_score_list_filename = os.path.join(output_dir, "farm_dist_final_score_list.csv")
  generate_list_from_dist(output_final_score_list_filename, output_filename, farm_id_filename,
              value_name="network_score")


def perform_network_analysis(option: Option):
  output_dir = option.output_dir
  farm_id_filename = "../output/dist/farm_id.csv"
  distance_file = os.path.join(output_dir, "farm_dist_final.csv")
  distance_for_analysis_file = os.path.join(output_dir, "farm_dist_final_for_model.csv")
  with open(distance_for_analysis_file, "w") as fout:
    with open(distance_file, "r") as f:
      fout.write("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810\n")
      for line in f:
        fout.write(line)

  distance_score_file = os.path.join(output_dir, "farm_dist_final_score_list.csv")
  distance_score_for_model_file = os.path.join(output_dir, "farm_dist_final_score_list_for_model.csv")
  with open(distance_score_for_model_file, "w") as fout:
    with open(distance_score_file, "r") as f:
      for line in f:
        fout.write(line)
      fout.write("811,1000000847,811,1000000847,0\n")

  sim_number = get_sim_number(option.weight_2nd_file)

  network_analysis_prob(output_dir, distance_score_file, farm_id_filename,
             report_date_time=option.net_analysis_date,
             initial_infected_farm_id=option.net_analysis_first_farm,
             sim_no=sim_number)
  network_analysis_mcs(output_dir, distance_score_file, farm_id_filename,
             report_date_time=option.net_analysis_date,
             initial_infected_farm_id=option.net_analysis_first_farm,
             sim_no=sim_number)


def main() -> None:
  output_base_dir = "../output/dist/"
  weight_option_dir = "../input/user_input"

  if len(sys.argv) == 3:
    farm_id = int(sys.argv[1])
    infect_date = sys.argv[2]
  else:
    print("this code requires 2 arguments. This mode use default values")
    farm_id = 1000000723
    farm_id = 1000000062
    infect_date = "2021-12-31"

  print("1 = ", farm_id, ", 2 = ", infect_date)

  options = [

    Option(
      name="scenario01",
      weight_1st_file=os.path.join(weight_option_dir, "Ver_4", "FACTOR_sce1.csv"),
      weight_2nd_file=os.path.join(weight_option_dir, "Ver_4", "SIM_FACTOR_202111191502.csv"),
      movement_file="../input/history_farm_io_generated_202111181109.csv",
      internal_file="../input/farm_data_generated_202111191505.xlsx",
      geometry_file="../input/CELL_INFO_FARM.csv",
      net_analysis_date=infect_date,
      net_analysis_first_farm=farm_id,
      output_dir=os.path.join(output_base_dir, "dist_sce1_62")
    ),

  ]

  for option in tqdm.tqdm(options, desc="generating data for the network model using options"):
    generate_final_network(option)
  for option in tqdm.tqdm(options, desc="Perform network simulation"):
    perform_network_analysis(option)


if __name__ == "__main__" :
  main()