Gen-3 link-layer policy bank (sequential vs synchronized swapping)
24 REINFORCE policies, one per (link length L, memory coherence time T_c) cell, trained for "Sequential vs. Synchronized Entanglement Swapping under Reinforcement-Learned Link-Layer Control" (Pitt QN Lab). Each policy runs one repeater link: it decides whether to keep trying, purify, discard, or deliver a pair. Policy is a 2-hidden-layer MLP (4 -> 64 -> 64 -> 4) over the per-link state [F1, F2, p, t], saved as a PyTorch state dict.
Files
policies/policy_six_n4_L{5|10}_Tc{us}us.pt: 24 state dicts. Filenames are a lookup contract (Tc_us = Tc_mult * L_km * 5); do not rename.policies/training_history_*.json: per-iteration training record per cell.summary.csv: one row per cell (convergence flags, J_F, SKR, episode stats).
Load with PolicyNetwork from src/rl/policy.py in the code repo.
Cells
| L (km) | T_c (us) | T_c mult | converged | J_F mean |
|---|---|---|---|---|
| 5 | 125 | 5 | True | 0.9573 |
| 5 | 250 | 10 | True | 0.9573 |
| 5 | 625 | 25 | True | 0.9573 |
| 5 | 1250 | 50 | True | 0.9574 |
| 5 | 2500 | 100 | True | 0.9574 |
| 5 | 6250 | 250 | True | 0.9573 |
| 5 | 12500 | 500 | True | 0.9573 |
| 5 | 25000 | 1000 | True | 0.9573 |
| 5 | 62500 | 2500 | True | 0.9572 |
| 5 | 125000 | 5000 | True | 0.9573 |
| 5 | 250000 | 10000 | True | 0.9573 |
| 5 | 500000 | 20000 | True | 0.9572 |
| 10 | 250 | 5 | True | 0.9573 |
| 10 | 500 | 10 | True | 0.9572 |
| 10 | 1250 | 25 | True | 0.9574 |
| 10 | 2500 | 50 | True | 0.9573 |
| 10 | 5000 | 100 | True | 0.9573 |
| 10 | 12500 | 250 | False | 0.9535 |
| 10 | 25000 | 500 | True | 0.9565 |
| 10 | 50000 | 1000 | True | 0.9571 |
| 10 | 125000 | 2500 | True | 0.9573 |
| 10 | 250000 | 5000 | True | 0.9572 |
| 10 | 500000 | 10000 | True | 0.9572 |
| 10 | 1000000 | 20000 | True | 0.9572 |
The L = 10 km, T_c = 12500 us cell (mult 250) hit the 1000-iteration cap and is unconverged; it sits at the regime crossover. All other cells converged.