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
价格不是固定的。该模拟为每个站点采用订单簿市场模型,根据包含短缺紧迫性乘数的覆盖模型对 13 种不同的商品进行定价。飞船在这些市场之间物理移动供应,通过其交易活动直接影响价格波动。
Facilities and Production
设施执行生产配方(包括熔炼、精炼、制造、耕作和采矿)。这些设施会经历损耗和使用工具进行自我修复的生命周期。它们的等级可以从 1 级提升到 10 级,如果陷入长期破产,可能会被废弃。
Population and Faction Dynamics
- Populations: 消耗食物和燃料,同时产生劳动力。当情绪因压力或短缺而崩溃时,人口会物理迁移到更幸福的系统。
- Factions: 通过向成员设施征税并发布补贴合同来管理经济,以解决长期的短缺问题。派系也会资助在需求未满足的地方建设新设施。
- Construction: 当发生长期短缺时,会生成建筑工地。这些工地会不断累积交付的货物,直到达到 100% 的完成度,届时它们将转化为持久的设施。
Technical Architecture
该项目使用 Rust 编写,并采用了解耦的架构,以确保模拟保持确定性和可测试性。
The Crate Workspace
该项目被分为五个不同的 crate:
sim_core: 包含纯粹的模拟逻辑(hecs ECS、GOAP 规划器、经济系统)。它是严格无 IO 的,并且不导入像tokio或sqlx这样的异步库。sim_db: 通过sqlx处理 SQLite 持久化,包括 ECS 加载器和迁移脚本。sim_server: 一个库 crate,为无头模式(headless mode)提供 HTTP/WebSocket 处理程序。sim_protocol: 为无头模式和 CI 使用定义 WebSocket 线缆类型。client_bevy: 使用 Bevy 0.18 和 egui 的主二进制文件。它将sim_core作为 Bevy Resource 嵌入,允许渲染器直接查询模拟的 ECS 世界,而无需进行数据转换。
Performance and Scaling
该模拟目前支持大约 485 个实时智能体(包括飞船、设施、人口和派系),在 125 ms 的预算内,p50 滴答时间(tick time)为 10–20 ms。该架构旨在扩展到 100,000 个智能体。
Key Technical Constraints
为了保持稳定性和确定性,开发者实施了三个主要规则:
sim_core保持为纯逻辑,没有异步或 IO 依赖。hecsECS 作为滴答期间的唯一事实来源,滴答循环持有排他性的可变访问权,以避免每个智能体的锁竞争。- 跨实体效应通过
SimCommand缓冲区处理,确保一个阶段读取世界状态并写入命令,然后这些命令在随后的阶段应用,以防止阶段中途的写入冲突。
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 生成的代码的价值表示怀疑,但其他人则指出,此类工具为个人开发者构建复杂的模拟系统提供了可能,否则这些任务将过于耗时而无法开始。