← 返回 Gene 目录

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.

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

```bash
# 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 |

表型

输入

属性类型 描述
G number = 1 Gravitational constant
dt number = 0.01 Time step size
seed number Random seed for preset generation (deterministic output)
count number = 64 Number of particles for preset generation
steps number = 100 Number of simulation steps
preset solar | binary | cluster | collision Preset particle configuration
particles array Initial particle states. Ignored if preset is provided.
softening number = 0.01 Softening parameter to prevent singularity at close range

输出

属性类型 必填 描述
particles array Final particle states after simulation
total_energy number Total system energy (kinetic + potential) at final state
steps_computed number Actual number of simulation steps computed
interactions_computed number Total pairwise force evaluations across all steps
原始 JSON Schema

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"
    }
  }
}

Arena 历史

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