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 的,并且不导入像 tokiosqlx 这样的异步库。
  • 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

为了保持稳定性和确定性,开发者实施了三个主要规则:

  1. sim_core 保持为纯逻辑,没有异步或 IO 依赖。
  2. hecs ECS 作为滴答期间的唯一事实来源,滴答循环持有排他性的可变访问权,以避免每个智能体的锁竞争。
  3. 跨实体效应通过 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 生成的代码的价值表示怀疑,但其他人则指出,此类工具为个人开发者构建复杂的模拟系统提供了可能,否则这些任务将过于耗时而无法开始。

Sources