陳染
計算機剛剛出現(xiàn)的時候,人們就嘗試用計算機解決科學問題。在傳統(tǒng)的科學研究中,科學家會對問題提出相應的假設,再通過設計實驗驗證假設。而計算機更注重于模型的構建,通過模型對科學問題進行預測和假設。計算思維與科學思維并不是非此即彼的,它們互相補充,共同促進科學的進步。
一個著名的例子是阿蘭·圖靈(AlanTuring)運用計算思維對生物學的研究。眾所周知,圖靈為計算機的發(fā)明提供了理論基礎,被稱為“計算機之父”??甚r為人知的是,在圖靈晚年,他將研究精力放在生物學上,但他并不是只沉浸在實驗室中,作為一名計算機科學家,圖靈試圖通過構建計算機模型解釋生物學現(xiàn)象。1952年,也就是圖靈生命的最后一年,他完成了論文《形態(tài)發(fā)生的化學基礎》,這篇論文運用計算機模型的方法探討了動物身上花紋的形成規(guī)律。在模型中,圖靈假想了2種作用相反的物質:激活劑和抑制劑,通過這2種物質的互相對抗形成不一樣的圖案。通過構建這個模型,圖靈發(fā)現(xiàn)只需要改變激活劑和抑制劑的參數,就能夠構建出斑馬、豹子、斑點狗等動物的圖案。為了紀念圖靈的貢獻,人們把能夠通過圖靈提出的模型形成的圖案稱之為“圖靈斑圖”(圖1)。圖靈的這篇文章促成了一個全新的交叉學科領域“計算生物學”的產生。
這篇論文不僅在生物學研究上產生了重大影響,其所運用的新思路在物理、化學乃至社會科學領域也產生了深遠的影響。換一種思路,一些以前看上去棘手的問題突然變得簡單。作為教師,我們也可以將這種思路運用于科學課程的學習中,通過構建模型,更清楚地解釋科學課程中的現(xiàn)象,換一個角度也許學生的困惑便會迎刃而解。
探究物種的演化
自然選擇是中學生物課中的一個重要知識點。物競天擇,適者生存,為了生存,有的生物演化出令人驚嘆的保護色,保護它們不被天敵發(fā)現(xiàn)。生物課本中所講的樺尺蠖便是一個典型的例子。
樺尺蠖是一種生活在樺樹上的蛾子,它有深色和淺色2種色型。19世紀中,科學家在曼徹斯特作了一個調查,發(fā)現(xiàn)這里的樺尺蠖大多數是淺色型,只有少數深色型。100年后,曼徹斯特已經成為一座工業(yè)城市,工廠的濃煙熏黑了白色的樺樹皮。當科學家來到同一個地方再次進行樺尺蠖調查時,發(fā)現(xiàn)這里的樺尺蠖大多數是深色型的,淺色型反而成了少數??茖W家認為在自然的選擇之下,樺尺蠖發(fā)生了基因頻率的變化,相對于淺色型的SS基因,攜帶深色型的ss基因的樺尺蠖更容易生存下來。
在這個案例中,我們通過科學家的角度探究自然選擇對基因頻率變化的影響。我們還可以換一個角度,從捕獵者的角度探究自然選擇對基因型的影響。NetLogo的模型Bug HuntCamouflage(捕獵蟲子,圖2)為我們提供了這樣的思路。
與其說這是個模型,不如說這是一個代入式的游戲。點擊go運行模型時,我們會看到右側的花田中會長出一只只顏色各不相同的蟲子,你的鼠標也變成了鳥的形狀,你所要做的任務就是盡可能多地吃掉蟲子。
這個模型模擬的是自然環(huán)境下蟲子被天敵捕食時產生的自然選擇。每隔一段時間,蟲子就會繁殖,生下來的大多數后代與前一代的顏色相同,少數情況會發(fā)生基因突變變成其他顏色。一開始我們會很容易地找到蟲子,過了一段時間后,捕食蟲子變得越來越難,我們可以通過模型左側的捕蟲數與時間的關系圖直觀地看到這種變化(圖3)。
當我們覺得已經難以找到蟲子的時候,暫停模型的運行,看看在這場捕蟲游戲中你收獲了什么吧。
點擊模型的flash按鈕,未被捕捉的蟲子會閃爍。我們會發(fā)現(xiàn)并不是所有的蟲子都被捕捉,有些蟲子在我們的捕捉下幸存下來,并演化出保護色,不容易被我們發(fā)現(xiàn)。模型左側下部有6個直方圖,上面的3個直方圖表示的是當前蟲子的色彩、明暗和飽和度分布圖,而下面的3個圖表示的是游戲開始時的蟲子色彩、明暗和對比度的分布情況。通過2組圖的比較,我們可以直觀地看出蟲子顏色是如何變化的(圖4)。
那么,自然選擇下蟲子的基因型如何變化呢?這個模型巧妙地利用計算機顏色數值表示了蟲子的基因型。我們知道,在計算機中,1個顏色由紅綠藍(RGB)三原色的不同配比組成,每個顏色的取值范圍從0-255,黑色的RGB值是0,0,0,意味著紅、綠、藍的取值都是0;白色的RGB值是255,255,255,通過這樣的表示方法,計算機總共可以顯示16 777216種顏色。這3種原色的數值組成了一個三維向量,在模型中我們用它代表蟲子的基因型。我們通過計算每一個向量的標準差,就可以得知基因型的變化。模型右側花田圖片下方的圖便是向量標準差隨時間的變化圖,標準差越高,意味著蟲子的基因型越相似,也意味著蟲子的顏色越接近??纯丛谖覀儾东C期間,蟲子的基因型發(fā)生了怎樣的變化(圖5)。
我們看到,隨著獵食者的捕食,蟲子基因型的標準差越來越高,說明蟲子的基因型越來越相似。過了一段時間,我們發(fā)現(xiàn)標準差變小了,意味著蟲子之間的基因型差異變大了,這發(fā)生了什么呢?仔細觀察生存下來蟲子的顏色,我們會發(fā)現(xiàn)一個有意思的現(xiàn)象,分布在花上的蟲子顏色更接近花的顏色,分布在葉子上的蟲子更接近葉子的顏色。這個現(xiàn)象意味著經過自然選擇之后,蟲子分化為居住在花上的和居住在葉子上的2個生態(tài)位。
這個模型還可以幫助我們探究更多的問題,例如,動物的體型會對保護色產生什么影響,動物的基因突變頻率是否有利于它的生存,動物的后代遷徙距離對保護色有什么影響等。
我們看到,在捕獵蟲子模型中,我們并沒有告訴蟲子如何生成保護色,而是使蟲子根據幾個簡單的規(guī)則活動,或者說這是模型的3個算法。
·鳥(玩家)會捕食蟲子,被捕食的蟲子從模型中消失;
·每過一段時間,蟲子會生出新的蟲子,新的蟲子離原有蟲子有一定距離;
·生出來的蟲子大概率會延續(xù)上一代的顏色,小概率會突變成隨機顏色。
這個模型可以設置不同的環(huán)境,我們發(fā)現(xiàn),只需要構建出這幾條規(guī)則,無論環(huán)境如何變化,蟲子都可以很好地融入環(huán)境中。當然,現(xiàn)實中的自然選擇比我們看到的復雜得多,模型是對現(xiàn)實的簡化,我們不關注現(xiàn)實中復雜的變量,而是抽絲剝繭,關注最核心的問題,這也就是計算思維研究問題的方法。
探究植物的生長
自然選擇不僅發(fā)生在動物中,植物同樣也發(fā)生著自然選擇。例如,很多人喜歡養(yǎng)多肉植物,多肉植物吸引我們除了質感厚實可愛之外,我們還發(fā)現(xiàn)它的葉片分布非常均勻,排列得很有規(guī)律,呈現(xiàn)出某種迷人的秩序之美。不只是多肉植物,很多植物,例如向日葵的花盤,也會呈現(xiàn)出同樣的迷人的排列。在課本中我們常常把它們當成自然界的數學之美的案例。
我們可以進一步地探究這些迷人的秩序是如何形成的。科學家發(fā)現(xiàn),圖案的形成與葉子的生長角度有關。科學家對很多輪生葉序植物進行研究,發(fā)現(xiàn)很多輪生葉序植物長出的第1片葉子和第2片葉子的夾角度數是137.51°。137.51°是一個神奇的角度,如果2片葉子的夾角是137.51°,那么它的補角就是222.49°,這2個角度的比值接近黃金分割比例0.618,因此,137.51°也被稱為黃金角。為什么那么多的植物會選擇黃金角呢?我們可以通過模型進行探究。
NetLogo模型庫中的Sunflower模型(圖6)很好地模擬了不同角度下葉子生長的情況。在這個模型中,我們將植物的整體形狀的形成分解為每一片葉子的生長模式,并用“海龜”來代表葉子。
在這個模型中,葉子的生長行為遵守以下幾個規(guī)則。
·葉子從畫面原點開始生長,生長方向與上一片長出的葉子保持一定的夾角;
·葉子會逐漸遠離原點;
·葉子會逐漸長大。
在模型中,我們可以調整葉片夾角的比例,探究不同比例會形成怎樣的圖案,將比例設置成0.617、0.618 034和0.619,運行模型,我們看到模型會生成3種不一樣的花(圖7)。
我們看到,盡管比例上只有0.001的微小差別,轉換成角度只有0.36°,但花的形狀卻非常不一樣。比例為0.617和0.619的花都會產生空隙,有些葉子還會互相堆疊,導致空間的利用率不高。而只有遵循黃金角度的花會充分填滿花盤的空間,同時又不會發(fā)生葉子的堆疊。在現(xiàn)實中,這樣的葉子排列能夠更充分地利用空間,更具有競爭優(yōu)勢。因此,在自然選擇中,很多植物的葉片都采用了黃金角的生長角度。
用模型探究概率問題
概率論是中學數學中非常重要的一部分,也是比較適合用于開發(fā)計算機模型的主題。其中, “三門問題”是中學概率論中一個很有趣同時又很令學生困惑的問題,理解三門問題將有助于學生更好地學習條件概率。三門問題的表述如下。
三門問題又叫蒙提霍爾問題。它源自20世紀60年代的美國電視節(jié)目“Let's Make ADeal”。參賽者經過重重闖關后,會看見三扇關閉的門。其中一扇的后面藏著1輛汽車,而另外兩扇門后面則各藏著1只山羊,參賽者想要獲得汽車而不是山羊。此時,參賽者指定了一扇門,但未去開啟它的時候,知道門后情形的節(jié)目主持人會開啟剩下兩扇門中背后是山羊的一扇門,并詢問參賽者: “是否轉換選擇指定另一扇門?”
這時候參賽者就產生分歧,有人選擇轉換指定,有人選擇不轉換,他們的思維方式是怎樣的呢?
選擇轉換指定的人:無論選擇哪一扇門,主持人都會打開另外兩扇門中沒有汽車的一扇,在剩下兩個答案中排除了一個選項,那意味著剩下的一扇門有中獎的概率更高,所以選擇轉換指定的門。
選擇不轉換指定的人:無論選擇哪一扇門,主持人都會打開一扇有山羊的門。沒有打開的兩扇門中,其中一扇門是汽車,另一扇門是山羊,所以每扇門的中獎概率是1/2,因此轉換與否不影響中獎概率,因此選擇不轉換。
這兩種思維看上去都很有道理,哪一種是正確的呢?試一試就知道了。概率實驗需要重復多次才能得出正確的結論,在現(xiàn)實中反復進行這個實驗費時費力、效率低下,而運用計算機構建模型,可以在極短的時間內進行成百上千次實驗,在現(xiàn)實中可能需要數十個小時完成的實驗,在計算機里只需要幾秒鐘就完成了。NetLogo模型庫中的Three Doors便是讓“海龜”自動進行重復實驗的模型。
這個模型讓數百只“海龜”不停地進行三門游戲。實驗開始時,每只“海龜”按照以下幾條規(guī)則活動:
·每只海龜有3個選項,其中1個選項是獲獎選項;
·海龜在3個選項中隨機選擇1個;
·去掉剩余2個選項中不是獲獎選項的1個;
·海龜選擇是否轉換選擇(黑色海龜表示永遠選擇轉換,白色海龜表示永遠選擇不轉換);
·如果海龜選擇的是獲獎選項,則獎勵向前前進一步,如果不是獲獎選項,則不進行任何操作。
設計了海龜的行為規(guī)則之后,我們就可以將它轉換成計算機能夠理解的程序,教師可以引導學生設計模型程序的流程圖(圖9),清晰地順理模型設計思路,這種方法有助于我們設計自己的模型。
這個模型有2種運行模式,點擊gradation即可切換。當gradation開關關閉的時候,點擊運行,我們看到黑色的海龜跑得比白色的海龜更快;當gradation開關開啟時,點擊運行,海龜作出隨機選擇而不是固定選擇,顏色越深的海龜更傾向于選擇轉換,顏色越淺的海龜更傾向于選擇不轉換。我們同樣發(fā)現(xiàn)越深色的海龜跑得越快。通過這個實驗,我們看到選擇轉換的海龜更容易獲得獎品,也說明了第1種思維方式的正確性。
通過這個模型,我們在計算機里做了成千上萬次實驗,并通過“海龜賽跑”的形式直觀地展現(xiàn)實驗結果。如果有條件,我們可以引導學生自己通過Pwthon或Scratch建立三門問題模擬,相信對學生理解背后的條件概率有更大的幫助。
用蒙特卡洛法計算圓周率
我們看到計算機可以在很短時間內將一個程序重復執(zhí)行成千上萬次。這種優(yōu)勢不僅可以讓我們認識概率問題,科學家還通過它解決了許多難以解決的問題,圍棋AI程序便是其中的一個例子。圍棋有19×19總共361個交叉點,每個交叉點可以有黑棋、白棋、沒有棋子3種情況,除去圍棋規(guī)則不允許和對稱的情況外,總共約為2×10170種情況,比整個宇宙的原子還多,復雜度之高計算機顯然無法計算所有情況。那么,著名的人工智能圍棋程序AlphaGo是如何在如此復雜的選擇中簡化局面作出最佳選擇的呢?
Alpha Go戰(zhàn)勝人類的秘密是依靠蒙特卡洛樹搜索和深度神經網絡。其中,蒙特卡洛法的作用就是簡化局面,使計算機無須遍歷所有情況,即可在有限的時間內找出最佳一著。
蒙特卡洛法又叫模擬法,它源于20世紀40年代美國開啟研制原子彈的“曼哈頓計劃”。在研制原子彈的過程中,馮·諾依曼提出了一種新的算法,它最大的特點就是“蒙”。面對一個高度復雜的系統(tǒng),蒙特卡洛法通過大量隨機模擬,估算系統(tǒng)的最優(yōu)解。蒙特卡洛算法就像盲人摸象,盲人無法看到大象的全貌,只能靠摸猜測大象的樣子,有人摸到象鼻子,有人摸到象尾巴,有人摸到象腿,怎樣了解大象的全貌呢?我們可以找來盡可能多的盲人,讓盲人隨機摸大象,然后將所有盲人的答案集合起來,我們就能估計出大象的全貌。
在計算機發(fā)明之前,人們已經產生了“布豐投針”實驗等用隨機現(xiàn)象認識復雜系統(tǒng)的思想,但囿于無法產生大量樣本,布豐投針實驗更像是數學家閑暇之余的游戲。計算機的發(fā)明,使得快速生成大量隨機樣本成為可能,也讓它從數學游戲變成了真正實用的工具。為了更好地了解蒙特卡洛法,我們可以用NetLogo設計一個蒙特卡洛法計算圓周率的程序。
設計蒙特卡洛法計算圓周率的思路核心是我們需要構造一個辦法讓圓周率丌與某個概率聯(lián)系起來。計算圓周率,我們首先要聯(lián)想圓,圓的面積公式是S=丌,,我們可以利用圓面積構造概率,而剩下要做的就是想辦法消掉,。
我們可以這樣構造模型:作圓及外切正方形。設圓的半徑為r,則外接正方形邊長為2r。然后我們在正方形內隨機投點,設投點總數為a,落入圓內的點數為b,那么,投點落入圓內的概率b:a為S圓:S方,即πr2/4r2=π/4。這樣,我們就可以將概率與圓周率丌聯(lián)系起來。
有了思路,我們就可以通過NetLogo程序設計模型。我們在模型的“瓦片”上作圓,并將“海龜”投點到模型中,通過判斷海龜的位置是在圓內還是在圓外,計算出圓周率丌的數值。我們可以設立“初始化”和“運行”2個按鈕,分別對它們進行編程,模型的程序流程圖分別如圖10。
我們用變量total統(tǒng)計總共的海龜數,用變量turtlein_green統(tǒng)計落在綠色圓內的海龜個數。我們通過監(jiān)視窗估算圓周率丌的值,計算方法為(turtlesin_green/total)*4。在左下方的圖表計算的是估算值與真實值的誤差率。我們看到,一開始投點比較少的時候,誤差率非常高,但經過了10萬多次投點采樣后,我們將能夠將誤差率降低到0. 02%(圖11)。
通過這個模型,我們可以歸納出蒙特卡洛法的特點。蒙特卡洛法需要多次重復實驗:需要多次隨機采樣才能了解一個系統(tǒng),與之相對的,蒙特卡洛法精確度較低,我們需要進行數萬次乃至數十萬次投點,才能達到比較滿意的結果。但蒙特卡洛法的計算較為簡便,對于復雜度比較高的計算,蒙特卡洛法可以簡化計算量,也是這個特點,蒙特卡洛法的泛用性比較高,對于不規(guī)則的圖形,普通的數學方法可能難以通過積分等方法計算其面積,而蒙特卡洛法能夠快速估計不規(guī)則圖形的面積。這種利用計算機生成大量隨機樣本的思維模式,正是計算思維在數學領域的應用。