The complete operating space of a coupled agent fleet, verified by 53 GPU experiments on RTX 4050.
coupling
▲さんかく
│
2.0 │ ┌─────────────────────────────┐
│ │ Living / Strong / │
│ │ Overdriven │
c_c │ │ ▲さんかく gain > 0.85 │
│ │ │ coupling > c_c │
│ │ │ │
0.12 │ ──┤ Hysteresis band ◄──► │
0.05 │ │ Dying / Dead │
│ │ │
└──┴──────────────────────────────► gain
0.85 1.0
The fleet's fate is determined by just two control parameters:
| Parameter | Role | Edge |
|---|---|---|
| Gain | Internal nonlinearity — how strongly agents process signals | > 0.85 for fleet life |
| Coupling | External connection strength — how much agents talk to each other | > critical_coupling(n) for fleet life |
Both conditions must hold for fleet life:
gain > 0.85coupling > critical_coupling(n_agents)
Neither alone is sufficient. A high-gain fleet with no inter-agent connection is incoherent noise. A tightly-coupled fleet with insufficient gain is a damped oscillator.
critical_coupling(n) = 0.67 ×ばつ n^(-1.06)
Larger fleets need less coupling per agent because the network structure itself amplifies coherence. For a 3-agent fleet, critical coupling is ~0.21. For 53 agents, it's ~0.01.
| Zone | Energy | Conditions |
|---|---|---|
| Dead | < 0.01 | No coherent dynamics at all |
| Dying | 0.01 – 0.5 | Damped transients, decays to zero |
| Living | 0.5 – 4.0 | gain > 0.85, coupling > critical |
| Strong | > 4.0 | gain > 1.0 |
| Overdriven | > 8.0 | Too much energy, dynamics break down |
The fleet has path-dependent memory:
- Disordered → Ordered requires
coupling > 0.17 - Ordered → Disordered requires
coupling < 0.12 - The hysteresis band is ~0.05 wide
This means you can turn coupling down below the ordering threshold and the fleet stays ordered — a form of supercooled liquid that's useful for robust operations.
| Mode | Gain | Coupling | Notes |
|---|---|---|---|
| Sensing | 1.05 | ×ばつc_c | SNR ≈ 6.17 |
| Resilience | 0.95 | ×ばつc_c | Survives agent death at 0.89 correlation |
| Exploration | 0.87 | ×ばつc_c | Just above gain edge, highest sensitivity |
use fleet_phase::PhaseDiagram; let pd = PhaseDiagram::new(3, 1.0, 0.30); let reading = pd.read(2.5, 0.4); println!("Zone: {}", reading.zone.name()); println!("Alive: {}", reading.is_alive); println!("Critical coupling: {:.4}", reading.critical_coupling);
pub fn new(n_agents: usize, gain: f64, coupling: f64) -> Self pub fn read(&self, energy: f64, correlation: f64) -> PhaseReading pub fn critical_coupling(&self) -> f64 pub fn is_viable(&self) -> bool pub fn optimal_for_sensing(n_agents: usize) -> (f64, f64) pub fn optimal_for_resilience(n_agents: usize) -> (f64, f64) pub fn optimal_for_exploration(n_agents: usize) -> (f64, f64) pub fn min_coupling_for_gain(&self, gain: f64) -> f64 pub fn min_gain_for_coupling(&self, coupling: f64) -> f64 pub fn estimated_energy(&self) -> f64
cargo test38 tests covering: critical coupling for various N, zone classification, hysteresis, viability, optimal points, edge cases, and the Two-Edge Principle.
Discovered through 53 GPU experiments on an RTX 4050, running mean-field coupled-oscillator models of agent fleets. The phase boundary, zones, hysteresis band, and optimal operating points were all measured empirically and then fit to power-law formulas.
Built by Forgemaster ⚒️ · fleet-phase v0.1.0