人物10356 項目5165 室內579 家居及產品163 文章2374 方案1373 攝影781 視頻225 圖書201 讀者來稿 最新評論21,698 所有作品11333 所有圖片153,981
漫談算法設計(computational design)與腳本語言(grasshopper, python)
自從2020.3.28日以來已經開了3期的建筑師編程課(python4rhio), 在課上被問過幾次關于grasshopper與python的區別,因此這次嘗試著從算法設計的方向以及方法論的角度聊聊這方面的事情.
POST?馬海東

作者: 馬海東
時間: 2020.7.31

自從2020.3.28日以來已經開了3期的建筑師編程課(python4rhino), 在課上被問過幾次關于grasshopper與python的區別,因此這次嘗試著從算法設計的方向以及方法論的角度聊聊這方面的事情.

什么是算法設計?

在回答這個問題之前,先聊聊什么是設計? 簡單的一句話設計就是處理內容與形式之間的關系.

1

工業化生產之前,形式美學上的工藝性,如形狀、顏色、材料和紋理等是設計師需要掌握的核心技能。隨著第一次工業化時代的到來,設計師面臨工業化標準化生產模式產生的新內容. 包豪斯(1919-1933),現代主義是對這一情況在形式上應對. 現代主義在今天依然發揮著重要的作用.

但是隨著時代的發展,第二次工業化時代數字化時代到來了, 在全球商業化,數字化時代背景下,設計師要面對的不僅僅是實體的產品,而是用戶需求的解決, 這包括了: 復雜問題的提出,服務流程的設計,目標的達成等等,其工作領域甚至擴展到了與設計無關的領域. 系統控制論和計算機化的方法成為這一時期的一種新的設計形式。這不僅要求設計師有關于外形上的創新,而且在某種意義上也要求設計過程的內部的重組。[1][2][3]

2

在這一語境下,什么是算法設計?

算法設計是設計與計算機科技的融合。計算機與其他人類科技不同的地方是它會思考,中文稱之為電腦.

正因為計算機會思考, 這種思考能力從根本上改變了人們構建交互界面、生產產品、提供服務、或建造建筑的方式。

傳統設計師習慣于使用Sketchup、Rhino和3ds Max, Maya等繪圖工具來實現他們的想法。從一個概念開始,繪圖軟件幫助他們從抽象的概念到具體的表現。這個過程在許多領域都被采用,從工業設計到建筑設計,其最終成果是由設計師的思維驅動而完成的。

而算法設計的設計師對如何設置生成的過程更加感興趣. 在對這個生成過程中, 設計師通過腳本語言與計算機溝通, 用算法來驅動計算機,通過這種方式由計算機輸出最終的設計成果,猶如一個小孩可以慢慢成長成大人一樣, 計算機的智力也在慢慢的成長中. 隨著計算機變的越來越聰明, 算法設計將會在未來的日子里極大地改變商業、文化和社區生活。

編程范式(programming paradigms)

任何傻瓜都能寫出計算機能理解的代碼。優秀的程序員寫的代碼,人類可以理解。
——馬丁-福勒

當你開始編程的時候, 你期望通過計算機解決你的問題, 在這里存在三個角色: 你, 你的問題, 計算機. 所謂編程程范式就是你與計算機一起來解決你的問題或任務的方法。

你與計算機對話的媒介是編程語言,編程范式[5]作為方法, 它會使用一些編程語言來解決你的問題. 到目前為止世界上已經有幾千種的編程語言,與自然界的語言相比,這么多的編程語言一般都大同小異,它們都需要遵守一些方法論或策略, 這些方法論被稱之為范式.最主要的兩大類范式為: 命令式范式與聲明式范式.

那在實施層面上具體是如何做到呢?

目前主流的計算機系統的軟件及應用的架構是分層的,也就是下層做一些支持的工作,暴露接口給上層調用, 這種分層的方式是相對的抽象的分層, 在構架的設計上每一層自己也可以分為很多層.

3

在這一架構中, 內核(kernel)是計算機操作系統最核心的部分, 軟件部分的最底層, 其本質就是用“變量定義+順序執行+分支判斷+循環”所表達的邏輯過程對計算機硬件進行管理與調用。計算機應用的最上層是實現人類社會的某種功能, 或某項任務.

籠統的講,編寫程序就是通過計算機語言及層與層之間定義的接口進行調用并解決你的問題(對算法設計來說就是生成設計成果)。調用的策略稱之為范式,越接近現實問題描述與表達就越接近“聲明式”(declarative)范式,越接近計算機如何執行過程就越叫做“命令式”(imperative)范式。

抽象的講: 當接口越是在表達“要什么”,就是越聲明式;越是在表達“要怎樣”,就是越命令式。

大家如果去線上數據庫查過數據, 就會發現這是典型的在表達要什么(數據),而不是表達怎么弄出我要的數據,所以它就很“聲明式”。至于如何弄出數據就由下一層的應用或程序來完成.

簡單的說,越是聲明式,越簡單可讀,越意味著下層要做更多的東西來協助你的實現. 這也意味著越受到下一層的限制。越是命令式,意味著上層對下層有更多的操作空間,更大的自由度,可以按照自己特定的需求要求下層按照某種方式來處理。

當你運用范式的思想去編程的時候, 在構建自己的代碼的時候,為了結構的清晰可讀,你也一樣在架構上可以把代碼分層,層與層之間的接口盡量聲明式。這樣你的代碼自然在上一層主要描述從人的角度需要什么, 下一層用計算機邏輯實現人的需要。

4

在這兩大范式里面又可以細分為更詳細的具體場景下的范式.

其中在后面的論述中要提到grasshopper的這種圖表式編程范式叫做數據流編程(data-flow paradigm)

絕大部分的編程語言是文本的形式, 通常一種語言可以實現多種范式.

就python來講可以實現:面向對象編程, 過程式編程, 函數式編程.[4]

腳本語言: 設計師與計算機的對話的接口

自世界上第一臺通用計算機“ENIAC”于1946年誕生以來, 軟件工程師們已經為設計人員開發出大量的軟件, 單單從adobe,autodesk, dassault等巨頭軟件公司旗下就有大量的軟件. 正如上面提到的那樣, 這些軟件大同小異的都是為繪圖而存在的. 與此同時在工業化的生產流線的各個領域同樣也有其他各類專業軟件. 而腳本語言可以在這些軟件應用層之上再建一層用戶腳本層, 通過編寫腳本把軟件為你開放的接口關聯起來為你的設計服務.

通過腳本語言, 設計師可以生成設計, 開發出設計原型,并快速迭代.

這類算法設計需求腳本語言具有以下計算機語言的特性:

● 能夠在宿主軟件(即腳本語言的下一層)中快速組裝各種設計組件. 搭建生成設計的框架.

● 在組裝過程中能夠隨時更改設計條件或設計流程, 快速迭代.

● 可以充分利用計算機已有的海量算法,快速判斷這些算法是否可以用于設計原型中.

● 基于特定的需求, 能夠自己編寫算法解決問題

以下對grasshopper與python這兩種語言哪個能夠更好的達到以上四點快速設計原型方面的要求進行介紹并簡單比較優劣.

Grasshoppper: 數據流范式

5

grasshopper是屬于數據流范式[6], 也就是聲明式范式中的一種類型. 通過上圖右邊的圖表方式進行腳本的搭建來實現上圖左邊的功能, 該范式關注數據的流動, 把腳本分解為一系列的數據連接。明確定義輸入和輸出,而它們的功能組件(如上圖中的 + / *)就像黑盒子一樣(使用者不需要關注腳本是如何實現這些盒子的功能, 使用者需要告訴腳本你要什么樣的盒子就可以), 當一個組件的所有輸入條件都成為有效的時候, 腳本就會自動運行并返回結果給你.

優勢:

這種腳本語言本質上是并行的(即可以多個組件同時運行,沒有關聯的各組構件之間不會相互影響干擾), 用戶可以同時啟動多組程序,進行多方案的比較與分析, 能夠快速組裝, 更改方便,快速迭代. 這種高效率的人機交互方式為快速的進行設計原型開發提供極大的方便.

grasshopper另外一個優勢就是,聲明式的范式的思維更接近人類語言的思維,上手容易,表述清晰,與python的學習曲線相比grasshopper的學習曲線更短,幾個小時之后可能就可以上手了.

劣勢(與python比較)

可擴展性弱, 所有聲明式的語言都受制于下層接口能提供的可聲明的功能的多少, 當你要的東西下層接口沒法提供的時候, 在這里就是你的黑盒子里面沒有你要的功能的時候,你就沒法繼續搭建下去了.

為了解決這個劣勢, grasshopper提供了用python,c#,vbscript的擴展,通過這些語言可以編寫組件(黑盒子), 用戶可以自己親手編寫, 也可以通過社區下載他人已經編寫好的組件.

python:多種范式編程

Python是一種通用的腳本語言,由Guido van Rossum 于1991創建, Python的設計理念強調代碼的可讀性。旨在幫助程序員為小型和大型項目寫出清晰的邏輯代碼。

優勢:

● Python擁有海量的第三方算法庫,為各種任務的提供大量的解決工具,因此可以在設計過程中快速組裝,快速修改,快速迭代.

● Python支持多種編程范式。面向對象編程和結構化編程得到了充分的支持,它局部支持了函數式編程. 能夠自己為特定的任務編寫特定的算法, 這是純grasshopper數據流范式所沒法做到的.

● 強大的開源社區, 幾乎與python相關的任何問題你都可以快速的在社區找到答案.

從以上可以看出python在編程對下層接口的調用能力是非常強大的, 這種多范式的編程語言, 幾乎只有你想不到, 沒有它python做不到的能力.

劣勢(與grasshopper比較)

一圖勝千言, 在易讀性方面雖然python在語法上已經做到極簡與易讀,但是與grasshopper這種圖表的方式比較起來還是可讀性要差一點.

但是這也是相對的,當你要解決的問題稍微復雜點的時候, 用grasshopper這種聲明式的編程方式去模擬命令式的編程,其組件之間的的連線會變的非?;靵y. 由于問題的復雜而使得grasshopper越來越不易讀

6

反而python這種可以通過分層把復雜的問題分解為可以聲明的組件與組件內部的命令執行, 這種編程思維會簡化問題的復雜度,加快開發.

7

grasshopper與python在人機交互方面的比較

grasshopper數據流的編程范式,天生擁有并行并發優勢,同時圖像化的用戶界面更是在交互上擁有優勢,在快速更改設置,快速迭代方面顯得非常明顯.

這方面基于rhino環境的python是無法與grasshopper相提并論的. 但是python本身在其他的設計軟件中一般會提供交互編程環境(REPL), 如revit, blender等軟件,通過REPL可以快速的實時的查看設計成果, 并快速修改迭代.

對于rhino來說, 只能通過安裝REPL擴展來改善交互環境.

8

reference:
https://uxdesign.cc/embracing-the-power-of-computational-design-3bb18ce98ffc
https://qz.com/1585165/john-maeda-on-the-importance-of-computational-design
https://www.interaction-design.org/literature/topics/design-thinking
https://www.geeksforgeeks.org/programming-paradigms-in-python
https://en.wikipedia.org/wiki/Programming_paradigm
http://www.cs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/DataFlowProgrammingLanguages.pdf
http://www.globalnerdy.com/2019/12/10/worth-watching-videos-on-programming-paradigms-and-object-oriented-vs-functional-programming/

相關文章

建筑師為什么要會python編程?
Caad4Rhino:建筑繪圖工具插件
Rhino及Bob McNeel的故事(轉載)
計算機曲線spline簡史(轉載)

建筑師編程課

ikuku精選課 Python4Rhino 建筑師編程課 2020.8.16開始線上直播!講師:馬海東

9

 

2020.07.31
請帖個標簽,寫個點評吧!
標簽(多個標簽用逗號隔開) 登錄可保存標簽
綁定新浪微博可評論

小貼士


標簽收藏可以有利于您以后的內容分類管理
->進入收藏管理頁。


blog comments powered by Disqus
湖北新11选5走势图遗漏