{
	"article_slug": "moving-10000-agents-in-godot",
	"citation_status": "reviewed benchmark evidence; cite only with matching article conditions",
	"config": {
		"agent_count": 20000,
		"cell_size_px": 16.0,
		"field_step_budget": 768,
		"frame_budget_ms": 16.6,
		"goal_schedule": "relocates every 480 frames, fixed cells from AgentGrid.default_benchmark_goal_cells()",
		"grid_size": "256x256",
		"physics_fps": 60,
		"runs": 5,
		"sample_frames": 1440,
		"sampling_note": "warmup/sample/runs above are shared defaults; the actual per-mode sampling is recorded in modes[].sampling (naive may run lighter -- its per-frame cost is near-stationary per goal position; its per-frame work is unchanged).",
		"seed": 1234,
		"warmup_frames": 120
	},
	"generated_utc": "2026-06-14T20:06:42",
	"godot_version": "4.6.2-stable (official)",
	"measurement_scope": "20000 moving agents, shared goal, naive vs scheduled. Deterministic native benchmark run, no input. Not a product-wide claim.",
	"mode_filter": "scheduled",
	"modes": [
		{
			"build_completion_latency_frames": {
				"max": 351.0,
				"median": 257.0,
				"p95": 351.0,
				"p99": 351.0
			},
			"build_completion_latency_ms": {
				"max": 5850.0,
				"median": 4283.33333333333,
				"p95": 5850.0,
				"p99": 5850.0
			},
			"build_completion_samples_median_run": 3,
			"description": "agents follow one shared flow/Dijkstra field rebuilt only on scripted goal moves",
			"field_rebuilds_median_run": 4,
			"frame_time_ms": {
				"max": 17.925,
				"median": 9.541,
				"p95": 12.355,
				"p99": 14.408
			},
			"frames_over_budget_pct": 0.138888888888889,
			"mode": "scheduled",
			"queries_per_frame_avg": 0.0,
			"rebuild_cost_ms_median_run": {
				"max": 17.151,
				"median": 9.946
			},
			"rebuild_frames_median_run": 885,
			"runs": [
				{
					"build_completion_latency_frames": {
						"max": 351,
						"median": 257,
						"p95": 351,
						"p99": 351
					},
					"build_completion_latency_ms": {
						"max": 5850.0,
						"median": 4283.33333333333,
						"p95": 5850.0,
						"p99": 5850.0
					},
					"build_completion_samples": 3,
					"field_rebuilds": 4,
					"frame_time_ms": {
						"max": 17.151,
						"median": 9.601,
						"p95": 12.355,
						"p99": 14.411
					},
					"frames_over_budget_pct": 0.208333333333333,
					"queries_per_frame_avg": 0.0,
					"query_samples": {
						"max": 0,
						"median": 0
					},
					"rebuild_cost_ms": {
						"max": 17.151,
						"median": 10.03
					},
					"rebuild_frames": 885,
					"run_index": 0,
					"sample_frames": 1440,
					"seed": 1234,
					"steady_frame_time_ms": {
						"max": 14.138,
						"median": 9.288,
						"p95": 10.866,
						"p99": 12.022
					},
					"steady_frames_over_budget_pct": 0.0,
					"total_queries": 0
				},
				{
					"build_completion_latency_frames": {
						"max": 351,
						"median": 257,
						"p95": 351,
						"p99": 351
					},
					"build_completion_latency_ms": {
						"max": 5850.0,
						"median": 4283.33333333333,
						"p95": 5850.0,
						"p99": 5850.0
					},
					"build_completion_samples": 3,
					"field_rebuilds": 4,
					"frame_time_ms": {
						"max": 24.43,
						"median": 9.526,
						"p95": 12.422,
						"p99": 14.408
					},
					"frames_over_budget_pct": 0.277777777777778,
					"queries_per_frame_avg": 0.0,
					"query_samples": {
						"max": 0,
						"median": 0
					},
					"rebuild_cost_ms": {
						"max": 24.43,
						"median": 9.946
					},
					"rebuild_frames": 885,
					"run_index": 1,
					"sample_frames": 1440,
					"seed": 1235,
					"steady_frame_time_ms": {
						"max": 15.616,
						"median": 9.249,
						"p95": 11.533,
						"p99": 12.67
					},
					"steady_frames_over_budget_pct": 0.0,
					"total_queries": 0
				},
				{
					"build_completion_latency_frames": {
						"max": 351,
						"median": 257,
						"p95": 351,
						"p99": 351
					},
					"build_completion_latency_ms": {
						"max": 5850.0,
						"median": 4283.33333333333,
						"p95": 5850.0,
						"p99": 5850.0
					},
					"build_completion_samples": 3,
					"field_rebuilds": 4,
					"frame_time_ms": {
						"max": 16.393,
						"median": 9.577,
						"p95": 12.454,
						"p99": 14.624
					},
					"frames_over_budget_pct": 0.0,
					"queries_per_frame_avg": 0.0,
					"query_samples": {
						"max": 0,
						"median": 0
					},
					"rebuild_cost_ms": {
						"max": 16.393,
						"median": 9.949
					},
					"rebuild_frames": 885,
					"run_index": 2,
					"sample_frames": 1440,
					"seed": 1236,
					"steady_frame_time_ms": {
						"max": 15.256,
						"median": 9.28,
						"p95": 11.794,
						"p99": 12.637
					},
					"steady_frames_over_budget_pct": 0.0,
					"total_queries": 0
				},
				{
					"build_completion_latency_frames": {
						"max": 351,
						"median": 257,
						"p95": 351,
						"p99": 351
					},
					"build_completion_latency_ms": {
						"max": 5850.0,
						"median": 4283.33333333333,
						"p95": 5850.0,
						"p99": 5850.0
					},
					"build_completion_samples": 3,
					"field_rebuilds": 4,
					"frame_time_ms": {
						"max": 17.925,
						"median": 9.541,
						"p95": 12.219,
						"p99": 14.051
					},
					"frames_over_budget_pct": 0.138888888888889,
					"queries_per_frame_avg": 0.0,
					"query_samples": {
						"max": 0,
						"median": 0
					},
					"rebuild_cost_ms": {
						"max": 17.925,
						"median": 9.676
					},
					"rebuild_frames": 885,
					"run_index": 3,
					"sample_frames": 1440,
					"seed": 1237,
					"steady_frame_time_ms": {
						"max": 16.441,
						"median": 9.361,
						"p95": 11.407,
						"p99": 12.648
					},
					"steady_frames_over_budget_pct": 0.0,
					"total_queries": 0
				},
				{
					"build_completion_latency_frames": {
						"max": 351,
						"median": 257,
						"p95": 351,
						"p99": 351
					},
					"build_completion_latency_ms": {
						"max": 5850.0,
						"median": 4283.33333333333,
						"p95": 5850.0,
						"p99": 5850.0
					},
					"build_completion_samples": 3,
					"field_rebuilds": 4,
					"frame_time_ms": {
						"max": 19.169,
						"median": 9.503,
						"p95": 12.033,
						"p99": 13.992
					},
					"frames_over_budget_pct": 0.138888888888889,
					"queries_per_frame_avg": 0.0,
					"query_samples": {
						"max": 0,
						"median": 0
					},
					"rebuild_cost_ms": {
						"max": 15.131,
						"median": 9.708
					},
					"rebuild_frames": 885,
					"run_index": 4,
					"sample_frames": 1440,
					"seed": 1238,
					"steady_frame_time_ms": {
						"max": 19.169,
						"median": 9.32,
						"p95": 11.117,
						"p99": 12.92
					},
					"steady_frames_over_budget_pct": 0.36036036036036,
					"total_queries": 0
				}
			],
			"sampling": {
				"runs": 5,
				"sample_frames": 1440,
				"warmup_frames": 120
			},
			"steady_frame_time_ms": {
				"max": 15.616,
				"median": 9.288,
				"p95": 11.407,
				"p99": 12.648
			},
			"steady_frames_over_budget_pct": 0.0,
			"total_queries_median_run": 0
		}
	],
	"os_name": "Windows",
	"processor_name": "AMD Ryzen 5 2600X Six-Core Processor",
	"run_profile": "full"
}
