|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| assignment.md | ||
README.md
多代理系統
實現智慧的一種可能方式是所謂的湧現式(或協同式)方法,這種方法基於一個事實,即許多相對簡單的代理的組合行為可以導致整個系統表現出更複雜(或更智慧)的行為。理論上,這種方法基於集體智慧、湧現主義和進化控制論的原則,這些原則認為,高層次的系統在適當地由低層次系統組合時,會獲得某種附加價值(即所謂的超系統轉換原則)。
課前測驗
多代理系統的方向在1990年代隨著互聯網和分散式系統的發展而在人工智慧領域中興起。經典的人工智慧教科書之一《人工智慧:現代方法》從多代理系統的角度探討了經典人工智慧的觀點。
多代理方法的核心是代理的概念——一個生活在某個環境中的實體,它可以感知並對環境進行操作。這是一個非常廣泛的定義,代理可以有許多不同的類型和分類方式:
- 根據推理能力:
- 反應型代理通常具有簡單的請求-回應行為
- 推理型代理使用某種邏輯推理和/或規劃能力
- 根據代理執行代碼的位置:
- 靜態代理在專用的網路節點上運行
- 移動代理可以在網路節點之間移動其代碼
- 根據行為:
- 被動代理沒有特定的目標。這類代理可以對外部刺激作出反應,但不會主動採取行動
- 主動代理有一些目標需要追求
- 認知型代理涉及複雜的規劃和推理
如今,多代理系統被應用於許多領域:
- 在遊戲中,許多非玩家角色(NPC)使用某種人工智慧,並可被視為智慧代理
- 在影片製作中,渲染涉及人群的複雜3D場景通常使用多代理模擬
- 在系統建模中,多代理方法被用來模擬複雜模型的行為。例如,多代理方法已成功用於預測COVID-19疾病在全球的傳播。類似的方法也可用於模擬城市交通,並觀察交通規則的變化對交通的影響
- 在複雜的自動化系統中,每個設備可以作為一個獨立的代理,這使得整個系統不那麼單一化,並且更加穩健
我們不會深入探討多代理系統,但會考慮一個多代理建模的例子。
NetLogo
NetLogo 是一個基於修改版 Logo 程式語言的多代理建模環境。這種語言最初是為了教導兒童程式設計概念而開發的,它允許你控制一個稱為烏龜的代理,該代理可以移動並留下痕跡。這使得創建複雜的幾何圖形成為可能,這是一種非常直觀的方式來理解代理的行為。
在 NetLogo 中,我們可以使用 create-turtles 指令創建許多烏龜。然後我們可以命令所有烏龜執行一些動作(例如,以下範例中向前移動10個單位):
create-turtles 10
ask turtles [
forward 10
]
當然,如果所有烏龜都做相同的事情,那就沒什麼趣味了,因此我們可以使用 ask 指令來命令某些烏龜群體,例如那些位於某個點附近的烏龜。我們還可以使用 breed [cats cat] 指令創建不同品種的烏龜。這裡 cat 是品種的名稱,我們需要指定單數和複數形式,因為不同的指令會使用不同的形式以保持清晰。
✅ 我們不會深入學習 NetLogo 語言本身——如果你有興趣學習更多,可以參考出色的初學者互動式 NetLogo 字典資源。
你可以下載並安裝 NetLogo 來試用。
模型庫
NetLogo 的一大優點是它包含一個可供試用的工作模型庫。進入 File → Models Library,你會發現許多模型分類可供選擇。
Dmitry Soshnikov 提供的模型庫截圖
你可以打開其中一個模型,例如 Biology → Flocking。
主要原則
打開模型後,你會進入 NetLogo 的主畫面。以下是一個描述狼和羊在有限資源(草地)條件下的種群模型範例。
Dmitry Soshnikov 提供的截圖
在這個畫面上,你可以看到:
- 介面部分,包含:
- 所有代理生活的主要場地
- 各種控制項:按鈕、滑桿等
- 用於顯示模擬參數的圖表
- 代碼標籤,包含編輯器,你可以在其中輸入 NetLogo 程式
在大多數情況下,介面會有一個 Setup 按鈕,用於初始化模擬狀態,還有一個 Go 按鈕,用於啟動執行。這些按鈕由代碼中的相應處理程序處理,如下所示:
to go [
...
]
NetLogo 的世界由以下對象組成:
- 代理(烏龜),可以在場地上移動並執行操作。你可以使用
ask turtles [...]語法命令代理,括號中的代碼會以烏龜模式由所有代理同時執行 - 補丁是場地上的方形區域,代理生活在其上。你可以引用同一補丁上的所有代理,或者更改補丁的顏色和其他屬性。你也可以
ask patches執行操作 - 觀察者是一個控制世界的獨特代理。所有按鈕處理程序都在觀察者模式下執行
✅ 多代理環境的美妙之處在於,烏龜模式或補丁模式下運行的代碼會由所有代理同時並行執行。因此,通過編寫少量代碼並編程個體代理的行為,你可以創建整個模擬系統的複雜行為。
群聚行為
作為多代理行為的一個範例,我們來看看**群聚行為**。群聚是一種複雜的模式,非常類似於鳥群的飛行方式。觀察它們飛行時,你可能會認為它們遵循某種集體演算法,或者擁有某種形式的集體智慧。然而,這種複雜行為的產生是因為每個個體代理(在這裡是一隻鳥)僅觀察短距離內的其他代理,並遵循三個簡單規則:
- 對齊 - 朝著鄰近代理的平均方向移動
- 凝聚 - 朝著鄰居的平均位置移動(長距離吸引)
- 分離 - 當與其他鳥靠得太近時,試圖遠離(短距離排斥)
你可以運行群聚範例並觀察行為。你還可以調整參數,例如分離程度或視距範圍,這定義了每隻鳥能看到的距離。注意,如果你將視距範圍減少到0,所有鳥都變得盲目,群聚行為就會停止。如果你將分離減少到0,所有鳥會聚集成一條直線。
✅ 切換到 代碼 標籤,查看群聚的三個規則(對齊、凝聚和分離)如何在代碼中實現。注意我們僅引用視距範圍內的代理。
其他可觀察的模型
還有一些有趣的模型可以供你實驗:
- Art → Fireworks 展示了如何將煙火視為個別火流的集體行為
- Social Science → Traffic Basic 和 Social Science → Traffic Grid 展示了城市交通在1D和2D網格中的模型,有或沒有交通信號燈。模擬中的每輛車遵循以下規則:
- 如果前方空間是空的——加速(直到某個最大速度)
- 如果看到前方有障礙物——剎車(你可以調整駕駛員的視距)
- Social Science → Party 展示了人們在雞尾酒會上如何聚集。你可以找到能最快提升群體幸福感的參數組合。
從這些範例中可以看出,多代理模擬是一種非常有用的方法,可以用來理解由遵循相同或相似邏輯的個體組成的複雜系統的行為。它還可以用於控制虛擬代理,例如電腦遊戲中的非玩家角色(NPC),或3D動畫世界中的代理。
推理型代理
上述代理非常簡單,通過某種演算法對環境變化作出反應。因此,它們是反應型代理。然而,有時代理可以進行推理並規劃其行動,這種情況下它們被稱為推理型代理。
一個典型的例子是個人代理接收到人類的指令去預訂一個度假行程。假設網路上有許多代理可以幫助它。它需要聯繫其他代理,查看有哪些航班可用,不同日期的酒店價格是多少,並嘗試談判出最優惠的價格。當度假計劃完成並得到主人確認後,它可以進行預訂。
為了做到這一點,代理需要溝通。為了成功溝通,它們需要:
- 一些用於交換知識的標準語言,例如知識交換格式(KIF)和知識查詢與操作語言(KQML)。這些語言基於言語行為理論設計
- 這些語言還應包括一些基於不同拍賣類型的談判協議
- 一個通用本體,以便它們能參考相同的概念並理解其語義
- 一種發現不同代理功能的方法,也基於某種本體
推理型代理比反應型代理複雜得多,因為它們不僅需要對環境變化作出反應,還需要能夠主動採取行動。一種被提出的推理型代理架構是所謂的信念-願望-意圖(BDI)代理:
- 信念構成了代理對其環境的知識集合。它可以被結構化為知識庫或一組代理可以應用於環境中特定情況的規則
- 願望定義了代理想要做什麼,即它的目標。例如,上述個人助理代理的目標是預訂行程,而酒店代理的目標是最大化利潤
- 意圖是代理為實現其目標而計劃的具體行動。行動通常會改變環境並導致與其他代理的溝通
目前有一些可用於構建多代理系統的平台,例如 JADE。這篇論文包含了多代理平台的回顧,以及多代理系統的簡史及其不同的使用場景。
結論
多代理系統可以採取非常不同的形式,並應用於許多不同的領域。
它們通常專注於個體代理的簡單行為,並通過協同效應實現整個系統的更複雜行為。
🚀 挑戰
將這節課的內容應用到現實世界,嘗試構思一個可以解決問題的多代理系統。例如,多代理系統需要做什麼來優化校車路線?它如何在麵包店中運作?
課後測驗
複習與自學
複習此類系統在工業中的應用。選擇一個領域,例如製造業或電玩產業,探索多代理系統如何用於解決獨特的問題。
NetLogo 作業
免責聲明:
此文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。
