← 返回基因目录

particle-barneshut

Native sim.particle

N-body gravitational simulation using Barnes-Hut quadtree approximation. Groups distant particles into tree nodes for O(n log n) force computation per step. Balances accuracy and speed via configurable opening angle theta.

版本
0.1.0
评分
0.50
下载量
0
WASM
1304.0 KB
创建时间
2026年3月14日
更新时间
2026年3月18日
安装
$ rotifer install particle-barneshut copy

评分构成

基因评分 0.50
竞技场 50%
1.00
使用量 30%
0.00
稳定性 20%
0.01

Arena 历史

日期 适应度 安全分 调用数
3月17日 1.0000 1.00 1

README

particle-barneshut

Barnes-Hut quadtree N-body gravitational simulation — a pure-computation Native Gene for the Rotifer Protocol.

Algorithm

Builds a quadtree each step to hierarchically group distant particles. When computing the force on particle i:

  1. If a tree node is a leaf containing a different particle, compute direct force
  2. If an internal node satisfies (size / distance) < θ, approximate all particles in that node as a single body at its center of mass
  3. Otherwise, recurse into the four children (NW, NE, SW, SE)

With θ = 0.5 (the default opening angle), this achieves O(n log n) force evaluations per step while maintaining good accuracy — typically within 1-2% of the exact brute-force solution.

Integration uses the symplectic leapfrog (kick-drift-kick) scheme.

Usage

# Solar system preset (64 particles)
rotifer run particle-barneshut --input '{"preset": "solar"}'

# Large cluster (512 particles, 200 steps)
rotifer run particle-barneshut --input '{"preset": "cluster", "count": 512, "steps": 200}'

# Binary star system
rotifer run particle-barneshut --input '{"preset": "binary", "count": 100}'

Presets

Preset Description
solar Central massive body + orbiting lighter bodies with circular velocities
binary Two equal-mass stars in mutual orbit + debris ring
cluster Random particles in a disk with small random velocities
collision Two groups of particles approaching head-on

Output

  • particles — final positions and velocities of all particles
  • steps_computed — number of simulation steps executed
  • total_energy — total system energy (kinetic + potential) for conservation validation
  • interactions_computed — total tree-node force evaluations (fewer than brute-force)

Fitness Characteristics

Metric Expected
Success Rate 1.0 (deterministic, no failure mode)
Accuracy High (θ=0.5: ~1-2% error vs brute-force)
Complexity O(n log n × steps)
Interactions ~O(n log n) per step (varies with particle distribution)
Best For Medium-to-large N (64-2048), best accuracy/cost tradeoff
Weakness Tree construction overhead for very small N

Phenotype

inputSchema

{
  "type": "object",
  "required": [],
  "properties": {
    "G": {
      "type": "number",
      "default": 1,
      "description": "Gravitational constant"
    },
    "dt": {
      "type": "number",
      "default": 0.01,
      "description": "Time step size"
    },
    "seed": {
      "type": "number",
      "description": "Random seed for preset generation (deterministic output)"
    },
    "count": {
      "type": "number",
      "default": 64,
      "maximum": 2048,
      "minimum": 2,
      "description": "Number of particles for preset generation"
    },
    "steps": {
      "type": "number",
      "default": 100,
      "maximum": 10000,
      "minimum": 1,
      "description": "Number of simulation steps"
    },
    "preset": {
      "enum": [
        "solar",
        "binary",
        "cluster",
        "collision"
      ],
      "type": "string",
      "description": "Preset particle configuration"
    },
    "particles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "x",
          "y",
          "vx",
          "vy",
          "mass"
        ],
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "vx": {
            "type": "number"
          },
          "vy": {
            "type": "number"
          },
          "mass": {
            "type": "number"
          }
        }
      },
      "description": "Initial particle states. Ignored if preset is provided."
    },
    "softening": {
      "type": "number",
      "default": 0.01,
      "description": "Softening parameter to prevent singularity at close range"
    }
  }
}

outputSchema

{
  "type": "object",
  "required": [
    "particles",
    "steps_computed",
    "total_energy",
    "interactions_computed"
  ],
  "properties": {
    "particles": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "vx": {
            "type": "number"
          },
          "vy": {
            "type": "number"
          },
          "mass": {
            "type": "number"
          }
        }
      },
      "description": "Final particle states after simulation"
    },
    "total_energy": {
      "type": "number",
      "description": "Total system energy (kinetic + potential) at final state"
    },
    "steps_computed": {
      "type": "number",
      "description": "Actual number of simulation steps computed"
    },
    "interactions_computed": {
      "type": "number",
      "description": "Total pairwise force evaluations across all steps"
    }
  }
}