Code makes the world a better place

傳染病 SIR 模型與機率模型介紹與簡易模擬

1. 簡介

最近武漢肺炎人心惶惶,有台大教授發表化學動力論來模擬傳染變化,而其實我高中時也做過類似的事,就是我的「傳染病之數學模型與個體導向模擬」科展。啟發於科學人雜誌《虛擬城市:天花來了》,文中藉由科學模擬來進行流行病預測與防治,我覺得十分有趣,那陣子對伊波拉病毒想深入研究加上也覺得寫程式好玩,因此就做了那個科展,本篇大致將我高中時的科展報告重新整理。

本文介紹 SIR 模型來做大尺度傳染病預測,同時也用機率函數來做個體導向的微觀尺度模擬,用兩種方式來模擬傳染病的擴散狀況。

公共衛生對傳染病研究有很多理論模型,其中隔間模型(Compartmental Model)藉由假設整個人口被區分成幾個群體,並且在同一群體中所有個體皆有一樣的特性,藉由這幾個假設可以簡化傳染病的社學模型。

在隔間模型中,易感受-感染者-康復者模型(SIR Model)是指由人口由易感受族群(Susceptible, $S$)、已感染族群(Infectious, $I$)、已康復族群(Recovered, $R$)三個部分組成的傳染病模型。模型假設傳染病可以藉由直接接觸傳染,並且每個人會隨機接觸其他人。模型中有兩個重要參數,分別是感染族群傳染給健康族群的傳染力(transmission rate)$β$,以及感染族群恢復的康復力(rate of recovered) $γ$。

機率模型則是本文藉由分布函數去模擬個體互動是否造成感染的簡易模型。

Continue reading

台大觀察與心得(八):大四上

在台大的日子已經進入第四年,不知不覺留在校園的日子只剩一年,讓人十分的不捨。從高中進入台大,到快要從台大畢業,這段日子我的變化很大,像是從一個物理學家變成軟體工程師,喜歡的運動從游泳變打網球。經歷了很多事情,多到我自己都常常忘記原來我曾經歷過,像是集思論壇、綠領農學市集、好幾家公司實習、參加的各種演講等等。
Continue reading

30 天 Javascript 從入門到進階:陣列

陣列

前一張在介紹迴圈時,提到一些例子,例如我有一百件褲子,要一件一件檢查。或是老師巡邏學校有好幾個班級。我們知道可以用迴圈的方式,一個一個把「東西」數過一遍,也就是遍歷一次,但迴圈是「方法」,我們必須準備好東西,才能使用方法。

這邊的東西就是指一百件褲子或是 20 個班級。我們需要用一個容器來儲存這些東西,在 JS 中,這個容器可以是陣列(Array),我們可以把一百件褲子放入陣列,那他就會叫做褲子陣列。

事實上可以存一堆物品的容器可以是其他東西,但我們晚點再介紹。這個章節中我們要介紹何謂陣列。

Continue reading

30 天 Javascript 從入門到進階:條件判斷

條件判斷

接下來介紹控制程式的方式之一,也就是條件判斷。

條件判斷顧名思義就是針對不同的條件來判斷要做出怎樣的結果。舉例來說,現在要採收水果,但我們只要取下已經成熟的水果,還沒熟的我們要讓他繼續成熟。

或是我們有更多條件,例如大於 500 公克的蘋果放到 A 籃子,介於 200 到 500 公克的蘋果放到 B 籃子,小於 200 公克的蘋果不要摘下來。

現實生活中我們都在做各種判斷,而我們當然可以把這種判斷的工作交給電腦來做,接著讓我們來了解電腦怎樣做判斷的。

Continue reading

30 天 Javascript 從入門到進階:檔案讀寫

檔案讀寫

電腦科學中資料讀寫包含存取(input, I)和輸出(output, O),這也是為什麼常常看到 I/O 這個術語的原因。在電腦科學術語中中,廣義的 I/O 包含直接對檔案(file)、緩存(Buffer)以及數據流(stream)做操作。檔案就是已經存放在儲存裝置中的文件,緩存是還在記憶體中的資料,數據流則是一串序列化的抽象資料,這再晚點會深入介紹。

資料傳輸在寫程式的時候,不管是你想要從文件中讀取資料,或是資料從網路上傳輸,亦或是資料在程式與程式之間傳送,都常常會用到。事實上我們寫程式通常也就是為了處理資料,如果沒有資料的話,還真的不曉得程式能做什麼事情!(有啦,算算質數之類的 XD)

本篇會將 NodeJS 上會用到數據型態作介紹,當作先備知識。接著只會著重在檔案讀寫講解範例,其餘像是數據流的操作、緩存的處理,待日後的進階文章才會詳細介紹。

Continue reading

30 天 Javascript 從入門到進階:函式

函式

我們知道程式碼可以幫我們做很多事情,例如睡不著要數羊的時候,就讓程式跑個迴圈,一下就幾百幾千萬隻羊了。但是目前為止,所以工作都是被放在一起的,並且只能被執行一次。也就是說,假設我有三件工作,寫成程式碼可能會長這樣:

Continue reading

30 天 Javascript 從入門到進階:迴圈

迴圈

在生活中,我們常常會有有做一樣的事情的時候,例如一張一張比對發票、一行一行檢查有沒有錯字。這個要重複做的動作,在程式語言中就可以用迴圈(loop)辦到。

Continue reading

30 天 Javascript 從入門到進階:物件

物件

這個世界由各種不同的東西(Things)組成,我們身處的宇宙、太陽系、每天繞地球的月球,山海與花花草草。

有一部電影〈The Theory of Everything〉描述一位已逝的偉大物理學家——霍金,年輕時候的愛情故事。霍金一生為追求宇宙的真理而努力,物理學家堅信世界應該是由一個可以統合並解釋所有物理現象的理論所支配,亦即萬物的理論。

在 JS 的世界中,萬物的理論就是 object 這個物件型別,這個物件型別包含各種形形色色的玩意,讓我娓娓道來。

Continue reading

30 天 Javascript 從入門到進階:環境建設與執行第一個程式

環境建設與執行第一個程式

JS 可以當作獨立的程式直接運行,也可以跑在網頁上。本篇先介紹如何直接運行 JS 就好,因為要跑在網頁上,我們必須寫一份網頁出來,其中概念不只 JS,還必須懂 HTML,但這邊我們先了解 JS 就好,所以跑在網站上的方式待晚點再作介紹。

Continue reading

台大觀察與心得(七):大三寒假與大三下

在台大的日子已經過完三年整了,本篇記錄從大三寒假到大三下在生機系的生活。故事線大概可以分三條,研究篇、課業篇、課外篇,不過雖然我念生機系,但大部分都不是在生機系的故事就是了。

Continue reading

台大觀察與心得(四):生機系第一學期-課外活動篇

高中以前,我夢想當個物理學家。大學之後,我對世界有嶄新的認識。大一時多方聽演講,以及修了外系的課,我對其他領域的興趣慢慢浮現,我自己也有感覺,比起學術之路,我更適合走工程。總之,我轉系了,轉去生物產業機電工程,簡稱生機。

Continue reading

台大觀察與心得(三):大一暑假

這篇主要是描述大一下學期到暑假期間的心路歷程。

約莫大一下學期,我還在大氣系,寒假時有當志工,幫林博雄教授做觀測。期間認識石恩,石恩學物理的,聊得挺投機。後來林博雄需要找學生幫忙寫軟體,石恩那時在教授那邊工作,於是石恩介紹我給教授,我一直都有在接觸程式,那時的我程度真的只是比一般人好一點。不過不管,勇於接受挑戰才能更上一層樓。那時候稍微覺得對程式編寫沒問題。這又要往回說。
Continue reading