2025年6月8日

狐狸抓兔子的數字遊戲:線上互動程式玩Lotka-Volterra 方程式

 捕食者和獵物的關係玩這麼多,再來看個以前就寫過的東西:食物鏈的模擬模型Lotka-Volterra equation與食物鏈模擬軟體。現在呢就做了一個線上互動程式來玩

https://chihhsiangchien.github.io/Lotka-Volterra_equations/index.html

想像一片草原,上面住著一群快樂的兔子和一些虎視眈眈的狐狸。兔子的數量會一直增加嗎?狐狸會把兔子都吃光嗎?大自然中,捕食者(像是狐狸)和獵物(像是兔子)的數量是如何變化的呢?


點進頁面後是一個「洛特卡-沃爾泰拉方程式」模擬器(Lotka–Volterra equations)。聽起來很可怕,但它的概念很簡單!這些方程式描述了:

  • 獵物(兔子)的增長:如果沒有捕食者,獵物會因為食物充足而快速繁殖。
  • 獵物被捕食:獵物越多,捕食者能吃到的也越多,所以獵物數量會減少。
  • 捕食者(狐狸)的增長:捕食者吃了獵物後,才能獲得能量來繁殖後代。
  • 捕食者的衰亡:如果獵物太少,捕食者會因為食物不足而數量減少。

在模擬器裡,你可以調整幾個參數:

  • α (獵物生長率):想像一下,如果沒有狐狸,兔子繁殖的速度有多快?這個數字越大,兔子軍團就擴張得越快!
  • β (捕食率):狐狸抓兔子的「成功率」。這個數字越大,兔子被狐狸盯上的機會就越高。
  • δ (轉化率):狐狸吃了兔子後,能把它們轉化成「新狐狸」的效率。
  • γ (捕食者死亡率):如果沒有兔子吃,狐狸餓肚子的速度。這個數字越大,狐狸就越容易GG。
  • 初始獵物/捕食者數量 (x₀, y₀):遊戲一開始,草原上有多少隻兔子和狐狸。
調整參數隨即會看到圖表的變化:
  • 數量隨時間變化圖:這張圖會畫出兔子和狐狸的數量隨著時間的推移,如何一波未平一波又起地變化。你會發現,通常兔子的數量先達到高峰,然後狐狸的數量才跟著上升;當兔子變少,狐狸也會跟著變少。這種「你先我後」的現象,就是所謂的「相位差異」。(如果沒有差異,那就會是同步變化了)
  • 相位圖:這張圖把狐狸的數量當作X軸,兔子的數量當作Y軸。你會看到一條封閉的曲線,像是一個永無止境的追逐遊戲,展現了牠們之間循環消長的關係。
  • 試試看改變 α 或 γ,看看族群高峰出現的時間點(相位)是不是也跟著變了呢?這就是間接控制相位差異的感覺!

為了更容易理解相位,所以同一個頁面上有另一個按鈕,可以進入相位示範模式,這是用來觀察「相位差異」







振幅 (Amplitude):代表族群數量的最大變化幅度。

週期 (Period):代表族群數量循環一次的時間。

在這個模式中,你可以獨立調整獵物和捕食者的振幅與週期:你可以讓兔子的數量波動很大、週期很短,同時讓狐狸的數量波動很小、週期很長,看看會發生什麼事。

直接控制相位差 (φ):你可以直接設定捕食者的週期比獵物晚開始多少。例如,設定 -0.25,就代表捕食者的數量高峰會比獵物晚四分之一個週期出現。週期的變化也同時改變了相位圖的樣子。

我朋友解過一題97學年度生物指考的題目,正是在說這個現象,而這題答案給了D。


雖然是十幾年前的考題,但我還是來炒冷飯分析一下,套一個網格在題目的圖片上

然後估計一下數字放在我的程式裡,圖形的相位差大約就是差1/4個週期

你可以參考我的數字打進去模擬程式,四個選項的差異主要來自相位差。如果是差1/4個週期,那麼答案應該是個圓,若是振幅不同,則會從圓變成橢圓(看是長橢圓還是扁橢圓,例如選項A)。而如果是選項的B或D,那麼就是要改相位差了。當時這題的答案給D,嗯....







現在我用關鍵字「某捕食者與其獵物族群大小隨時間變化的關係」也可以看到一些高中的考題有考這個題目,但是答案真的是那樣嗎?


生態系經營模擬的食物網遊戲

前幾天做了 狼羊兔草的生態模擬互動程式 ,就開始在課堂上讓學生玩。

很意外耶,學生居然很沉迷於調參數看族群數量變化。所以我就想玩更大的,把課本上的食物網放進來做一款更多生物的遊戲。



生物種類包括植物、松鼠、老鼠、兔子、雉雞、蛇、黃鼠狼、鷹。

有興趣的點此  生態模擬食物網

然後這就變成上帝視角的經營策略遊戲,玩家就是扮演一位生態系的設計師與管理者, 打造一個生生不息、物種多樣且能長期穩定運作的生態系。我覺得這好難,不過學生居然可以玩出來!?






除了之前就有的「族群數量變化圖」和「能量金字塔圖」,再新增一個「食物網」,還告訴你目前經營出幾條食性關係,這個經營遊戲中的儀表板和報告,幫助玩家了解當前生態系的狀況。然而要作到成功,就要會「假設分析」,不斷嘗試不同的參數組合。「如果我把老鷹的繁殖率調到最高會怎樣?」、「如果植物再生速度變得很慢,生態系能撐多久?」。

總之,我本來只是想做一個科學模擬程式,結果就變成了經營策略遊戲了。玩家在調整滑桿時,其實就是在制定自己的經營方針,透過觀察圖表變化,檢視自己的策略成效。我想這種互動性和策略性,就是學生會玩得入迷的關鍵吧?

2025年6月7日

互動式 L-System 生成器

 自然界中樹木分枝、雪花結晶那樣複雜又充滿規律的圖案是不是可以用一些數學規則來描述和生成呢?








什麼是 L-System?

L-System 最初由匈牙利生物學家 Aristid Lindenmayer 於 1968 年提出,用於模擬植物的生長過程。它本質上是一套符號重寫規則,從一個初始字串(稱為「公理」Axiom)開始,透過迭代應用這些規則,生成一系列越來越複雜的字串。這些字串隨後可以被解釋為繪圖指令,從而產生視覺化的圖形。

關於細節可以看他的書 The Algorithmic Beauty of Plants

L-System 是一套符號重寫系統。想像一下,你有一串初始的符號字串,然後你定義了一些規則,告訴程式如何將字串中的特定符號替換成另一串符號。

我對這個東西有陣子很著迷,所以就寫了一個生成器來玩玩

https://chihhsiangchien.github.io/L-system/index.html

L-System 的核心

公理 (Axiom): 這是 L-System 的起始狀態或初始字串。它通常是一個非常簡單的字串,例如 F 或 F-F-F-F。在我的程式中,你可以在 "Axiom" 輸入框中設定這個初始字串。

規則 (Rules): 這是 L-System 的生成引擎。規則定義了如何將字串中的特定符號(稱為「前驅」predecessor)替換成一個新的字串(稱為「後繼」successor)。 例如,一條簡單的規則可能是: F -> F+F-F 這表示,在每次迭代中,字串中所有的 F 符號都會被替換成 F+F-F。

機率性規則: 允許一個符號根據不同的機率被替換成不同的字串,為圖形帶來隨機性和多樣性。例如: F 0.5 -> F[+F]F (50% 機率) F 0.5 -> F[-F]F (50% 機率)

上下文相關規則 (Context-sensitive): 規則的應用可以取決於符號的「鄰居」是什麼。例如: A < B > C -> X 這表示只有當符號 B 的左邊是 A 且右邊是 C 時,B 才會被替換成 X。

迭代 (Iteration): 從公理開始,程式會重複地將規則應用於現有的字串。每一次完整的應用稱為一次迭代。隨著迭代次數的增加,字串會變得越來越長,越來越複雜。在我的程式中,每點擊一次 "Generate" 按鈕,就會執行一次迭代。


從字串到圖形:海龜繪圖的詮釋

生成了複雜的字串後,我們如何將它變成視覺化的圖形呢?這通常是透過一種稱為「海龜繪圖 (Turtle Graphics)」的機制來實現的。


想像有一隻小海龜在畫布上,它會讀取 L-System 生成的字串中的每一個符號,並根據符號執行特定的動作:

F, G, L, R, Fl, Fr 等: 向前移動一定距離並畫線。

f: 向前移動但不畫線。

+: 向左轉動一個預設的角度。

-: 向右轉動一個預設的角度。

[: 保存目前海龜的狀態(位置和方向),通常用於開始一個分支。

]: 恢復到上一次保存的海龜狀態,通常用於結束一個分支,回到分叉點。

X: 在目前位置畫一個小標記(在我的程式中是個小圓圈)。

你可以透過 "Angle" 輸入框來設定 + 和 - 指令的轉向角度,改變不同圖案的樣貌。

透過這些基本的公理、規則和繪圖指令,L-System 就能生成出千變萬化的圖案。

你覺得哪種顏色叫紅色?紅色範圍的測試

 很久以前我就對一個現象很好奇,男性和女性對於紅色的認知真的有不同嗎?

是不是同樣一種顏色,男生覺得是紅色,但女生會覺得不是紅色呢?口紅的各種色號對男生來說,是不是都叫做紅色呢?我能不能量化的表現出這種對紅色認知的差異呢?

我做了這個程式就是在研究這件事

https://chihhsiangchien.github.io/red-boundary/index.html

進去畫面後,會有一個顏色方塊出現,你覺得它可以被稱為紅色嗎?這個問題會連續問差不多50個。




然後就會畫出一個圖,範圍裡的就是那些你認為的紅色,如果男女有差異,那麼應該會看到女性的覆蓋率低於男性。至於結果如何呢?因為只有測試一些人,所以我也不知道有沒有差別,為了這,我還特別在底下串了firebase,願意的話你可以填一下基本資料讓我知道。


資料就只有收集你的性別和年齡範圍而已,願意的話就幫我填看看。也許等很久很久以後,我就可以把研究成果做出來跟大家分享了。

化石大發現之線上拼圖版本,平板也可以用

 話說很久很久以前,做了化石大發現的活動,後來還用了線上的桌遊網站也做了一個線上版

但其實有些功能無法做,覺得有點可惜,後來今年就自已做了一個線上板,上線使用後,覺得效果很不錯。

連結 https://chihhsiangchien.github.io/fossils/index.html


玩法?就拼圖囉。用個人平板連上網站就可以拼圖了,然後投影出來就可以大家觀摩。其實我有做另一個版本是可以互相交換骨頭的,但是等未來試用過後再來上線。






2025年6月3日

用台灣百年歷史地圖看環境變化

中研院的地理資訊科學研究專題中心有一個台灣百年歷史地圖的專題網站

https://gissrv4.sinica.edu.tw/gis/twhgis.aspx

我教環境變化常常會用到,不過在平板操作上,要用疊圖就有點麻煩

後來它們有一個多視窗比對的,還可以作套疊拉,我覺得就相當適合使用

 https://gissrv4.sinica.edu.tw/gis/twhgis/mapcompare/

那麼在教學上怎麼用?

比方說我們可以看在日治時和現在的地圖比對,你可以看到一百年前你所處的這片土地過去曾經是什麼樣子,是埤塘或是農田?



1904年的臺灣堡圖更可以看到很多細節

更近一點可以看1944年的美軍航照圖,在現在的新竹市位置,寫著TEIKOKU SUGAR REFINERY。找一些歷史資料就會知道這就是帝國製糖所,工廠位置就是現在巨城那邊。
更細緻一點看1945年的美軍繪製臺灣城市地圖,更是有許多有趣的故事點



當然除了這些圖資以外,你還可以找到更多有趣的。我想對地圖有興趣的應該可以在這個網站沉浸非常久(像我)。

Google Earth縮時看群集變化

最近教到群集變化,講到消長、演替,課本上有一張組圖是南投九九峰在地震前後的變化,這讓我想到,也許我可以來用Google Earth作看看。

Google有一個平臺Google Earth Engine,你可以運用這些圖資作一些演算應用,它也有釋出已經渲染好圖片的縮時
你可以看到許多環境在多年的開發發生的過程,像是熱帶雨林的砍伐、都市的擴張、冰河消失等

你把座標移到臺灣也能看到許多不同的變化,我除了課堂上使用外,後來就想,也許我可以來做成一段段小影片,於是我就寫了一個固定範圍截圖的py
還有一個把截圖轉gif和影片的py
檔案都在這

總之就是截圖轉影片這樣

九九峰,關鍵就看921地震前後


頭前溪出海口(原來河口有塊沙洲消失了)



新竹高鐵特區,以前這邊空屋率很高,結果現在變成超貴的地方


竹科


外傘頂洲

新竹市人口變化

大約一個多月前,看到colab有了Gemini進駐,可以用自然語言讓寫出notebook每個cell的py。

心想來試試看讓他幫我把新竹市人的人口統計圖做出來看看

在政府開放平臺上有這項資料 https://data.gov.tw/dataset/67531

一開始我試了最直白的方式就是讓他作圖,不過沒有經過任何結構指引,做出來就是一團亂

後來再經過多種嘗試和多個AI協作,總之也是做出來了,但後來我就沒在colab上使用,改寫成.py,在本機使用。如果遠端的資料庫沒問題,應該是只要我跑一次指令就可以更新出最新的人口圖,希望啦。

專案放在

https://github.com/ChihHsiangChien/PopulationDynamics

未來的目標是希望可以跑一次程式就把想要探索的各地資料作出來,但目前的問題就是各縣市政府的規格文件多樣性很高,即便是同一個縣市可能就有兩種以上的資料格式,就看我願不願意花時間做這種事情了。












2025年6月2日

狼羊兔草的生態模擬互動程式






最近完成了一個自己蠻喜歡的互動模擬程式,主題是生態系裡的能量流動與族群變化。可以直接在網頁上操作:

https://chihhsiangchien.github.io/ecoSimulation/index.html

這個模擬的原始靈感來自 NetLogo 的經典模型 —— Wolf Sheep Predation。不過我後來改了不少東西,慢慢變成了自己覺得比較適合教學的樣子。


教學上的使用流程

這套模擬不只是拿來「玩」,其實在教學上可以設計出很多層次的活動。以下是我使用這個模擬做生態教學時的建議流程:

1. 循序漸進:從簡單系統開始

先只啟用草和羊,讓學生理解基本的族群互動。等理解了,就可以加入狼或兔子等物種,讓系統變得更豐富。

2. 提出假說,再驗證

每次調整參數或設定前,讓學生先預測會發生什麼,再實際模擬來檢驗。

3. 觀察圖表,讀出故事

「族群大小圖」可以看出週期變化;「能量比較圖」則有助於理解營養階層之間的能量流動與損失。

4. 控制變因,清楚比較

引導學生每次只改變一個參數,幫助他們學會控制變因的實驗設計思維。

5. 記錄與分析

記錄設定與結果:包括族群變化曲線、滅絕時間、能量趨勢等。這樣可以進一步討論背後原因。

6. 模型不是現實

提醒學生這只是簡化的模型,現實世界更複雜。有什麼沒有被考慮進來?疾病、遷徙、個體差異?

7. 連結真實案例

例如黃石公園重新引入狼群造成的食物網變化,或外來種造成的生態失衡。


八種教學情境設計(附參數建議與討論方向)

以下是我自己整理出來的幾種教學情境,你可以根據教學主題挑選適合的情境來進行模擬。

情境 1:掠食者與獵物的基本動態(狼 vs 羊)

啟用:有限草(B)、羊、狼
停用:無限草(A)、兔

可以調整:初始族群數量、繁殖率、狼的獲能量

討論重點

  • 族群是否會呈現週期波動?

  • 什麼條件下會導致族群滅絕?

  • 繁殖率、能量效率怎麼影響族群穩定?


情境 2:種間競爭(羊 vs 兔)

啟用:有限草(B)、羊、兔
停用:無限草(A)、狼

調整參數:繁殖率、草再生速度、負荷量

討論重點

  • 誰在競爭中佔上風?為什麼?

  • 改變草的供給會怎麼改變結果?

  • 有沒有可能達到穩定共存?


情境 3:環境負荷與資源限制

啟用:有限草(B)、單一草食動物
停用:無限草(A)、狼、另一草食動物

關注參數:草的覆蓋率、再生速度、負荷量

討論重點

  • 當資源供不應求時,會發生什麼事?

  • 草食動物是否會超載,造成族群崩潰?


情境 4:比較食物品質(無限 vs 有限)

情境 A:啟用無限草(A),設定低能量
情境 B:啟用有限草(B),設定高能量

比較點

  • 哪種情況下族群數量更穩定?

  • 如果加入狼群會怎麼改變局勢?


情境 5:關鍵物種的角色

啟用:有限草(B)、羊、兔、狼
操作:模擬一段時間後移除狼群

觀察與討論

  • 沒有狼之後,草食動物會發生什麼事?

  • 草地會被過度啃食嗎?

  • 狼是生態系裡的什麼角色?


情境 6:能量消耗的影響

設定系統:有限草(B)+ 羊 + 狼
重點參數:基礎耗能 / 繁殖成本

討論方向

  • 能量消耗會如何影響生存與繁殖?

  • 哪些組合導致族群更穩定或崩潰?


情境 7:草食動物的過度繁衍(無掠食者)

啟用:有限草(B)+ 草食動物
停用:無限草(A)+ 掠食者
設定:草食動物負荷量非常高

討論重點

  • 缺乏天敵會造成什麼後果?

  • 這跟某些外來種案例是否類似?


情境 8:多目標捕食者(狼的偏好)

啟用:有限草(B)、羊、兔、狼
調整參數:狼從不同獵物獲能的效率

觀察重點

  • 獲能效率影響狼的「選擇偏好」嗎?

  • 哪一種草食動物族群受到較大壓力?