The Space Project: A Self-Running Space Economy Simulator in Rust and Bevy
The Space Project: A Self-Running Space Economy Simulator in Rust and Bevy
Overview
The Space Project 是一個由代理人驅動的經濟模擬系統,其運作方式如同太空中的自動化「水族箱」。與傳統遊戲不同,它沒有劇本化的故事情節或玩家目標;相反地,它提供了一個原生的 3D 客戶端,讓使用者作為觀察者或「上帝模式」管理員,觀察一個複雜的太陽系經濟如何自主演化。
Core Simulation Mechanics
該模擬系統創造了一個活生生的經濟體,市場會自行尋找價格,而人口會根據幸福感與資源可用性進行遷移。
Agent-Driven Ship AI
太空船是利用 Goal-Oriented Action Planning (GOAP) 系統的自主代理人。前瞻規劃器會根據抽象的世界狀態,對各種目標(例如:交易、交付、加油、改裝或休息)進行評分,並構建一個行為樹來執行最具成本效益的計畫。如果出現更具利潤或更緊急的選項,太空船能夠在飛行途中重新規劃。
Dynamic Economic Model
價格並非固定不變。該模擬系統在每個站點採用訂單簿市場(order-book market),根據涵蓋模型(coverage model)與短缺緊急度乘數,為 13 種不同的商品定價。太空船會在這些市場之間實體移動供應,透過其交易活動直接影響價格波動。
Facilities and Production
設施會執行生產配方(包括熔煉、精煉、製造、耕作與採礦)。這些設施會經歷退化與使用工具自我修復的生命週期。它們可以從等級 1 升級到 10,若長期處於破產狀態,則可能會被遺棄。
Population and Faction Dynamics
- Populations: 消費食物與燃料,同時產生勞動力。當情緒因壓力或短缺而崩潰時,人口會實體遷移到更幸福的星系。
- Factions: 透過向成員設施徵收稅收,並發布補貼合約來應對長期短缺,藉此管理經濟。派系(Factions)也會在需求未被滿足的地方資助建設新設施。
- Construction: 當發生長期短缺時,會生成建築工地。這些工地會累積交付的貨物,直到達到 100% 完成度,屆時它們會轉化為持久性的設施。
Technical Architecture
該專案使用 Rust 編寫,並採用解耦架構,以確保模擬過程具備確定性(deterministic)且可測試。
The Crate Workspace
該專案分為五個不同的 crate:
sim_core: 包含純粹的模擬邏輯(hecs ECS、GOAP 規劃器、經濟系統)。它是嚴格的無 IO(IO-free)設計,且不導入tokio或sqlx等非同步(async)函式庫。sim_db: 透過sqlx處理 SQLite 持久化,包括 ECS 載入器與遷移(migrations)。sim_server: 一個提供 HTTP/WebSocket 處理程序的函式庫 crate,用於無頭模式(headless mode)。sim_protocol: 定義了用於無頭模式與 CI 的 WebSocket 通訊協定類型。client_bevy: 使用 Bevy 0.18 與egui的主執行檔。它將sim_core嵌入為一個 Bevy Resource,允許渲染器直接查詢模擬的 ECS 世界,而無需進行數據轉換(marshalling)。
Performance and Scaling
目前該模擬系統支援約 485 個活體代理人(包括太空船、設施、人口與派系),在 125 ms 的預算內,p50 tick time 為 10–20 ms。該架構設計目標是擴展至 100,000 個代理人。
Key Technical Constraints
為了維持穩定性與確定性,開發者實施了三項主要規則:
sim_core保持純邏輯,沒有非同步或 IO 依賴。hecsECS 作為 tick 期間的唯一事實來源(single source of truth),tick 迴圈持有排他的可變存取權,以避免每個代理人的鎖定(locks)。- 跨實體效果透過
SimCommand緩衝區處理,確保一個階段(phase)讀取世界狀態並寫入指令,隨後在下一個階段套用指令,以防止階段中期的寫入衝突。
Tech Stack
| Component | Technology |
| :--- | :--- | |
| Language | Rust (Edition 2021) |
| Renderer | Bevy 0.18 (搭配用於行星與星雲的自定義 WGSL shaders) |
| Simulation ECS | hecs |
| UI | egui (透過 bevy_egui) |
| Particles | bevy_hanabi |
| Persistence | SQLite via sqlx |
| Networking | Axum and Tokio (用於無頭模式) |
Development Insights
該專案是作者與 LLM Claude 的協作成果。這種方法引發了社群對於 LLM 在現代軟體開發中角色定位的討論:
"rust 的嚴謹性似乎真的能幫助他們 [LLMs] 寫出正確的程式碼,而 ECS 架構似乎讓他們更容易理解運作機制(因為他們一次只需要在上下文中持有少數的系統與組件)。"
雖然有些使用者對研究 LLM 生成的程式碼之價值表示懷疑,但其他人則指出,這類工具讓個人開發者能夠建立複雜的模擬系統,而這類系統若在以往可能因耗時過來不及開始。