基於興趣,碩士論文我是作 Bio-machine modeling 方面的題目,在歸類上屬於人造生命(Artificial Life, ALife)的範疇,選擇的 target 是神經細胞的生長、發育。以下就先簡述一下整個概念:
這裡並不是要詳盡地模擬腦部的發育和功能執行,而是提出經過大幅簡化的模型,以利電腦模擬,及供我們驗證假設之用。經過長期考量過各種可能方案後,我決定以 Cellular Automata 來模擬神經細胞生長的環境。
考慮在一個由 CA 舖成的空間中,我們在一些選定的位置,滴上特定的化學物質,於是這些化學物質就會由滴定的點,向四周擴散。再考慮到真正的腦,對個別神經細胞而言,並非完全開放的空間,所以我們也在 CA 舖成的空間中設置各種障礙,來對空間作某種區隔。於是我們的神經細胞除了有化學的土壤外,現在也有了障礙的地形。整個生長環境豐富了許多。
有了生長環境之後,該是時候讓細胞在環境中過活了,於是我們就隨手一灑,這些神經幹細胞就被灑到 CA 構成的空間中了。既然有了前面土壤的比喻,就讓我們稱這個“灑”的動作為“播種”吧! ^__^
神經幹細胞的生長也遵循 automata 的模式。完全因應環境中的化學梯度而長出軸突(axon)和樹突(dendrite)……環境中的化學物質有其自然的損耗率、神經細胞的成長也會消耗掉 大量的化學物質……我們可以在其中模擬神經細胞的成長、競爭與凋亡。並觀察最後長成的神經網路拓僕。
~~
為了完成這個模擬,我當然要先 survey 一下現成的東西,決定一下要以哪些工具來達成想要的效果。雖然在大規模的模擬時,在效率的考量下,比較傾向於使用 C++ ;最後我還是決定用 Java 來實作,因為要縮短開發時程下,執行效率的考量就顯得比較次要了。
在決定用 Java 實作後,我 survey 了許多 Java 下的 agent software toolkits 。在它們當中, Swarm 雖是該領域的元老,它的接繼者 Repast 卻比較合我胃口。但由於 Repast 的架構還是顯得龐雜,且我要的許多效果它也沒提供,索性就 參考一下 Repast 的作法後,自己重新開發一套合用的 toolkit 。
為了確認每一步都沒出錯,也為了好玩,在開發過程中我同時利用自己的 toolkit 撰寫了許多測試用的小程式:

左邊那個是用來 Demo 在物理上有名的布朗運動(Brownian Movement)。程式一開始會把固定數量的化學分子置於中央,分子們很快就會以 Random Walk 的方式擴散開來,其中的色溫提示我們每個位置的分子數量的多寡。
右邊那個我管它叫做 Diffusion Sun 。化學分子一開始也是置於中央,隨著每個 time tick 的推進,這個 Demo 程式會繼續滴上給定數量的分子作為補充。在給定的自然分子損耗(lose)及不斷地添加分子間會有個動態平衡,造成一個形狀像抖動的太陽般的圖像,故稱之。
接下來,我們就繼續觀摩一下這個 toolkit 還提供了甚麼:

很明顯地,右邊那兩個綠底、裡面畫有 sine 波的東東,就是示波器(socillograph)的 scope 。比較特別的是這裡的示波器原則上是無限量供應的,只要點選 toolbar 上面代表探針(probe)的 icon 即可。值得一提的還有,這裡的探針量測的不是單純的點的訊號,而是一個指定的範圍。我們可以在左圖的 Imaging 畫布上看到一個虛線框住的範圍,它對應到右上那個 scope ,以這個例子來說,scope 顯示的是整個框框內所有點的平均訊號,實際上我們可以在上面顯示其他更有用的統計。
最後,我這裡也附上 SineSun 的 jar 檔,有興趣的話,諸位看官也可以自行玩玩看 :)
Saturday, July 10, 2004
The Neuron Farm
Labels: agent, ALife, brain, Java, neuron, oscillograph, probe, project, scope, simulation, software
Posted by
York
at
3:24:00 PM
|
comments (0)
Tuesday, June 17, 2003
Session Initiation Protocol
就 VoIP 網路而言, SIP是一個非常有彈性而且功能強大的通訊協定, SIP 能夠更有力的支援許多智慧型的電話網路服務及各種使用者平台,並且能夠快速而有效的發展許多先進的功能。
這次是要實作 SIP protocol 的 redirect server 。我決定讓它能夠支援 multi-user ,每次由 user end 那 send 出的 request 都會在 server 上由個別的 Thread 處理。
我將整個架構切割成 SipStack, SipProvider, SipListener 等三個 class 或 interface 。
- SipStack 將底層 network protocol 封裝起來,供 SipProvider 使用。
- SipProvider 則提供基本的 SIP message 傳遞及分送。並將收到訊息後的對應動作委託給SipListener 處理。
- SipListener 是一個 interface ,用來傾聽 SipProvider 送來的 event ,並處理。
此外, SipHeader 被設計來剖析 SIP message 的 header。
最後, RedirectServer 則 implements 了 SipListener 這個介面。 RedirectServer 也處理了所有關於 SIP redirect server 的高階協定。
由於要支援 multi-thread ,且軟體以 OO設計,再加上此 SIP 是 application layer 的 protocol ,所以決定以 Java 語言實作。
若只滿足於達到作業的功能要求,程式部分還滿單純的。唯之前並未真正接觸過網路程式設計,所以費了一翻功夫在相關程式寫法的摸索。
此外,我還為本程式立下 reusable 和 extendable 的目標。所以在分析及設計上費了一番功夫。
這個 SIP AP 的底層是採用 UDP 協定。原則上,在目前設計的架構下我們可以很容易地切換到 TCP 。也可以很容易地改寫成其他 SIP AP 。
沒力氣再掰下去了,有興趣的話,這裡也附上原始碼。請自行參照。
Labels: Java, project, protocol, SIP, software, VoIP
Posted by
York
at
12:17:00 AM
|
comments (2)




