スペースプロジェクト:Rust と Bevy で作られた自律走行型宇宙経済シミュレータ

スペースプロジェクト:Rust と Bevy で作られた自律走行型宇宙経済シミュレータ

概要

スペースプロジェクトは、エージェント主導の経済シミュレーションで、宇宙空間の「水族館」のように自律的に動作します。従来のゲームとは異なり、脚本化されたストーリーやプレイヤーの目的はなく、代わりにネイティブな 3D クライアントを提供し、ユーザーは観察者または神モードの管理者として、複雑な太陽系経済が自律的に進化する様子を見ることができます。

コアシミュレーションメカニクス

シミュレーションは、生きた経済を創出し、市場は自ら価格を決定し、人口は幸福度と資源の可用性に基づいて移動します。

エージェント駆動の船 AI

船は Goal‑Oriented Action Planning (GOAP) システムを利用する自律エージェントです。フォワードプランナーは、取引、配送、給油、改装、休息などのさまざまな目標を抽象的な世界状態と照らし合わせてスコア付けし、最もコスト効果の高いプランを実行するためのビヘイビアツリーを構築します。船は、より有利または緊急のオプションが現れた場合、飛行中に再計画することが可能です。

動的経済モデル

価格は固定されていません。シミュレーションは各ステーションごとにオーダーブック市場を使用し、13 種類の異なる商品に対して、供給不足緊急度乗数を伴うカバレッジモデルに基づいて価格を決定します。船は実際に供給をこれらの市場間で移動させ、取引活動を通じて価格変動に直接影響を与えます。

施設と生産

施設は生産レシピ(精錬、精製、製造、農業、採掘など)を実行します。これらの施設は劣化と自己修復のライフサイクルを持ち、ツールを使用して修復します。レベルは 1 から 10 まで上げられ、慢性的に破産状態になると放棄されることがあります。

人口と派閥のダイナミクス

  • 人口: 食料と燃料を消費しながら労働力を生産します。ストレスや不足により感情が崩壊すると、人口はより幸福なシステムへ物理的に移動します。
  • 派閥: メンバー施設から税金を徴収し、慢性的な不足に対処するための補助金契約を掲示することで経済を管理します。派閥は需要が満たされていない場所に新たな施設の建設も資金提供します。
  • 建設: 慢性的な不足が発生すると、建設サイトが生成されます。これらのサイトは配送された貨物を蓄積し、100% 完了に達すると永続的な施設として具現化します。

技術アーキテクチャ

本プロジェクトは Rust で記述され、シミュレーションが決定論的かつテスト可能であることを保証するために、デカップルドアーキテクチャを採用しています。

クレートワークスペース

プロジェクトは 5 つの独立したクレートに分割されています:

  • sim_core: 純粋なシミュレーションロジック(hecs ECS、GOAP プランナー、経済)を含みます。IO を一切使用せず、tokio や sqlx といった非同期ライブラリもインポートしません。
  • sim_db: sqlx を介した SQLite 永続化を担当し、ECS ローダーとマイグレーションを含みます。
  • sim_server: ヘッドレスモード用の HTTP/WebSocket ハンドラを提供するライブラリクレートです。
  • sim_protocol: ヘッドレスおよび CI 用の WebSocket ワイヤタイプを定義します。
  • client_bevy: Bevy 0.18 と egui を使用したメインバイナリです。sim_core を Bevy Resource として組み込み、レンダラがシミュレーションの ECS ワールドに直接クエリできるようにし、マシャリングを不要にしています。

パフォーマンスとスケーリング

シミュレーションは現在、約 485 エージェント(船、施設、人口、派閥を含む)をサポートしており、p50 のティック時間は 10–20 ms、予算は 125 ms です。アーキテクチャは 100,000 エージェント規模へのスケールを見据えて設計されています。

主要な技術的制約

安定性と決定論を保つために、開発者は次の 3 つの基本ルールを実装しました:

  1. sim_core は非同期や IO 依存性を持たない純粋ロジックであること。
  2. hecs ECS がティック中の唯一の真実の情報源となり、ティックループが排他的に可変アクセスを保持してエージェントごとのロックを回避すること。
  3. エンティティ間の効果は SimCommand バッファで処理し、あるフェーズが世界状態を読み取りコマンドを書き込み、次のフェーズでそれらを適用することでフェーズ途中の書き込み競合を防止すること。

テックスタック

コンポーネント 技術
言語 Rust (Edition 2021)
レンダラ Bevy 0.18(惑星と星雲用のカスタム WGSL シェーダ)
シミュレーション ECS hecs
UI egui(bevy_egui 経由)
パーティクル bevy_hanabi
永続化 SQLite via sqlx
ネットワーキング Axum と Tokio(ヘッドレスモード用)

開発インサイト

本プロジェクトは作者と LLM Claude の共同作業で開発されました。このアプローチは、LLM の現代ソフトウェア開発における役割についてコミュニティ内で議論を呼び起こしました:

"Rust の厳格さは LLM がコードを正しく書くのに本当に役立つように思えるし、ECS アーキテクチャは(彼らが同時にコンテキストに保持するシステムとコンポーネントが少ないため)物事の仕組みを推論しやすくするようだ。"

一部のユーザーは LLM が生成したコードを学習する価値に懐疑的でしたが、他のユーザーはそのようなツールが個人開発者にとって、時間がかかりすぎて手が出せなかった複雑なシミュレーションを構築できる能力を解放すると指摘しています。

Sources