2012/03/28
最近持續駕訓班,工作營,論文三頭並進的狀態,
想寫關於淡水吃的部落格在第一篇後仍然處於停滯的狀態,
自己依然是想做的很多,做了的卻很少的情況.
我想當人有不斷的長短期目標時,
生活其實永遠都是很充實而忙碌的.
今天的FB被文林苑事件給佔滿了,
也許這樣說有點市儈或冷血,
但我覺得當你沒辦法站到一定的位置時,
說難聽點,你除了出現抗議之後,
最後你仍然改變不了什麼,
事件只會被時間沖淡罷了,
當下次又發生時,你又會去搖旗吶喊並再次失落.
又有多少人敢現在設目標說,
"幹!老子當不了總統也要當到台北市長,到時我說了算!"
也許最後至少還有機會當個市議員或什麼都發局長,
我想是很少很少的,
甚至可以說沒有.
因為當它根本不是你的夢想,
那它最後只會是時事之後轉為歷史,
最後出國唸書,考到建築師,賺錢等等都還是排在它前面.
這一直是我們的通病,
對別人的委曲很憤慨,對自己的人生很放鬆,
自己沒管好就先去管別人.
我想與其不斷的想聲援什麼卻心有餘而力不足,
還不如想想如何最快爬到你想要的位置,
到時你才真的在關心你認為錯的事,做你認為對的事,
任何事情需要的不只是熱情,
也是要有子彈的.
peace
Tien
ps.
論文終於有假性80頁了,終點線儘管還是細細的一條,
但看到了就有抓住的可能 :)
2012/03/17
2012/03/10
Rabbit : Cellular Automata 細胞自動機 (grasshopper教學)
到現在還有寫教學的動力我想這都要規功於過去學長是怎麼幫我的,
無論是三小阿振先邦青澤Gary吉甫大頭到大大大大(周星馳口吻)~學長CCC,
一路走來從skp到現在grasshopper,沒有他們的幫助,我想我現在也不會走到這裡.
現在我好不容易懂了一點點東西,總覺得自己也應該做些什麼,
有鑑於小綠說我看起來很兇,所以在我預設大家不敢問我問題的情況下,
還不如訴諸武力文字來讓大家可以直接透過blog的方式來了解一些簡單的東西.
認識我的一定會覺得平常我瘋瘋癲癲的怎麼突然給它感性了起來,
幹,我也是有血有淚有屁股的好男兒好不好!
好了,再講下去一定又是冗長的感謝文,又不是得普力茲克.
讓我們進入細胞自動機的正題.
-------------------------------------------------------------------------------------------------------
細胞自動機是我在大四時就碰過的一個演算法,
英文名字叫Cellular Automata之後都會以CA簡稱,請勿以為是California.
那時要用CA可是得寫Rhinoscript的年代,
到現在可以透過gh簡單的接一接就可以用真的是要心懷感激.
如果你想知道詳細,請點進以下連結去了解更多,
細胞自動機介紹
如果只想簡單知道它,那就看下圖.
基本上細胞自動機是以網格系統下去跑的一種演算法,
每個網格都可視為一個細胞,而身處在網格系統下,
身為一個細胞其週遭一定包圍著八個細胞,
而這也將影響每個細胞本身的狀態.
/
首先,你要知道每個細胞本身可擁有的狀態只分生與死,
以電腦語言來看又可看做1與0或true與flase.
/
而影響這些細胞生死的規則可分為兩種,
誕生規則(Born rule)與存活規則(Survive rule),
誕生規則只適用於死細胞,其設定為,
當本體為死細胞時,
其週遭八個細胞有N個為活時,則本體在運算後於下一代時誕生.
也就是說,你可以設定
當本體為死細胞時,
其週遭八個細胞有2個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有4個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有5個為活時,則本體在運算後於下一代時誕生.
因此只要本體為死細胞,
但它週遭八個細胞有2或4或5個細胞為活細胞時,
本體於運算後在下一代會變成活細胞.
同理,
存活規則只適用於活細胞,其設定為,
當本體為活細胞,
其週遭八個細胞有N個為活時,則本體在運算後於下一代時維持活狀態.
也就是說,你可以設定
當本體為活細胞時,
其週遭八個細胞有1個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有7個為活時,則本體在運算後於下一代時誕生.
因此只要本體為活細胞,
但它週遭八個細胞有1或7個細胞為活細胞時,
本體於運算後在下一代會維持為活細胞,
反之若有0,2,3,4,5,6,8個細胞為活細胞時,
本體於運算後在下一代會變成死細胞.
/
透過這些兩種規則的設定,
我們會得到無法估計的演算結果,
其中最有名的規則即是John Horton Conway的Game of life
Game of life 解說
其規則設定分別為
誕生規則, 當本體為死細胞時,
其週遭八個細胞有3個為活時,則本體在運算後於下一代時誕生.
存活規則,
當本體為活細胞,
其週遭八個細胞有2或3個為活時,則本體在運算後於下一代時維持活狀態.
有興趣的可在最後透過gh的設定去跑跑看結果.
/
在知道基本規則後,我們就要解說如何在gh內用Rabbit去設定CA.
我會先介紹2D再講1D的.
首先整個gh會拆為六個部分,
a部分為先畫出一網格系統,並取各網格中點為細胞,
b部分為任意選一部分的細胞設定為活細胞,
其餘則為死細胞,這是在跑CA的必須設定,一初始狀態.
因此這些被選出設定為活細胞的點必須input到rabbit CA內的
custom state configuration電池,定義它們為活細胞.
接著c部分則是設定誕生規則與存活規則,
我們可以看到它是以slider為設定,
而每個細胞週遭只有8個細胞,
因此slider範圍我們要設成整數的0~8.
B input是輸入誕生規則,
S input是輸入存活規則,
在此我們以Game of life的設定去輸入.
用的是rabbit CA內的Life-like cell電池.
最終,a部分所有的細胞,b部分要被定義為活細胞的細胞,c部分規則的設定,
全部都會各別接上rabbit CA裡最重要的電池,
2D regular cellulat automaton model,也就是d部分.
a接P input,b接SC input,c接C input.
當CA已經設定完了,
我們剩下要做的只剩如何讓它開始運算跟把結果輸出.
在e部分即是做讓它開始運算的步驟,
使用rabbit CA內的CA evolver電池,
t input代表運算幾次,CA input則是將前面d部分輸入的地方.
t input我們可以單純接一個slider,用手動拉slider去運算.
如果今天我們是要看最終結果那還好,
但如果你要看運算1000次的每次結果呢,
那你不是得慢慢拉slider拉到死?
因此你可以用rabbit CA內的Discrete time電池.
它的r input需接boolean,
t output則去接CA evolver的t input,
另外還需用一個timer去設定Discrete time每次運算的間隔時間,
當timer啟動時它就自動開始運算,算到你按停為止.
最後在f部分,靠的是rabbit CA的list cell去將所有運算結果輸出
將e部分CA evolver的m output接到c input,
在f input則輸入true或false,true是輸出活細胞的運算結果,false是輸出死細胞的運算結果.
list cell的P和t ouput最終將可被拿來處理,看要畫圓畫方畫大餅看你開心就好. :)
P output是每次運算出的點,t output是第幾回的運算.
如果還不太懂可以抓gh檔自己開來用用看.
我是2D CA的gh檔,抓我抓我.
/
1D CA則是更簡單的原理,不像2D CA有上下左右的關係,
1D CA只有自身與左右的關係,因此只有在規則輸入的地方與2D CA不同.
你所看到自rabbit CA內1D CA使用的elementary cell電池,
它input的那些什麼010,101,110,001.....
都是在講細胞自身與左右細胞的關係可能性.
例.
010代表自身細胞為活,左右細胞為死
101代表自身細胞為死,左右細胞為活
110代表自身細胞為活,左細胞為活,右細胞為死
001代表自身細胞為死,左細胞為死,右細胞為活
而input進這些0,101,110,001的boolean,
即代表當本身細胞為某狀態時其經運算後再下次會死或維持活狀態.
如果還不太懂沒關係,一樣可以抓gh檔自己開來用用看.
我是1D CA的gh檔,抓我抓我.
/
大概介紹到這,
至於這本體與周圍相對關係的演算法到底可以幹什麼,
那就看你怎麼去定義規則,然後成為你自己的演算法.
:)))))
以上.
Tien
ps.
別忘記抓rabbit,要不然你開了我的gh def也沒用,
抓了之後將rabbit.gha放到gh的components資料夾下,tks.
我是一隻小白兔,抓我抓我.
無論是三小阿振先邦青澤Gary吉甫大頭到大大大大(周星馳口吻)~學長CCC,
一路走來從skp到現在grasshopper,沒有他們的幫助,我想我現在也不會走到這裡.
現在我好不容易懂了一點點東西,總覺得自己也應該做些什麼,
有鑑於小綠說我看起來很兇,所以在我預設大家不敢問我問題的情況下,
還不如訴諸
認識我的一定會覺得平常我瘋瘋癲癲的怎麼突然給它感性了起來,
幹,我也是有血有淚有屁股的好男兒好不好!
好了,再講下去一定又是冗長的感謝文,又不是得普力茲克.
讓我們進入細胞自動機的正題.
-------------------------------------------------------------------------------------------------------
細胞自動機是我在大四時就碰過的一個演算法,
英文名字叫Cellular Automata之後都會以CA簡稱,請勿以為是California.
那時要用CA可是得寫Rhinoscript的年代,
到現在可以透過gh簡單的接一接就可以用真的是要心懷感激.
如果你想知道詳細,請點進以下連結去了解更多,
細胞自動機介紹
如果只想簡單知道它,那就看下圖.
基本上細胞自動機是以網格系統下去跑的一種演算法,
每個網格都可視為一個細胞,而身處在網格系統下,
身為一個細胞其週遭一定包圍著八個細胞,
而這也將影響每個細胞本身的狀態.
/
首先,你要知道每個細胞本身可擁有的狀態只分生與死,
以電腦語言來看又可看做1與0或true與flase.
/
而影響這些細胞生死的規則可分為兩種,
誕生規則(Born rule)與存活規則(Survive rule),
誕生規則只適用於死細胞,其設定為,
當本體為死細胞時,
其週遭八個細胞有N個為活時,則本體在運算後於下一代時誕生.
也就是說,你可以設定
當本體為死細胞時,
其週遭八個細胞有2個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有4個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有5個為活時,則本體在運算後於下一代時誕生.
因此只要本體為死細胞,
但它週遭八個細胞有2或4或5個細胞為活細胞時,
本體於運算後在下一代會變成活細胞.
同理,
存活規則只適用於活細胞,其設定為,
當本體為活細胞,
其週遭八個細胞有N個為活時,則本體在運算後於下一代時維持活狀態.
也就是說,你可以設定
當本體為活細胞時,
其週遭八個細胞有1個為活時,則本體在運算後於下一代時誕生.
或
其週遭八個細胞有7個為活時,則本體在運算後於下一代時誕生.
因此只要本體為活細胞,
但它週遭八個細胞有1或7個細胞為活細胞時,
本體於運算後在下一代會維持為活細胞,
反之若有0,2,3,4,5,6,8個細胞為活細胞時,
本體於運算後在下一代會變成死細胞.
/
透過這些兩種規則的設定,
我們會得到無法估計的演算結果,
其中最有名的規則即是John Horton Conway的Game of life
Game of life 解說
其規則設定分別為
誕生規則, 當本體為死細胞時,
其週遭八個細胞有3個為活時,則本體在運算後於下一代時誕生.
存活規則,
當本體為活細胞,
其週遭八個細胞有2或3個為活時,則本體在運算後於下一代時維持活狀態.
有興趣的可在最後透過gh的設定去跑跑看結果.
/
在知道基本規則後,我們就要解說如何在gh內用Rabbit去設定CA.
我會先介紹2D再講1D的.
首先整個gh會拆為六個部分,
a部分為先畫出一網格系統,並取各網格中點為細胞,
b部分為任意選一部分的細胞設定為活細胞,
其餘則為死細胞,這是在跑CA的必須設定,一初始狀態.
因此這些被選出設定為活細胞的點必須input到rabbit CA內的
custom state configuration電池,定義它們為活細胞.
我們可以看到它是以slider為設定,
而每個細胞週遭只有8個細胞,
因此slider範圍我們要設成整數的0~8.
B input是輸入誕生規則,
S input是輸入存活規則,
在此我們以Game of life的設定去輸入.
用的是rabbit CA內的Life-like cell電池.
最終,a部分所有的細胞,b部分要被定義為活細胞的細胞,c部分規則的設定,
全部都會各別接上rabbit CA裡最重要的電池,
2D regular cellulat automaton model,也就是d部分.
a接P input,b接SC input,c接C input.
當CA已經設定完了,
我們剩下要做的只剩如何讓它開始運算跟把結果輸出.
在e部分即是做讓它開始運算的步驟,
使用rabbit CA內的CA evolver電池,
t input代表運算幾次,CA input則是將前面d部分輸入的地方.
t input我們可以單純接一個slider,用手動拉slider去運算.
如果今天我們是要看最終結果那還好,
但如果你要看運算1000次的每次結果呢,
那你不是得慢慢拉slider拉到死?
因此你可以用rabbit CA內的Discrete time電池.
它的r input需接boolean,
t output則去接CA evolver的t input,
另外還需用一個timer去設定Discrete time每次運算的間隔時間,
當timer啟動時它就自動開始運算,算到你按停為止.
最後在f部分,靠的是rabbit CA的list cell去將所有運算結果輸出
將e部分CA evolver的m output接到c input,
在f input則輸入true或false,true是輸出活細胞的運算結果,false是輸出死細胞的運算結果.
list cell的P和t ouput最終將可被拿來處理,看要畫圓畫方畫大餅看你開心就好. :)
P output是每次運算出的點,t output是第幾回的運算.
如果還不太懂可以抓gh檔自己開來用用看.
我是2D CA的gh檔,抓我抓我.
/
1D CA則是更簡單的原理,不像2D CA有上下左右的關係,
1D CA只有自身與左右的關係,因此只有在規則輸入的地方與2D CA不同.
你所看到自rabbit CA內1D CA使用的elementary cell電池,
它input的那些什麼010,101,110,001.....
都是在講細胞自身與左右細胞的關係可能性.
例.
010代表自身細胞為活,左右細胞為死
101代表自身細胞為死,左右細胞為活
110代表自身細胞為活,左細胞為活,右細胞為死
001代表自身細胞為死,左細胞為死,右細胞為活
而input進這些0,101,110,001的boolean,
即代表當本身細胞為某狀態時其經運算後再下次會死或維持活狀態.
如果還不太懂沒關係,一樣可以抓gh檔自己開來用用看.
我是1D CA的gh檔,抓我抓我.
/
大概介紹到這,
至於這本體與周圍相對關係的演算法到底可以幹什麼,
那就看你怎麼去定義規則,然後成為你自己的演算法.
:)))))
以上.
Tien
ps.
別忘記抓rabbit,要不然你開了我的gh def也沒用,
抓了之後將rabbit.gha放到gh的components資料夾下,tks.
我是一隻小白兔,抓我抓我.
2012/03/07
2012/03/06
Galapagos (Grasshopper教學)
真是非常之久沒有打任何教學,
畢竟我只喜歡簡單的元素東拼西湊出複雜的東西,
太難的我只能看一看拍拍手.
相對之下這些簡單的元素也就是我會的技術實在是有點粗淺,
兩三句就能帶過的東西導致教學什麼的根本打不出來.
相較去年瘋的processing,我今年則在瘋grasshopper,
而在論文某些需求下,我一直在關注一個會自動計算的grasshopper電池,
Galapagos(簡稱Gala)
之前看了David的介紹之後,那看起來好複雜(好帥)的運算已經把我嚇跑一回,
Galapagos 主頁
但又在論文的某些需求下,
我只好再度硬著頭皮去了解它.
原來這只有兩個input的電池原來他媽的根本是在狐假虎威啊~~~~~
在簡單解說之前,你只要記得一句話,
"Gala是一個將結果推到極值(maximum or minimum)的電池"
/
C部份則是讓每個點在x,y軸各可在正負30內移動,
每個點有兩個slider,9個點即有18個slider,
這18個slider則會全數接到gala上的genome,
因為關係到我們稍後所要求的結果.
此時本來設9個點的範圍已經不需要了.
畢竟我只喜歡簡單的元素東拼西湊出複雜的東西,
太難的我只能看一看拍拍手.
相對之下這些簡單的元素也就是我會的技術實在是有點粗淺,
兩三句就能帶過的東西導致教學什麼的根本打不出來.
相較去年瘋的processing,我今年則在瘋grasshopper,
而在論文某些需求下,我一直在關注一個會自動計算的grasshopper電池,
Galapagos(簡稱Gala)
之前看了David的介紹之後,那看起來好複雜(好帥)的運算已經把我嚇跑一回,
Galapagos 主頁
我只好再度硬著頭皮去了解它.
原來這只有兩個input的電池原來他媽的根本是在狐假虎威啊~~~~~
在簡單解說之前,你只要記得一句話,
"Gala是一個將結果推到極值(maximum or minimum)的電池"
/
首先你要知道電池兩個input要接什麼進去,
你一定會問,哪有東西是只in不out的,
我跟你說,以後你的錢投進股票市場後也是只in不out的.
寫到這裡講到in & out讓我不禁想起在加州地區吃到會漏尿的in n' out連鎖漢堡店,
如果它有開在淡水絕對會進我的淡水米其林菜單裡,
少說會給它個2.9顆星,因為我媽說做人不能給人家滿分,
凡事要留有後路,萬一以後還有能幹掉in n' out的餐廳出現時,我還有機會給人家個2.95顆星.
我想同理可以應證到老師給我們打的設計分數,
老師總怕以後會有把柯比意踩在腳下的天才學生出現,
因此給我們拿個6,70分實在是用心良苦,
想到這裡我不禁淚流滿面無法自主.
不小心離題了,讓我們重歸正軌.
以我現在的理解,genome跟fitness絕對都要以數字input進去.
genome意思是基因組,
也就是說,input進來的東西都是無數的基因,
透過不同基因的組合來運算結果,
也因此,可以調整的slider是用來input進genome的,
它可以連接數個slider,只要這些slider會影響你所求的結果.
當然我想是有機會將true,false轉化為1,0做類型學之類的篩選.
fitness本來是指適合值,但在這應該說是最大值,
是把genome內無數slider互相調整所得到的不同結果送進gala內驗證.
我知道聽起來有點玄,沒關係,
我們會透過簡單的gala案例來告訴你如何用它.
首先整個案例拆成5部份.
A部份做的是在一固定範圍內隨意設9個點,
B部份則是將每個點獨立出來好方便之後操作
C部份則是讓每個點在x,y軸各可在正負30內移動,
每個點有兩個slider,9個點即有18個slider,
這18個slider則會全數接到gala上的genome,
此時本來設9個點的範圍已經不需要了.
D部分是我們最終要求的結果,
透過delaunay把各點連成一三角網絡,
而我希望gala能幫我算出如何讓各點在正負30的移動範圍下,
讓所有線段加起來的總長達到最大,
當然透過求得所有線段總長最大值,其所框出的面積也應會最大.
當然透過求得所有線段總長最大值,其所框出的面積也應會最大.
因此應把求所有線段總長的結果連到gala的fitness.
連點gala電池兩下後我們即可看到這畫面,
點solvers下的start solver即可看到gala開始運算,
如果你沒有設定一運算時間,它會一直跑如圖.
但你只要看運算結果差不多達到一致性時,
即可手動按下stop solver.
最終我們將可看到三角網絡的最大延展,
當然這我大概跑了5分鐘不到,結果可能不是最正確的但已經相近.
我們可以看到前後的差別,
本來的5邊形延展後成為4邊形.
我們也可以看本來的點跟延展後的點的相對位置,
紅為運算前,藍為運算後.
/
到這我想你應該大概知道gala基本上是幹麻的,
透過它我們可以去求可以被量化去最大效益的結果,如視野,面積等等.
當然也可透過diva或geco的搭配去讓量體在每次形變的時候去跑熱量或光照,
去求最終能把結果最大化的答案.
更進階的用法是靠record功能去做我們常可看到Zaha或OMA放了一堆的高樓模型study.
點這看Genome Database
當然我也只是剛摸,所以galapagos跟其他電池搭配的combo絕對不止能做到這樣,
我想做urban planning應該也很有機會,端看你怎麼去用它.
以上.
範例檔請至此下載
Tien
連點gala電池兩下後我們即可看到這畫面,
點solvers下的start solver即可看到gala開始運算,
如果你沒有設定一運算時間,它會一直跑如圖.
但你只要看運算結果差不多達到一致性時,
即可手動按下stop solver.
最終我們將可看到三角網絡的最大延展,
當然這我大概跑了5分鐘不到,結果可能不是最正確的但已經相近.
我們可以看到前後的差別,
本來的5邊形延展後成為4邊形.
我們也可以看本來的點跟延展後的點的相對位置,
紅為運算前,藍為運算後.
/
到這我想你應該大概知道gala基本上是幹麻的,
透過它我們可以去求可以被量化去最大效益的結果,如視野,面積等等.
當然也可透過diva或geco的搭配去讓量體在每次形變的時候去跑熱量或光照,
去求最終能把結果最大化的答案.
更進階的用法是靠record功能去做我們常可看到Zaha或OMA放了一堆的高樓模型study.
點這看Genome Database
當然我也只是剛摸,所以galapagos跟其他電池搭配的combo絕對不止能做到這樣,
我想做urban planning應該也很有機會,端看你怎麼去用它.
以上.
範例檔請至此下載
Tien
2012/03/05
訂閱:
文章 (Atom)