diff --git a/docs/experiment_round31_adaptive_cap.json b/docs/experiment_round31_adaptive_cap.json new file mode 100644 index 0000000..43c6c22 --- /dev/null +++ b/docs/experiment_round31_adaptive_cap.json @@ -0,0 +1,1988 @@ +{ + "segments": 48, + "kin_fp": "2ebcbf17", + "device": "cuda float64", + "torch": "2.10.0+cu130", + "design": "变体按段交错(同一段的 fixed/adaptive 相邻测量),每段4次预热+9次计时,保留全部原始耗时;整批同样3次预热+7次计时", + "budget_single": 32, + "per_segment": [ + { + "i": 0, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 8.152, + 7.4, + 7.571, + 7.879, + 8.114, + 9.795, + 7.781, + 8.255, + 7.367 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.241, + 6.832, + 8.067, + 7.948, + 8.265, + 8.354, + 7.568, + 8.143, + 8.208 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 0, + "start_it": 8, + "dense_min_gap_mm": 0.02673023799951224, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 44.165, + 43.356, + 41.979, + 42.643, + 43.434, + 41.957, + 41.451, + 42.03, + 42.205 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 39.614, + 41.182, + 38.832, + 40.843, + 42.514, + 40.901, + 40.571, + 44.014, + 42.444 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 0, + "start_it": 91, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.111, + 6.955, + 6.736, + 7.274, + 7.107, + 7.841, + 7.613, + 7.403, + 7.734 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.196, + 6.995, + 6.742, + 6.967, + 7.467, + 7.276, + 7.055, + 6.519, + 6.821 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 0, + "start_it": 173, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.04, + 6.665, + 7.065, + 6.682, + 9.031, + 7.61, + 8.524, + 8.499, + 7.508 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.378, + 7.278, + 7.696, + 7.146, + 6.519, + 6.961, + 8.106, + 8.405, + 7.579 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 21, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.263, + 6.792, + 7.575, + 9.597, + 7.867, + 7.066, + 6.938, + 6.859, + 7.274 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 8.257, + 8.374, + 7.267, + 8.448, + 7.671, + 7.148, + 7.439, + 7.668, + 8.531 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 21, + "start_it": 100, + "dense_min_gap_mm": 0.009057896844284485, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 42.869, + 46.031, + 46.5, + 47.291, + 42.348, + 43.459, + 44.967, + 43.583, + 41.396 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 43.134, + 44.956, + 43.254, + 41.826, + 45.307, + 40.671, + 41.954, + 40.442, + 40.786 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 21, + "start_it": 127, + "dense_min_gap_mm": 0.23144774091545095, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 26.912, + 22.404, + 23.986, + 24.636, + 24.204, + 25.777, + 23.387, + 22.926, + 22.353 + ], + "queries": 4, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 25.965, + 24.559, + 24.529, + 22.341, + 24.546, + 24.439, + 25.635, + 22.666, + 23.788 + ], + "queries": 4, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 21, + "start_it": 282, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 26.671, + 23.042, + 23.139, + 22.804, + 23.841, + 24.184, + 25.553, + 25.471, + 23.789 + ], + "queries": 4, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 25.787, + 24.213, + 27.976, + 25.3, + 22.734, + 27.853, + 23.623, + 25.574, + 23.549 + ], + "queries": 4, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 84, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.198, + 7.825, + 7.909, + 9.169, + 7.714, + 7.134, + 7.467, + 7.421, + 7.106 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.29, + 6.646, + 7.734, + 9.245, + 8.063, + 8.486, + 7.123, + 7.077, + 7.462 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 84, + "start_it": 170, + "dense_min_gap_mm": 0.14945035939886608, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 53.417, + 53.658, + 56.863, + 53.672, + 54.075, + 52.851, + 51.835, + 53.31, + 58.463 + ], + "queries": 18, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 48.101, + 51.433, + 48.407, + 47.214, + 49.537, + 50.601, + 51.959, + 47.992, + 53.588 + ], + "queries": 18, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 84, + "start_it": 234, + "dense_min_gap_mm": 0.006206321604114606, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 59.451, + 57.289, + 58.285, + 55.551, + 58.451, + 56.079, + 59.372, + 63.271, + 58.89 + ], + "queries": 31, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 60.676, + 52.996, + 58.797, + 57.352, + 52.274, + 53.817, + 60.43, + 56.17, + 63.717 + ], + "queries": 31, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 84, + "start_it": 325, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.599, + 6.485, + 7.24, + 7.795, + 7.896, + 7.274, + 7.094, + 7.152, + 6.841 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.996, + 7.524, + 7.867, + 6.815, + 6.708, + 7.337, + 8.488, + 6.517, + 6.637 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 128, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.631, + 6.991, + 6.528, + 6.835, + 7.617, + 7.188, + 7.006, + 7.25, + 8.282 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 6.64, + 6.719, + 7.67, + 7.219, + 7.053, + 6.605, + 6.981, + 6.746, + 7.196 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 128, + "start_it": 31, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.8, + 6.929, + 7.218, + 7.155, + 7.541, + 7.143, + 7.542, + 7.245, + 7.348 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.046, + 7.941, + 7.309, + 7.691, + 6.98, + 7.24, + 7.248, + 7.519, + 7.841 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 128, + "start_it": 62, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.844, + 7.822, + 7.182, + 7.55, + 6.917, + 7.27, + 7.17, + 8.135, + 7.355 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.187, + 6.898, + 6.742, + 7.077, + 7.212, + 7.32, + 7.406, + 6.761, + 6.875 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 145, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.253, + 7.206, + 8.566, + 7.115, + 8.125, + 7.636, + 9.085, + 8.152, + 6.876 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.093, + 7.046, + 7.318, + 7.026, + 6.507, + 6.438, + 7.673, + 6.736, + 7.332 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 145, + "start_it": 32, + "dense_min_gap_mm": 0.002145835308116517, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 87.946, + 95.343, + 91.112, + 92.793, + 87.941, + 94.561, + 96.699, + 92.644, + 89.5 + ], + "queries": 28, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 92.821, + 91.842, + 92.485, + 94.546, + 94.857, + 92.895, + 93.148, + 90.318, + 91.293 + ], + "queries": 28, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 145, + "start_it": 138, + "dense_min_gap_mm": 0.36398034224492015, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 42.265, + 42.664, + 42.52, + 43.186, + 42.344, + 45.093, + 41.828, + 42.077, + 41.459 + ], + "queries": 15, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 41.094, + 41.718, + 40.122, + 41.484, + 40.887, + 42.248, + 41.518, + 40.469, + 40.897 + ], + "queries": 15, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 145, + "start_it": 294, + "dense_min_gap_mm": 0.275569567284915, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 47.624, + 44.114, + 43.321, + 45.186, + 43.074, + 45.968, + 42.7, + 49.436, + 44.063 + ], + "queries": 17, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 43.377, + 41.594, + 44.011, + 43.217, + 43.397, + 41.365, + 41.084, + 45.943, + 40.978 + ], + "queries": 17, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 164, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 18.273, + 18.34, + 15.122, + 18.221, + 15.363, + 14.712, + 14.445, + 14.918, + 15.858 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 14.705, + 15.82, + 15.497, + 15.867, + 16.42, + 15.126, + 15.946, + 15.103, + 14.871 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 164, + "start_it": 84, + "dense_min_gap_mm": 0.3668900237504289, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 52.213, + 53.249, + 51.441, + 55.873, + 48.575, + 48.905, + 49.238, + 52.516, + 50.908 + ], + "queries": 18, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 47.212, + 47.566, + 53.654, + 47.409, + 47.771, + 48.468, + 49.34, + 45.545, + 49.494 + ], + "queries": 18, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 164, + "start_it": 182, + "dense_min_gap_mm": 0.008494152641066677, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 42.911, + 43.991, + 42.541, + 41.806, + 42.016, + 43.374, + 41.913, + 43.775, + 52.546 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 45.201, + 40.178, + 39.677, + 42.373, + 46.445, + 43.243, + 44.737, + 45.736, + 43.296 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 164, + "start_it": 227, + "dense_min_gap_mm": 0.3210619238556909, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 46.57, + 43.142, + 46.322, + 40.588, + 50.526, + 43.606, + 43.188, + 41.338, + 43.91 + ], + "queries": 10, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 42.164, + 41.781, + 42.703, + 43.879, + 42.762, + 39.758, + 44.868, + 42.214, + 40.394 + ], + "queries": 10, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 175, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.707, + 7.928, + 7.601, + 7.809, + 7.315, + 7.05, + 7.511, + 7.608, + 7.525 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.294, + 7.092, + 7.324, + 7.667, + 7.92, + 7.032, + 7.39, + 7.157, + 7.209 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 175, + "start_it": 46, + "dense_min_gap_mm": 0.18812628629569694, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 61.652, + 60.473, + 59.139, + 58.129, + 56.854, + 57.463, + 57.239, + 57.15, + 59.396 + ], + "queries": 32, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 60.905, + 58.997, + 56.517, + 59.367, + 64.422, + 59.593, + 61.731, + 59.691, + 58.211 + ], + "queries": 32, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 175, + "start_it": 75, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 15.001, + 14.322, + 15.19, + 14.852, + 14.654, + 14.837, + 15.286, + 16.265, + 15.871 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 15.131, + 15.492, + 15.222, + 15.393, + 14.187, + 13.989, + 14.978, + 14.893, + 14.726 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 175, + "start_it": 142, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.919, + 8.4, + 8.338, + 7.82, + 7.636, + 7.587, + 7.678, + 6.746, + 7.59 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.227, + 7.49, + 8.39, + 7.23, + 6.735, + 6.992, + 7.252, + 7.156, + 6.513 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 180, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.614, + 7.029, + 6.972, + 7.354, + 6.789, + 7.19, + 7.265, + 7.262, + 7.665 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.13, + 7.077, + 7.251, + 7.529, + 9.781, + 7.943, + 6.709, + 8.087, + 7.135 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 180, + "start_it": 14, + "dense_min_gap_mm": 0.02421739577681592, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 45.485, + 46.439, + 46.172, + 46.061, + 46.364, + 44.978, + 43.169, + 42.29, + 47.572 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 44.206, + 40.465, + 43.935, + 44.444, + 42.61, + 45.103, + 42.43, + 43.188, + 45.048 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 180, + "start_it": 52, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 43.509, + 40.711, + 41.814, + 44.181, + 41.393, + 44.451, + 40.286, + 44.421, + 41.035 + ], + "queries": 15, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 41.958, + 40.033, + 44.012, + 42.169, + 47.713, + 40.758, + 41.633, + 42.078, + 40.055 + ], + "queries": 15, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 180, + "start_it": 54, + "dense_min_gap_mm": -0.14927288174659914, + "status_from_first_run": "collision", + "fixed": { + "ms_all": [ + 24.255, + 24.496, + 22.789, + 22.357, + 24.584, + 23.631, + 24.747, + 25.694, + 27.39 + ], + "queries": 5, + "safe": false, + "collision": true, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 23.209, + 23.297, + 23.446, + 28.215, + 23.776, + 24.556, + 22.365, + 23.6, + 24.319 + ], + "queries": 5, + "safe": false, + "collision": true, + "unresolved": false + } + }, + { + "i": 180, + "start_it": 94, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.697, + 6.607, + 7.012, + 6.918, + 6.768, + 8.365, + 9.329, + 7.865, + 7.358 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.913, + 7.407, + 7.398, + 7.711, + 7.23, + 7.755, + 6.851, + 6.989, + 7.74 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 197, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.314, + 7.362, + 7.068, + 6.554, + 6.968, + 7.183, + 6.693, + 7.133, + 7.9 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.37, + 8.199, + 6.591, + 6.98, + 9.705, + 7.116, + 7.437, + 7.312, + 7.514 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 197, + "start_it": 80, + "dense_min_gap_mm": 0.0010684324191032601, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 103.264, + 100.812, + 102.9, + 102.975, + 99.801, + 103.883, + 101.85, + 100.949, + 100.108 + ], + "queries": 29, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 99.118, + 99.51, + 99.711, + 95.162, + 99.072, + 98.91, + 96.951, + 109.186, + 101.006 + ], + "queries": 29, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 197, + "start_it": 82, + "dense_min_gap_mm": 0.0010684324191032601, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 41.803, + 42.99, + 45.708, + 41.802, + 46.472, + 43.728, + 42.359, + 43.878, + 45.935 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 43.118, + 48.141, + 46.181, + 47.275, + 45.651, + 48.546, + 44.474, + 47.399, + 44.889 + ], + "queries": 17, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 197, + "start_it": 211, + "dense_min_gap_mm": 0.39381647681728715, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 50.809, + 53.417, + 50.99, + 49.022, + 50.102, + 52.699, + 48.325, + 48.536, + 49.527 + ], + "queries": 11, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 46.48, + 49.612, + 50.259, + 51.755, + 47.081, + 50.215, + 47.423, + 49.977, + 47.384 + ], + "queries": 11, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 215, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.335, + 7.271, + 7.724, + 6.996, + 9.003, + 7.282, + 7.218, + 7.111, + 7.187 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 8.254, + 7.48, + 7.31, + 6.791, + 7.185, + 6.831, + 6.717, + 6.396, + 6.756 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 215, + "start_it": 104, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 7.314, + 7.068, + 7.277, + 7.714, + 8.059, + 7.691, + 6.949, + 7.353, + 6.963 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.071, + 8.076, + 7.622, + 7.074, + 6.574, + 7.134, + 7.431, + 8.906, + 8.785 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 215, + "start_it": 178, + "dense_min_gap_mm": 0.2112382958686112, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 53.241, + 54.674, + 53.809, + 53.72, + 50.346, + 49.1, + 51.696, + 49.164, + 53.353 + ], + "queries": 30, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 50.799, + 51.806, + 53.279, + 56.692, + 52.745, + 51.114, + 49.051, + 51.297, + 49.865 + ], + "queries": 30, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 215, + "start_it": 215, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 16.233, + 14.926, + 14.979, + 14.495, + 17.599, + 14.385, + 15.058, + 15.391, + 14.911 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 15.194, + 15.089, + 15.395, + 15.319, + 15.258, + 14.12, + 17.223, + 17.333, + 13.657 + ], + "queries": 3, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 224, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.571, + 6.572, + 6.785, + 7.073, + 7.969, + 7.745, + 7.193, + 7.694, + 8.11 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 8.115, + 7.14, + 7.098, + 8.263, + 6.98, + 7.121, + 7.206, + 7.053, + 7.964 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 224, + "start_it": 52, + "dense_min_gap_mm": 0.0041216155493710716, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 54.285, + 53.765, + 53.03, + 51.085, + 50.099, + 51.962, + 53.977, + 53.911, + 52.348 + ], + "queries": 32, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 52.219, + 50.208, + 55.168, + 53.071, + 52.99, + 51.687, + 51.408, + 52.017, + 52.534 + ], + "queries": 32, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 224, + "start_it": 61, + "dense_min_gap_mm": 0.36814323588093956, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 25.58, + 23.908, + 22.155, + 22.103, + 23.727, + 23.599, + 23.06, + 25.489, + 22.714 + ], + "queries": 5, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 25.095, + 22.731, + 21.839, + 24.188, + 24.464, + 23.032, + 24.795, + 21.712, + 24.553 + ], + "queries": 5, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 224, + "start_it": 127, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 8.068, + 7.265, + 7.667, + 7.354, + 7.576, + 7.273, + 7.783, + 7.904, + 9.216 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.535, + 7.227, + 8.049, + 7.995, + 7.262, + 6.906, + 6.983, + 7.081, + 7.138 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 255, + "start_it": 0, + "dense_min_gap_mm": 0.5, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 6.905, + 7.447, + 6.462, + 7.001, + 8.798, + 8.706, + 8.092, + 7.791, + 7.394 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 7.27, + 6.72, + 6.745, + 7.55, + 8.238, + 8.883, + 7.259, + 7.119, + 7.59 + ], + "queries": 2, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 255, + "start_it": 25, + "dense_min_gap_mm": 0.004616787795093558, + "status_from_first_run": "unresolved", + "fixed": { + "ms_all": [ + 62.179, + 60.015, + 66.703, + 60.354, + 64.006, + 62.223, + 67.242, + 67.086, + 60.38 + ], + "queries": 29, + "safe": false, + "collision": false, + "unresolved": true + }, + "adaptive": { + "ms_all": [ + 61.031, + 59.139, + 59.902, + 59.849, + 62.906, + 61.306, + 62.88, + 63.963, + 71.313 + ], + "queries": 29, + "safe": false, + "collision": false, + "unresolved": true + } + }, + { + "i": 255, + "start_it": 50, + "dense_min_gap_mm": 0.08585115221168138, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 63.75, + 59.753, + 58.444, + 58.25, + 60.116, + 62.057, + 58.342, + 60.291, + 59.701 + ], + "queries": 25, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 61.57, + 57.158, + 53.871, + 58.927, + 54.978, + 53.82, + 54.922, + 57.996, + 57.458 + ], + "queries": 25, + "safe": true, + "collision": false, + "unresolved": false + } + }, + { + "i": 255, + "start_it": 181, + "dense_min_gap_mm": 0.08503341760172844, + "status_from_first_run": "safe", + "fixed": { + "ms_all": [ + 46.3, + 49.758, + 50.447, + 48.401, + 46.873, + 48.57, + 49.636, + 53.343, + 50.42 + ], + "queries": 12, + "safe": true, + "collision": false, + "unresolved": false + }, + "adaptive": { + "ms_all": [ + 50.053, + 49.962, + 45.927, + 54.987, + 50.534, + 47.286, + 49.108, + 47.473, + 48.419 + ], + "queries": 12, + "safe": true, + "collision": false, + "unresolved": false + } + } + ], + "summary_fixed": { + "calls": 432, + "p50_ms": 22.926, + "p90_ms": 58.434, + "p99_ms": 101.571, + "max_ms": 103.883, + "over_20ms": 225, + "queries_total": 504 + }, + "summary_adaptive": { + "calls": 432, + "p50_ms": 23.209, + "p90_ms": 57.333, + "p99_ms": 99.104, + "max_ms": 109.186, + "over_20ms": 225, + "queries_total": 504 + }, + "decision_identical": true, + "differs_only_where": [], + "batch": { + "fixed": { + "ms_all": [ + 259.922, + 261.672, + 259.965, + 259.131, + 260.367, + 259.934, + 262.252 + ], + "p50_ms": 259.965, + "counts": { + "safe": 37, + "collision": 1, + "unresolved": 10, + "outside_box": 0 + } + }, + "adaptive": { + "ms_all": [ + 211.69, + 216.566, + 214.546, + 220.756, + 208.403, + 208.567, + 207.766 + ], + "p50_ms": 211.69, + "counts": { + "safe": 37, + "collision": 1, + "unresolved": 10, + "outside_box": 0 + } + } + } +} \ No newline at end of file diff --git a/docs/experiment_round31_cert_cost_model.json b/docs/experiment_round31_cert_cost_model.json new file mode 100644 index 0000000..c4df0fd --- /dev/null +++ b/docs/experiment_round31_cert_cost_model.json @@ -0,0 +1,658 @@ +{ + "segments": 48, + "kin_fp": "2ebcbf17", + "root_gap_cap_mm": 20.0, + "formula": "L = ceil(log2(bound_pair/(ga+gb)))\uff0c\u67e5\u8be2\u6570 = 2^L + 1\uff1bbound_pair \u53d6\u6700\u7d27\u7ec4\u5bf9\uff0c\u4e0d\u7528\u5168\u7ec4\u5bf9\u6700\u5927\u503c", + "levels_needed_by_status": { + "safe": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4 + ], + "unresolved": [ + 5, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6 + ], + "collision": [ + 4 + ] + }, + "queries_needed_safe": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 5, + 5, + 5, + 5, + 9, + 9, + 9, + 9, + 9, + 17, + 17, + 17, + 17, + 17 + ], + "model_vs_measured_max_excess": 20, + "unresolved_needed_queries": [ + 33, + 33, + 33, + 33, + 33, + 65, + 65, + 65, + 65, + 65 + ], + "collision_dense_check": [ + { + "i": 180, + "start_it": 54, + "status": "collision", + "tight_group_pair": 5, + "bound_pair_mm": 29.09, + "endpoint_gap_sum_mm": 1.98854, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 5 + } + ], + "note": "\u6a21\u578b\u662f\u201c\u754c\u53ea\u968f\u4e8c\u5206\u51cf\u534a\u201d\u4e0b\u7684\u4e0b\u754c\uff1b\u5b9e\u6d4b\u67e5\u8be2\u53ef\u80fd\u66f4\u5c0f\uff08\u591a\u5c42\u91cc\u6709\u7684\u7ec4\u5bf9\u5148\u6ee1\u8db3\uff09\u6216\u66f4\u5927\uff08\u78b0\u649e\u6bb5\u63d0\u524d\u7ec8\u6b62\uff09\u3002", + "rows": [ + { + "i": 0, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 2.382, + "endpoint_gap_sum_mm": 17.77168, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 0, + "start_it": 8, + "status": "unresolved", + "tight_group_pair": 13, + "bound_pair_mm": 8.2833, + "endpoint_gap_sum_mm": 0.25216, + "levels_needed": 6, + "queries_needed": 65, + "queries_used_batch32": 17 + }, + { + "i": 0, + "start_it": 91, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 2.459, + "endpoint_gap_sum_mm": 14.45459, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 0, + "start_it": 173, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 6.8776, + "endpoint_gap_sum_mm": 15.48695, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 21, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 4.7095, + "endpoint_gap_sum_mm": 12.81844, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 21, + "start_it": 100, + "status": "unresolved", + "tight_group_pair": 18, + "bound_pair_mm": 1.3371, + "endpoint_gap_sum_mm": 0.03365, + "levels_needed": 6, + "queries_needed": 65, + "queries_used_batch32": 17 + }, + { + "i": 21, + "start_it": 127, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.5104, + "endpoint_gap_sum_mm": 0.68046, + "levels_needed": 2, + "queries_needed": 5, + "queries_used_batch32": 4 + }, + { + "i": 21, + "start_it": 282, + "status": "safe", + "tight_group_pair": 5, + "bound_pair_mm": 3.5692, + "endpoint_gap_sum_mm": 1.72327, + "levels_needed": 2, + "queries_needed": 5, + "queries_used_batch32": 4 + }, + { + "i": 84, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 11.7042, + "endpoint_gap_sum_mm": 13.79742, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 84, + "start_it": 170, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 4.9891, + "endpoint_gap_sum_mm": 0.3999, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 18 + }, + { + "i": 84, + "start_it": 234, + "status": "unresolved", + "tight_group_pair": 18, + "bound_pair_mm": 7.5939, + "endpoint_gap_sum_mm": 0.28698, + "levels_needed": 5, + "queries_needed": 33, + "queries_used_batch32": 31 + }, + { + "i": 84, + "start_it": 325, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 3.5738, + "endpoint_gap_sum_mm": 10.95173, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 128, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 4.4648, + "endpoint_gap_sum_mm": 16.52712, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 128, + "start_it": 31, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 2.1155, + "endpoint_gap_sum_mm": 14.24909, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 128, + "start_it": 62, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 0.3619, + "endpoint_gap_sum_mm": 12.62201, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 145, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.5691, + "endpoint_gap_sum_mm": 11.60111, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 145, + "start_it": 32, + "status": "safe", + "tight_group_pair": 4, + "bound_pair_mm": 4.6053, + "endpoint_gap_sum_mm": 0.67129, + "levels_needed": 3, + "queries_needed": 9, + "queries_used_batch32": 28 + }, + { + "i": 145, + "start_it": 138, + "status": "safe", + "tight_group_pair": 4, + "bound_pair_mm": 9.6062, + "endpoint_gap_sum_mm": 1.11765, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 15 + }, + { + "i": 145, + "start_it": 294, + "status": "safe", + "tight_group_pair": 5, + "bound_pair_mm": 8.2956, + "endpoint_gap_sum_mm": 0.61574, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 17 + }, + { + "i": 164, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 12.0298, + "endpoint_gap_sum_mm": 11.50625, + "levels_needed": 1, + "queries_needed": 3, + "queries_used_batch32": 3 + }, + { + "i": 164, + "start_it": 84, + "status": "safe", + "tight_group_pair": 5, + "bound_pair_mm": 18.0143, + "endpoint_gap_sum_mm": 1.7857, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 18 + }, + { + "i": 164, + "start_it": 182, + "status": "unresolved", + "tight_group_pair": 5, + "bound_pair_mm": 14.1522, + "endpoint_gap_sum_mm": 0.38976, + "levels_needed": 6, + "queries_needed": 65, + "queries_used_batch32": 17 + }, + { + "i": 164, + "start_it": 227, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 5.6457, + "endpoint_gap_sum_mm": 1.13586, + "levels_needed": 3, + "queries_needed": 9, + "queries_used_batch32": 10 + }, + { + "i": 175, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 6.5456, + "endpoint_gap_sum_mm": 15.18067, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 175, + "start_it": 46, + "status": "unresolved", + "tight_group_pair": 6, + "bound_pair_mm": 30.8668, + "endpoint_gap_sum_mm": 1.26529, + "levels_needed": 5, + "queries_needed": 33, + "queries_used_batch32": 32 + }, + { + "i": 175, + "start_it": 75, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 17.8885, + "endpoint_gap_sum_mm": 10.74989, + "levels_needed": 1, + "queries_needed": 3, + "queries_used_batch32": 3 + }, + { + "i": 175, + "start_it": 142, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 0.8185, + "endpoint_gap_sum_mm": 10.77208, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 180, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 3.4654, + "endpoint_gap_sum_mm": 14.04707, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 180, + "start_it": 14, + "status": "unresolved", + "tight_group_pair": 4, + "bound_pair_mm": 17.6609, + "endpoint_gap_sum_mm": 0.46562, + "levels_needed": 6, + "queries_needed": 65, + "queries_used_batch32": 17 + }, + { + "i": 180, + "start_it": 52, + "status": "safe", + "tight_group_pair": 5, + "bound_pair_mm": 27.7231, + "endpoint_gap_sum_mm": 3.97272, + "levels_needed": 3, + "queries_needed": 9, + "queries_used_batch32": 15 + }, + { + "i": 180, + "start_it": 54, + "status": "collision", + "tight_group_pair": 5, + "bound_pair_mm": 29.09, + "endpoint_gap_sum_mm": 1.98854, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 5 + }, + { + "i": 180, + "start_it": 94, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.1032, + "endpoint_gap_sum_mm": 12.22495, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 197, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.0839, + "endpoint_gap_sum_mm": 6.87225, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 197, + "start_it": 80, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 3.3325, + "endpoint_gap_sum_mm": 0.50053, + "levels_needed": 3, + "queries_needed": 9, + "queries_used_batch32": 29 + }, + { + "i": 197, + "start_it": 82, + "status": "unresolved", + "tight_group_pair": 18, + "bound_pair_mm": 5.7899, + "endpoint_gap_sum_mm": 0.16354, + "levels_needed": 6, + "queries_needed": 65, + "queries_used_batch32": 17 + }, + { + "i": 197, + "start_it": 211, + "status": "safe", + "tight_group_pair": 5, + "bound_pair_mm": 18.6183, + "endpoint_gap_sum_mm": 5.55945, + "levels_needed": 2, + "queries_needed": 5, + "queries_used_batch32": 11 + }, + { + "i": 215, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 2.4256, + "endpoint_gap_sum_mm": 12.47554, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 215, + "start_it": 104, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 4.7208, + "endpoint_gap_sum_mm": 14.00267, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 215, + "start_it": 178, + "status": "unresolved", + "tight_group_pair": 6, + "bound_pair_mm": 25.7963, + "endpoint_gap_sum_mm": 1.07014, + "levels_needed": 5, + "queries_needed": 33, + "queries_used_batch32": 30 + }, + { + "i": 215, + "start_it": 215, + "status": "safe", + "tight_group_pair": 6, + "bound_pair_mm": 9.2152, + "endpoint_gap_sum_mm": 8.57509, + "levels_needed": 1, + "queries_needed": 3, + "queries_used_batch32": 3 + }, + { + "i": 224, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 6.492, + "endpoint_gap_sum_mm": 10.02154, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 224, + "start_it": 52, + "status": "unresolved", + "tight_group_pair": 18, + "bound_pair_mm": 3.5989, + "endpoint_gap_sum_mm": 0.12354, + "levels_needed": 5, + "queries_needed": 33, + "queries_used_batch32": 32 + }, + { + "i": 224, + "start_it": 61, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 2.7788, + "endpoint_gap_sum_mm": 0.78961, + "levels_needed": 2, + "queries_needed": 5, + "queries_used_batch32": 5 + }, + { + "i": 224, + "start_it": 127, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.4884, + "endpoint_gap_sum_mm": 7.29024, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 255, + "start_it": 0, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 1.5332, + "endpoint_gap_sum_mm": 11.184, + "levels_needed": 0, + "queries_needed": 2, + "queries_used_batch32": 2 + }, + { + "i": 255, + "start_it": 25, + "status": "unresolved", + "tight_group_pair": 18, + "bound_pair_mm": 2.9831, + "endpoint_gap_sum_mm": 0.14423, + "levels_needed": 5, + "queries_needed": 33, + "queries_used_batch32": 29 + }, + { + "i": 255, + "start_it": 50, + "status": "safe", + "tight_group_pair": 4, + "bound_pair_mm": 7.2365, + "endpoint_gap_sum_mm": 0.61112, + "levels_needed": 4, + "queries_needed": 17, + "queries_used_batch32": 25 + }, + { + "i": 255, + "start_it": 181, + "status": "safe", + "tight_group_pair": 18, + "bound_pair_mm": 4.2961, + "endpoint_gap_sum_mm": 0.74979, + "levels_needed": 3, + "queries_needed": 9, + "queries_used_batch32": 12 + } + ] +} \ No newline at end of file diff --git a/docs/experiment_round31_certificates.json b/docs/experiment_round31_certificates.json new file mode 100644 index 0000000..535ea4a --- /dev/null +++ b/docs/experiment_round31_certificates.json @@ -0,0 +1,2909 @@ +{ + "trace": "ml/runs/round30_after.pt", + "tasks_sha256": "249bd93457825cda98c59e64d9a096d3473c69aeb3553de1dea6d9e56be71772", + "kin_fp": "2ebcbf17", + "device": "cuda", + "gpu": "NVIDIA GeForce RTX 3090", + "torch_version": "2.10.0+cu130", + "cpu_threads": 1, + "dtype": "float64", + "indices": [ + 0, + 21, + 84, + 128, + 145, + 164, + 175, + 180, + 197, + 215, + 224, + 255 + ], + "extra_segments": [ + [ + 180, + 54 + ] + ], + "selection": "First/middle/last moving segment and minimum original certified gap per task; plus explicit extra_segments.", + "cap_mm": 20.0, + "eps_mm": 0.0001, + "max_depth": 12, + "dense_max_step_deg": 0.01, + "timing": { + "scope": "B=1 certificate only, resident inputs, 3 warmups per segment; synchronized wall time, not policy or scheduling latency.", + "repeats_per_segment": 5, + "calls": 240, + "p50_ms": 21.984149992931634, + "p99_ms": 94.6568279986968, + "max_ms": 96.25669999513775, + "over_20ms": 125 + }, + "budgets": { + "2": { + "safe": 20, + "collision": 0, + "unresolved": 28, + "outside_box": 0, + "queries_p50": 2.0, + "queries_max": 2 + }, + "8": { + "safe": 26, + "collision": 1, + "unresolved": 21, + "outside_box": 0, + "queries_p50": 4.0, + "queries_max": 8 + }, + "32": { + "safe": 37, + "collision": 1, + "unresolved": 10, + "outside_box": 0, + "queries_p50": 4.0, + "queries_max": 32 + } + }, + "dense_collision_segments": 1, + "accepted_dense_collision_segments": 0, + "batch_single_match": true, + "scope": "Fixed recorded segments, not a new rollout. Dense replay is finite sampling; floating-point certification error is not formally bounded.", + "wall_s": 14.01201819999551, + "rows": [ + { + "i": 0, + "start_it": 0, + "a": [ + -129.89700317382812, + 46.68000030517578, + 43.49399948120117, + -97.46099853515625, + -85.10199737548828, + -139.7100067138672 + ], + "b": [ + -129.82916259765625, + 45.72635269165039, + 43.963138580322266, + -97.51583099365234, + -85.10295867919922, + -138.8212432861328 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 97, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 6.729400003678165, + 6.561099988175556, + 7.015299997874536, + 7.035200003883801, + 6.910900003276765 + ] + }, + { + "i": 0, + "start_it": 8, + "a": [ + -134.64456176757812, + 40.941246032714844, + 49.51477813720703, + -99.5326919555664, + -87.79167938232422, + -138.92703247070312 + ], + "b": [ + -135.88243103027344, + 40.539146423339844, + 49.65788269042969, + -99.16513061523438, + -88.7517318725586, + -138.44802856445312 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.22543440433956619, + 0.09802498024511408, + 0.02673023799951224 + ], + "dense_points": 125, + "dense_min_gap_mm": 0.02673023799951224, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 41.611399996327236, + 43.01740000664722, + 43.61409999546595, + 38.74109999742359, + 42.801899995538406 + ] + }, + { + "i": 0, + "start_it": 91, + "a": [ + -212.46780395507812, + 6.817297458648682, + 73.17422485351562, + -99.98272705078125, + -68.94158935546875, + -135.36358642578125 + ], + "b": [ + -213.3469696044922, + 7.116207122802734, + 73.1458969116211, + -99.0668716430664, + -69.05744171142578, + -134.4044952392578 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 97, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.254199997987598, + 7.200199994258583, + 7.205200003227219, + 7.429500008584, + 8.263199997600168 + ] + }, + { + "i": 0, + "start_it": 173, + "a": [ + -322.69256591796875, + 20.32101058959961, + 99.26252746582031, + -31.60543441772461, + -19.020532608032227, + -122.1075210571289 + ], + "b": [ + -321.76708984375, + 19.265727996826172, + 100.03636932373047, + -32.858062744140625, + -17.13552474975586, + -120.69457244873047 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 191, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.192099990788847, + 7.351100008236244, + 6.9011000014143065, + 7.23170000128448, + 6.645400004344992 + ] + }, + { + "i": 21, + "start_it": 0, + "a": [ + 178.76699829101562, + 101.91699981689453, + 25.283000946044922, + 31.58799934387207, + -12.178999900817871, + -6.464000225067139 + ], + "b": [ + 178.25379943847656, + 101.46851348876953, + 25.7228946685791, + 32.6153564453125, + -13.672625541687012, + -5.734858512878418 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 151, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.561499995063059, + 8.039299995289184, + 7.571699999971315, + 6.912900003953837, + 7.5483999971766025 + ] + }, + { + "i": 21, + "start_it": 100, + "a": [ + 163.39854431152344, + 83.62586212158203, + 7.4028639793396, + 104.95476531982422, + -66.62264251708984, + 6.020919322967529 + ], + "b": [ + 164.45985412597656, + 83.81096649169922, + 7.13951301574707, + 104.92399597167969, + -67.13624572753906, + 6.311112403869629 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.024589931226394413, + 0.01638000332591716, + 0.009057896844248958 + ], + "dense_points": 109, + "dense_min_gap_mm": 0.009057896844284485, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 42.14459999639075, + 43.253900003037415, + 40.67940000095405, + 41.11630000988953, + 39.54370001156349 + ] + }, + { + "i": 21, + "start_it": 127, + "a": [ + 160.35763549804688, + 83.30545806884766, + 10.201939582824707, + 105.19526672363281, + -72.41214752197266, + -0.4555850028991699 + ], + "b": [ + 160.561767578125, + 82.98810577392578, + 10.06912612915039, + 105.54032135009766, + -73.76152801513672, + 0.13696736097335815 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 4 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 4 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.44900786015032423, + 0.339678778194342, + 0.23144774091545095 + ], + "dense_points": 137, + "dense_min_gap_mm": 0.23144774091545095, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 22.45059999404475, + 21.265000003040768, + 22.161000000778586, + 24.320199998328462, + 24.991500002215616 + ] + }, + { + "i": 21, + "start_it": 282, + "a": [ + 139.78468322753906, + 87.256591796875, + 6.928672790527344, + 103.78778839111328, + -94.0, + 19.4688720703125 + ], + "b": [ + 139.78636169433594, + 87.40682220458984, + 7.167907238006592, + 104.04109191894531, + -94.0, + 17.00076675415039 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 4 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 4 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 249, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 23.821099995984696, + 21.921499996096827, + 22.7113000000827, + 21.751100008259527, + 22.03209999424871 + ] + }, + { + "i": 84, + "start_it": 0, + "a": [ + -49.198001861572266, + 52.39500045776367, + 108.7959976196289, + 75.53399658203125, + 82.302001953125, + -121.822998046875 + ], + "b": [ + -49.4459228515625, + 52.602474212646484, + 107.81159210205078, + 78.29228210449219, + 82.4559326171875, + -123.64354705810547 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 277, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.6034999947296456, + 6.988000008277595, + 6.903399989823811, + 7.036900002276525, + 7.50210000842344 + ] + }, + { + "i": 84, + "start_it": 170, + "a": [ + -76.1717758178711, + 37.784828186035156, + 34.79386901855469, + 105.30127716064453, + 75.49691009521484, + -188.74867248535156 + ], + "b": [ + -75.74366760253906, + 37.08754348754883, + 33.81704330444336, + 105.17554473876953, + 76.68071746826172, + -189.98818969726562 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 18 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.14945035939886608, + 0.19671518232993535, + 0.2504479833001625 + ], + "dense_points": 125, + "dense_min_gap_mm": 0.14945035939886608, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 48.117300000740215, + 48.97700001311023, + 47.32250000233762, + 46.64950000005774, + 48.344100010581315 + ] + }, + { + "i": 84, + "start_it": 234, + "a": [ + -73.88483428955078, + 35.94020080566406, + 21.0172119140625, + 104.0068359375, + 85.40396881103516, + -206.0563507080078 + ], + "b": [ + -72.72090911865234, + 36.0114631652832, + 19.592090606689453, + 104.31449890136719, + 84.76660919189453, + -206.42822265625 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 31 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.28077318804155915, + 0.1346110575466568, + 0.006206321604114606 + ], + "dense_points": 145, + "dense_min_gap_mm": 0.006206321604114606, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 56.602399999974295, + 50.749500005622394, + 50.981799999135546, + 54.928300000028685, + 54.231300004175864 + ] + }, + { + "i": 84, + "start_it": 325, + "a": [ + -76.70722198486328, + 56.22803497314453, + -22.394025802612305, + 92.67782592773438, + 43.25936508178711, + -242.589599609375 + ], + "b": [ + -77.06134033203125, + 58.006996154785156, + -22.700603485107422, + 91.8469009399414, + 41.79410934448242, + -243.73992919921875 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 179, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 9.203199995681643, + 7.59690000268165, + 7.063600001856685, + 6.952900002943352, + 8.489799991366453 + ] + }, + { + "i": 128, + "start_it": 0, + "a": [ + -153.53900146484375, + 100.4540023803711, + 108.43399810791016, + 3.378999948501587, + 70.25399780273438, + -179.84800720214844 + ], + "b": [ + -155.02593994140625, + 99.90169525146484, + 109.36478424072266, + 3.3731729984283447, + 71.80243682861328, + -180.14443969726562 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 157, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.907000006525777, + 6.725299987010658, + 7.0949000073596835, + 7.4764000019058585, + 7.07690000126604 + ] + }, + { + "i": 128, + "start_it": 31, + "a": [ + -175.60952758789062, + 67.44345092773438, + 128.9717559814453, + -8.957176208496094, + 47.89845657348633, + -188.41848754882812 + ], + "b": [ + -175.4740447998047, + 66.4386215209961, + 128.96144104003906, + -8.142782211303711, + 46.398014068603516, + -187.75416564941406 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 153, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.671400002436712, + 6.666999994195066, + 7.268200002727099, + 7.4112000002060086, + 6.950599999981932 + ] + }, + { + "i": 128, + "start_it": 62, + "a": [ + -167.4433135986328, + 58.843257904052734, + 131.26661682128906, + -12.632474899291992, + 17.41288185119629, + -199.6572265625 + ], + "b": [ + -167.56259155273438, + 59.10321044921875, + 131.27362060546875, + -12.503020286560059, + 16.727561950683594, + -199.6572265625 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 71, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 8.36580000759568, + 7.690600003115833, + 7.081500007188879, + 7.1050999977160245, + 6.938999998965301 + ] + }, + { + "i": 145, + "start_it": 0, + "a": [ + -49.39500045776367, + 84.78299713134766, + 2.74399995803833, + 14.840999603271484, + -86.78299713134766, + 81.93199920654297 + ], + "b": [ + -49.05215072631836, + 84.58912658691406, + 2.8553385734558105, + 14.432334899902344, + -89.76477813720703, + 82.87442016601562 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 301, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 6.831699996837415, + 7.401199996820651, + 7.756699997116812, + 7.635899994056672, + 7.27319999714382 + ] + }, + { + "i": 145, + "start_it": 32, + "a": [ + -38.49760818481445, + 80.59332275390625, + 8.573882102966309, + 19.328388214111328, + -94.0, + 81.25394439697266 + ], + "b": [ + -38.4334716796875, + 80.76519775390625, + 8.173197746276855, + 19.79511260986328, + -94.0, + 81.10069274902344 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 8 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 28 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.33287422470537287, + 0.002145835308146715 + ], + "dense_points": 49, + "dense_min_gap_mm": 0.002145835308116517, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 89.22700000402983, + 88.79850000084843, + 85.64699999988079, + 85.88339999550954, + 87.9966000065906 + ] + }, + { + "i": 145, + "start_it": 138, + "a": [ + -36.94679260253906, + 73.69013214111328, + 17.68172264099121, + 35.141197204589844, + -93.79244995117188, + 91.9666976928711 + ], + "b": [ + -36.55375671386719, + 72.90190887451172, + 17.67761993408203, + 34.40311813354492, + -94.0, + 91.08394622802734 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 15 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.3639803422448882, + 0.4918403571602372, + 0.5 + ], + "dense_points": 91, + "dense_min_gap_mm": 0.36398034224492015, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 37.53720001259353, + 40.69199999503326, + 40.97689999616705, + 47.65639999823179, + 42.724999992060475 + ] + }, + { + "i": 145, + "start_it": 294, + "a": [ + -36.649417877197266, + 48.849388122558594, + 21.484832763671875, + 71.40351867675781, + -94.0, + 80.16097259521484 + ], + "b": [ + -36.87896728515625, + 48.70134735107422, + 21.58761215209961, + 71.98517608642578, + -92.94639587402344, + 79.96569061279297 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.2755695672848173, + 0.3167671327076338, + 0.34017278825765906 + ], + "dense_points": 107, + "dense_min_gap_mm": 0.275569567284915, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 42.032299999846146, + 42.0905000064522, + 40.54399998858571, + 42.91360000206623, + 44.96490000747144 + ] + }, + { + "i": 164, + "start_it": 0, + "a": [ + -65.98200225830078, + 5.59499979019165, + -64.66899871826172, + -72.91200256347656, + 85.73200225830078, + -86.37699890136719 + ], + "b": [ + -66.10198974609375, + 5.314083099365234, + -66.09529876708984, + -74.96588897705078, + 87.62164306640625, + -83.87663269042969 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 253, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 17.027800000505522, + 16.79669998702593, + 14.890500009641983, + 14.193999988492578, + 14.70569999946747 + ] + }, + { + "i": 164, + "start_it": 84, + "a": [ + -34.38801574707031, + 35.64968490600586, + -65.72469329833984, + -103.13802337646484, + 82.95342254638672, + -74.32974243164062 + ], + "b": [ + -34.07544708251953, + 36.09440994262695, + -65.06011962890625, + -104.64086151123047, + 83.82749938964844, + -74.09517669677734 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 18 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.3668900237504342 + ], + "dense_points": 153, + "dense_min_gap_mm": 0.3668900237504289, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 49.606499989749864, + 52.10090000764467, + 50.73559998709243, + 50.765600011800416, + 48.410699993837625 + ] + }, + { + "i": 164, + "start_it": 182, + "a": [ + -34.34554672241211, + 43.43256378173828, + -57.71779251098633, + -109.22679901123047, + 88.9667739868164, + -91.00528717041016 + ], + "b": [ + -33.745609283447266, + 42.750244140625, + -57.643089294433594, + -109.63624572753906, + 88.19518280029297, + -90.33666229248047 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.09610528899724358, + 0.029362602524944492, + 0.2936552092830045 + ], + "dense_points": 79, + "dense_min_gap_mm": 0.008494152641066677, + "dense_min_fraction": 0.3333333333333333, + "batch_single_match": true, + "latency_ms": [ + 43.00700000021607, + 43.12200000276789, + 42.72909999417607, + 44.29550000349991, + 40.75419998844154 + ] + }, + { + "i": 164, + "start_it": 227, + "a": [ + -34.901363372802734, + 44.761199951171875, + -56.601627349853516, + -110.71465301513672, + 86.77456665039062, + -94.58623504638672 + ], + "b": [ + -35.130619049072266, + 44.58083724975586, + -57.355308532714844, + -109.90960693359375, + 85.01383972167969, + -93.3406982421875 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 10 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.32106192385578325, + 0.5, + 0.5 + ], + "dense_points": 179, + "dense_min_gap_mm": 0.3210619238556909, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 40.47420001006685, + 42.0936000009533, + 43.358199996873736, + 38.96140000142623, + 38.002399989636615 + ] + }, + { + "i": 175, + "start_it": 0, + "a": [ + -28.854000091552734, + 43.33000183105469, + -137.87399291992188, + -6.894999980926514, + -88.0009994506836, + -43.744998931884766 + ], + "b": [ + -28.625452041625977, + 42.392921447753906, + -138.96527099609375, + -7.418555736541748, + -91.61947631835938, + -42.42218780517578 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 363, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 9.474999998928979, + 9.064400001079775, + 9.296899996115826, + 8.08820000384003, + 8.044900008826517 + ] + }, + { + "i": 175, + "start_it": 46, + "a": [ + -43.55823516845703, + 4.755762577056885, + -122.77007293701172, + -55.326210021972656, + -94.0, + -47.891082763671875 + ], + "b": [ + -43.104862213134766, + 3.484595775604248, + -121.4237060546875, + -56.84135055541992, + -94.0, + -50.1800651550293 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 32 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.18812628629566497 + ], + "dense_points": 231, + "dense_min_gap_mm": 0.18812628629569694, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 58.066300000064075, + 61.11300000338815, + 58.46390000078827, + 57.659600002807565, + 58.62820000038482 + ] + }, + { + "i": 175, + "start_it": 75, + "a": [ + -22.01314353942871, + -33.119178771972656, + -66.75313568115234, + -72.58383178710938, + -93.862060546875, + -43.840816497802734 + ], + "b": [ + -20.922582626342773, + -34.49407196044922, + -63.76513671875, + -71.16360473632812, + -93.68777465820312, + -43.43205261230469 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 301, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 14.627099997596815, + 13.875700009521097, + 14.972999997553416, + 14.853600005153567, + 15.635799994925037 + ] + }, + { + "i": 175, + "start_it": 142, + "a": [ + 66.49290466308594, + -75.0376205444336, + -53.489070892333984, + -20.50182342529297, + -25.850229263305664, + -36.40988540649414 + ], + "b": [ + 66.8529052734375, + -75.07357788085938, + -53.55341720581055, + -20.30047607421875, + -25.561447143554688, + -36.40988540649414 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 39, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.54949999100063, + 8.07609999901615, + 6.475500005763024, + 6.946900000912137, + 6.769200001144782 + ] + }, + { + "i": 180, + "start_it": 0, + "a": [ + 41.2130012512207, + 49.35300064086914, + -149.80799865722656, + -8.980999946594238, + -88.56600189208984, + 83.44999694824219 + ], + "b": [ + 40.29774475097656, + 48.74098205566406, + -150.34457397460938, + -9.335786819458008, + -90.20982360839844, + 84.27982330322266 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 167, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.320399992750026, + 7.198599996627308, + 6.678300007479265, + 7.548199995653704, + 7.787900001858361 + ] + }, + { + "i": 180, + "start_it": 14, + "a": [ + 19.995616912841797, + 33.764652252197266, + -147.17018127441406, + -9.744346618652344, + -94.0, + 87.17225646972656 + ], + "b": [ + 19.1818904876709, + 31.95210075378418, + -147.27853393554688, + -9.688676834106445, + -94.0, + 85.88319396972656 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.44140547697944754, + 0.2397528145287069, + 0.024217395776846118 + ], + "dense_points": 183, + "dense_min_gap_mm": 0.02421739577681592, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 42.048600007547066, + 40.65500000433531, + 40.99560000759084, + 43.44489998766221, + 41.50560000562109 + ] + }, + { + "i": 180, + "start_it": 52, + "a": [ + 4.704625129699707, + -3.920879364013672, + -151.17308044433594, + -21.058462142944336, + -94.0, + 93.88462829589844 + ], + "b": [ + 3.5987415313720703, + -5.912879467010498, + -151.0857391357422, + -21.70722007751465, + -94.0, + 95.06877899169922 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 15 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 201, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 41.09739999694284, + 44.69590001099277, + 41.433199992752634, + 37.92760000214912, + 40.52860000228975 + ] + }, + { + "i": 180, + "start_it": 54, + "a": [ + 3.0118656158447266, + -7.4926042556762695, + -151.498291015625, + -22.7498836517334, + -94.0, + 93.50477600097656 + ], + "b": [ + 1.8212896585464478, + -9.327469825744629, + -150.87704467773438, + -23.00735855102539, + -94.0, + 93.73664855957031 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": true, + "unresolved": false, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": true, + "unresolved": false, + "outside_box": false, + "queries": 5 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.11723226411035093, + 0.06521150921175334 + ], + "dense_points": 185, + "dense_min_gap_mm": -0.14927288174659914, + "dense_min_fraction": 0.7663043478260869, + "batch_single_match": true, + "latency_ms": [ + 22.892499997396953, + 23.012100005871616, + 23.300700006075203, + 22.7283999993233, + 21.936199991614558 + ] + }, + { + "i": 180, + "start_it": 94, + "a": [ + -35.432090759277344, + -50.309993743896484, + -140.23953247070312, + -15.180586814880371, + -92.03694915771484, + 104.1745834350586 + ], + "b": [ + -35.44911193847656, + -50.45164489746094, + -140.15255737304688, + -15.451539039611816, + -92.4618148803711, + 104.1745834350586 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 45, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 8.00359999993816, + 7.082199997967109, + 7.0684999955119565, + 6.804000004194677, + 6.674300006125122 + ] + }, + { + "i": 197, + "start_it": 0, + "a": [ + 20.11199951171875, + -20.01300048828125, + -177.85000610351562, + 32.74599838256836, + -70.88800048828125, + -30.111000061035156 + ], + "b": [ + 19.769636154174805, + -19.72504997253418, + -177.95089721679688, + 32.98310470581055, + -70.94517517089844, + -31.538543701171875 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 145, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.268100001965649, + 7.370400009676814, + 7.459999993443489, + 7.4653000046964735, + 7.0355999923776835 + ] + }, + { + "i": 197, + "start_it": 80, + "a": [ + 17.877527236938477, + 19.090761184692383, + -144.85064697265625, + 102.4058609008789, + -94.0, + -27.006437301635742 + ], + "b": [ + 17.443218231201172, + 18.530183792114258, + -144.4453582763672, + 102.95567321777344, + -93.69444274902344, + -26.02744483947754 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 8 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 29 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.4994652464577527, + 0.24752301820599776, + 0.0010684324191032601 + ], + "dense_points": 99, + "dense_min_gap_mm": 0.0010684324191032601, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 92.01549999124836, + 93.42170000309125, + 95.44649999588728, + 96.2541000044439, + 96.25669999513775 + ] + }, + { + "i": 197, + "start_it": 82, + "a": [ + 17.443218231201172, + 18.530183792114258, + -144.4453582763672, + 102.95567321777344, + -93.69444274902344, + -26.02744483947754 + ], + "b": [ + 17.633718490600586, + 19.38158416748047, + -145.62786865234375, + 102.90189361572266, + -94.0, + -26.661575317382812 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 17 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.0010684324191032601, + 0.0745300232557966, + 0.16246696348835954 + ], + "dense_points": 121, + "dense_min_gap_mm": 0.0010684324191032601, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 39.04200000397395, + 42.01479999755975, + 43.122900009620935, + 41.09819998848252, + 41.70739999972284 + ] + }, + { + "i": 197, + "start_it": 211, + "a": [ + 36.29408645629883, + 40.308135986328125, + -118.63715362548828, + 102.82049560546875, + -92.83135223388672, + -71.03400421142578 + ], + "b": [ + 36.40144729614258, + 40.822731018066406, + -117.01183319091797, + 102.06942749023438, + -92.3343505859375, + -71.58668518066406 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 11 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.3938164768172676 + ], + "dense_points": 165, + "dense_min_gap_mm": 0.39381647681728715, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 45.84959999192506, + 48.0915000080131, + 48.57179999817163, + 45.35899999609683, + 45.93089999980293 + ] + }, + { + "i": 215, + "start_it": 0, + "a": [ + 47.05099868774414, + -1.1790000200271606, + -94.30999755859375, + -43.12799835205078, + 67.06700134277344, + -119.86699676513672 + ], + "b": [ + 47.70393371582031, + -1.2000433206558228, + -94.3956298828125, + -43.92270278930664, + 69.65882873535156, + -118.4485855102539 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 261, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 6.908700001076795, + 7.373500004177913, + 7.751900004222989, + 7.517999998526648, + 6.856099993456155 + ] + }, + { + "i": 215, + "start_it": 104, + "a": [ + 25.786008834838867, + 12.359390258789062, + -92.90215301513672, + -33.66339111328125, + 89.0, + -106.12916564941406 + ], + "b": [ + 25.962697982788086, + 13.539469718933105, + -92.20018768310547, + -33.12545394897461, + 89.0, + -105.4173355102539 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 121, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 8.093800002825446, + 7.14729999890551, + 7.000099998549558, + 7.359700000961311, + 7.358200004091486 + ] + }, + { + "i": 215, + "start_it": 178, + "a": [ + 35.427268981933594, + 34.558509826660156, + -72.82233428955078, + 12.143022537231445, + 89.0, + -103.00888061523438 + ], + "b": [ + 36.23137283325195, + 33.95960235595703, + -74.02835083007812, + 13.38271427154541, + 89.0, + -102.88185119628906 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 30 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.21123829586868936 + ], + "dense_points": 125, + "dense_min_gap_mm": 0.2112382958686112, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 53.157100002863444, + 47.505599999567494, + 51.7870000039693, + 48.38700000254903, + 50.67599999892991 + ] + }, + { + "i": 215, + "start_it": 215, + "a": [ + 39.99435043334961, + 55.07133865356445, + -61.920082092285156, + 22.34070587158203, + 89.0, + -96.23789978027344 + ], + "b": [ + 39.93909454345703, + 55.11402893066406, + -61.27155685424805, + 23.176910400390625, + 89.0, + -95.58428955078125 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 3 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 85, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 14.130399998975918, + 13.505800001439638, + 16.70729999023024, + 15.093599999090657, + 13.847299996996298 + ] + }, + { + "i": 224, + "start_it": 0, + "a": [ + -127.4469985961914, + 7.84499979019165, + -124.22799682617188, + -20.968000411987305, + -21.510000228881836, + -35.505001068115234 + ], + "b": [ + -128.1762237548828, + 7.845335483551025, + -124.68489074707031, + -22.665889739990234, + -21.8239803314209, + -33.857879638671875 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 171, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 6.720999997924082, + 7.3081999871646985, + 7.375400004093535, + 6.865500006824732, + 7.2502999973949045 + ] + }, + { + "i": 224, + "start_it": 52, + "a": [ + -154.50115966796875, + 56.895721435546875, + -131.17727661132812, + -107.6463851928711, + 51.83047866821289, + 30.719865798950195 + ], + "b": [ + -154.74261474609375, + 58.03839111328125, + -130.45086669921875, + -107.59673309326172, + 54.551025390625, + 34.16584014892578 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 32 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.11941707516320754, + 0.05837558837967549, + 0.0041216155493710716 + ], + "dense_points": 347, + "dense_min_gap_mm": 0.0041216155493710716, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 49.53939998813439, + 47.96619999979157, + 48.72070001147222, + 50.57060001126956, + 47.99399999319576 + ] + }, + { + "i": 224, + "start_it": 61, + "a": [ + -151.47787475585938, + 63.90135955810547, + -127.35393524169922, + -106.83383178710938, + 68.21434020996094, + 43.2109489440918 + ], + "b": [ + -151.67506408691406, + 64.48358917236328, + -126.80291748046875, + -106.77689361572266, + 69.07058715820312, + 43.55580520629883 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 5 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.3681432358808898, + 0.3927160608157152, + 0.4214646329465488 + ], + "dense_points": 87, + "dense_min_gap_mm": 0.36814323588093956, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 21.668800007319078, + 23.295999999390915, + 24.40940000815317, + 22.512999988975935, + 22.985600007814355 + ] + }, + { + "i": 224, + "start_it": 127, + "a": [ + -155.90847778320312, + 83.35918426513672, + -103.46139526367188, + -103.46186065673828, + 79.26010131835938, + 12.326665878295898 + ], + "b": [ + -155.9666290283203, + 83.57202911376953, + -103.1726303100586, + -103.41935729980469, + 79.26062774658203, + 11.921751022338867 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 43, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.680999988224357, + 7.302000012714416, + 7.229599999845959, + 7.0241999928839505, + 7.230100003653206 + ] + }, + { + "i": 255, + "start_it": 0, + "a": [ + -65.5479965209961, + 71.86499786376953, + 27.461999893188477, + -75.0479965209961, + 60.32500076293945, + 151.8719940185547 + ], + "b": [ + -64.76190185546875, + 73.02678680419922, + 27.157546997070312, + -75.07860565185547, + 60.55022430419922, + 152.8406982421875 + ], + "budgets": { + "2": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 2 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.5, + 0.5 + ], + "dense_points": 119, + "dense_min_gap_mm": 0.5, + "dense_min_fraction": 0.0, + "batch_single_match": true, + "latency_ms": [ + 7.215799996629357, + 7.5080999959027395, + 8.95930000115186, + 7.308600004762411, + 7.1423000044887885 + ] + }, + { + "i": 255, + "start_it": 25, + "a": [ + -46.38248062133789, + 84.40530395507812, + 23.47674560546875, + -107.27108764648438, + 68.07844543457031, + 161.3201904296875 + ], + "b": [ + -46.50617980957031, + 83.7364501953125, + 23.99578857421875, + -107.46881103515625, + 66.24947357177734, + 159.46939086914062 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 29 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.13961519208955409, + 0.10476272019827348, + 0.004616787795125532 + ], + "dense_points": 187, + "dense_min_gap_mm": 0.004616787795093558, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 58.66480000258889, + 57.63209999713581, + 64.85690000408795, + 58.386099990457296, + 61.912600009236485 + ] + }, + { + "i": 255, + "start_it": 50, + "a": [ + -43.96152114868164, + 86.47344207763672, + 23.449050903320312, + -107.29344177246094, + 68.23883819580078, + 170.1770782470703 + ], + "b": [ + -43.47820281982422, + 86.82785034179688, + 23.401710510253906, + -106.88642120361328, + 67.67750549316406, + 169.2616729736328 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 5 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 25 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.11278872003164686, + 0.268776741852907, + 0.08585115221168138 + ], + "dense_points": 93, + "dense_min_gap_mm": 0.08585115221168138, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 60.49430000712164, + 55.79679999209475, + 58.86250000912696, + 55.705499995383434, + 56.31909999647178 + ] + }, + { + "i": 255, + "start_it": 181, + "a": [ + -44.21513366699219, + 87.28284454345703, + 24.540998458862305, + -105.7985610961914, + 67.50021362304688, + 163.2630615234375 + ], + "b": [ + -44.39809036254883, + 87.89170837402344, + 24.914226531982422, + -106.78857421875, + 65.2450180053711, + 162.78314208984375 + ], + "budgets": { + "2": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 2 + }, + "8": { + "safe": false, + "collision": false, + "unresolved": true, + "outside_box": false, + "queries": 8 + }, + "32": { + "safe": true, + "collision": false, + "unresolved": false, + "outside_box": false, + "queries": 12 + } + }, + "previous_midpoint_endpoint_gap_mm": [ + 0.5, + 0.37057023900523944, + 0.08503341760172844 + ], + "dense_points": 227, + "dense_min_gap_mm": 0.08503341760172844, + "dense_min_fraction": 1.0, + "batch_single_match": true, + "latency_ms": [ + 51.409199993941, + 46.75140000472311, + 52.262299999711104, + 45.60309999214951, + 44.446600004448555 + ] + } + ] +} \ No newline at end of file diff --git a/docs/experiment_round31_distance.json b/docs/experiment_round31_distance.json new file mode 100644 index 0000000..70028fa --- /dev/null +++ b/docs/experiment_round31_distance.json @@ -0,0 +1,24 @@ +{ + "baseline_commit": "95da491", + "poses": "first 64 existing parity poses", + "n_poses": 64, + "kin_fp": "2ebcbf17", + "dtype": "float64", + "degenerate_capsules": [ + 686 + ], + "pairs_with_second_degenerate": 670, + "evaluated_pairs": 42880, + "changed_pairs_over_1e_8": 20661, + "old_minus_new_min_mm": 0.0, + "old_minus_new_max_mm": 86.00309853133399, + "new_reverse_max_abs_mm": 0.0, + "worst": { + "pose": 29, + "first_capsule": 430, + "second_capsule": 686, + "old_distance_mm": 493.354753665718, + "new_distance_mm": 407.35165513438403 + }, + "scope": "Raw capsule distances; does not imply these pairs win the group minimum." +} \ No newline at end of file diff --git a/docs/experiment_round31_kernel_replay.json b/docs/experiment_round31_kernel_replay.json new file mode 100644 index 0000000..201e908 --- /dev/null +++ b/docs/experiment_round31_kernel_replay.json @@ -0,0 +1,16 @@ +{ + "baseline_commit": "95da491", + "sample_source": "docs/experiment_round31_certificates.json", + "segments": 48, + "dense_points": 7586, + "max_step_deg": 0.01, + "cap_mm": 0.5, + "dtype": "float64", + "device": "cuda", + "kin_fp": "2ebcbf17", + "max_group_gap_difference_mm": 0.0, + "group_gaps_changed_over_1e_8": 0, + "minimum_gaps_changed_over_1e_8": 0, + "collision_bool_mismatches": 0, + "wall_s": 4.18259759999637 +} \ No newline at end of file diff --git a/docs/experiment_round31_parity.json b/docs/experiment_round31_parity.json new file mode 100644 index 0000000..50de293 --- /dev/null +++ b/docs/experiment_round31_parity.json @@ -0,0 +1,10 @@ +{ + "n": 2000, + "fk_max_abs_mm": 4.547473508864641e-13, + "orient_max_abs": 3.3306690738754696e-16, + "gap_max_abs_mm": 2.5224267119483557e-13, + "collide_bool_mismatch": 0, + "feat_max_abs": 5.960463655974024e-08, + "grad_rel_err_max": 1.8474076070450906e-06, + "PASS": true +} diff --git a/docs/探索日志.md b/docs/探索日志.md index 87e055b..87b5a44 100644 --- a/docs/探索日志.md +++ b/docs/探索日志.md @@ -582,6 +582,27 @@ - **新增硬约束证据**:before/after 两组256题实际轨迹都出现超速,最大 **1.660004×VMAX**(来源是动作限幅后叠加0.3×gain2.2反馈)。实际各轴最大速度约 `[99.600,99.600,149.400,149.400,199.200,298.800]°/s`,并非只看原始指令推测。行程仍约参考2.425倍;速度、加速度和真实控制时延均未达部署验收。历史 `travel` 累积的是指令而非夹紧后位移,本轮已同时列出实际轨迹重算值,不悄悄换分母。 - **结论与下一步**:逐步限位一致性修复有效,未牺牲本批到达率;但加密审计仍检出段内碰撞,**不能部署、不能宣称零碰撞或50 Hz合格**。下一轮先验证更强的段内认证,再单独评估反馈后的速度/加速度约束与真实端到端调度;每次保持小样本单变量对照,继续保留失败证据。 +## 轮次 31:连续段认证的确定界与成本实测(exp: `exp/dagger-deploy`,判据变强,实测进不了 20 ms) + +- **假设与判据**:轮次 30 的端点/中点检查漏掉段内碰撞(第180题 1.08–1.10 s,段内 −0.14927 mm,端点/中点均正)。若用可证明的全姿态运动界对整段做 Lipschitz 判据,应当(a) 在同一个漏检段上给出碰撞或拒绝,(b) 预算不足时只会拒绝而不会放行,(c) 不放宽 `>0` 判据。判据失败或耗时超预算都算负结论,必须实测不能外推。 +- **确定界替代随机采样界**:JS 侧 `leverTable(4000)`/`leverBounds(20000)` 是随机姿态最大值再 ×1.05,不是全姿态上界。本轮按三角不等式给闭式界:组 g 的胶囊端点到关节 k( 界,即单端间隙至少 3.0–24.4 mm。实际执行段的间隙普遍只有 0.001–0.5 mm,所以“必须细分”是结构性的,不是实现缺陷。 +- **基础求距 bug 与影响范围**:模型里有 1 个退化胶囊(索引 686,组 3)。旧 `seg_seg_dist` 在第二条线段退化成点时固定取该点为第二条起点,没把点投影到第一条线段上——[0,2] 段对点 1 的实测距离旧值 1 mm、反向调用约 1e−9 mm、真值 0。修复后在已有 2000 个对拍姿态的前 64 个姿态上,670 个“退化胶囊作第二条”的细对里 **20661/42880 个距离变小(旧值偏大,最大 86.003 mm)**,正反调用一致。但这批变化没有进入判定:把轮次 30 修复后 48 段的 7586 个 0.01° 加密点分别用修复前(95da491)与修复后内核重算,**组最小间隙逐位相同(最大差 0.0 mm)、碰撞布尔差 0**;`python -m ml.eval.check_parity` 仍 PASS(2000 样本,fk 4.55e−13 mm、间隙 2.52e−13 mm、特征 5.96e−08、梯度相对误差 1.85e−06、碰撞布尔差 0)。即这轮修复是正确的,但不解释轮次 30 的漏检,也不改变既有成绩。 +- **认证实现**:`Kin.certify_segments` 为 float64 批量前沿二分,每根段独立查询预算,端点间隙用 `min(gap,cap)` 故钳制只会更保守;判据 `ga+gb > bound+2eps` 且两端 >eps,任一子段碰撞即整根判碰撞;超深度、超预算、非有限间隙、越出关节盒一律拒绝(`unresolved`/`outside_box`),不放行未知。宽相位 cap 可按本层界收到 `bound/2+eps`(`adaptive_cap`)。**尚未接入 rollout,未改查看器默认。** +- **48 段固定样本**(`docs/experiment_round31_certificates.json`,沿用轮次 30 的 12 题,每题取首/中/末移动段 + 原证书最小间隙段 + 显式指定 180:54;cap=20、eps=1e−4、max_depth=12): + | 每根查询预算 | 判安全 | 判碰撞 | 未知拒绝 | 查询数 p50/max | + |---|---|---|---|---| + | 2 | 20 | 0 | 28 | 2 / 2 | + | 8 | 26 | 1 | 21 | 4 / 8 | + | 32 | 37 | 1 | 10 | 4 / 32 | + - 已知漏检段(180 题执行段 54)**判碰撞,仅用 5 次查询**;该段原证书 `certified=true`、原内部 `col=0`。48 段里 0.01° 加密采样检出碰撞 1 段,认证接受该类段 **0 段**;整批与逐根调用结果逐位一致。 + - 拒绝不等于安全:预算 2 时 28 段全部落 `unresolved`,实现不会把未知当通过。 +- **成本模型对上实测**(`docs/experiment_round31_cert_cost_model.json`):按最紧组对的界,所需层数 `L=ceil(log2(bound_pair/(ga+gb)))`、查询数 `2^L+1`。37 个判安全段需要 2–17 次(L=0..4),10 个未知段需要 **33 或 65 次**(L=5..6),与预算 32 恰好卡在中间一致;碰撞段因提前撞到负间隙只用 5 次。结论:认证成本由 `bound/间隙` 的对数决定,**降低界或提高间隙余量**才是可行杠杆,加预算只是线性买单。 +- **耗时负结论**(CUDA float64、B=1、驻留输入、每段4次预热+9次计时、变体按段交错,`docs/experiment_round31_adaptive_cap.json`):单段认证 **P50 22.93 ms、P90 58.43 ms、P99 101.57 ms,432 次里 225 次 > 20 ms**;自适应 cap 交错重测 P50 23.21 ms、P99 99.10 ms,**决策完全相同、耗时无收益**。先前顺序测得的“1.6×、整批 72→14.8 ms”经交错复测判定为 GPU 时钟/顺序漂移,不作为结论(48 根整批复测 260→212 ms 仍受同一偏差影响,且部署不会出现 48 根同时认证)。因此**连续认证按当前实现不能进 20 ms,更不能宣称 50 Hz**。 +- **回归与判据灵敏度**:`python -m unittest tests.test_eval_cl` **23 项通过**(轮次 30 为 14 项)。新增段认证 8 项覆盖:薄障碍段内碰撞被界抓到而清晰段被接受、预算/深度耗尽只拒不放、恒间隙合成段上预算 4/8/9 对应查询 3/5/9(验证细分层数与查询数的解析关系)、批量与逐根及乱序一致、空批与全拒前沿、NaN/±Inf 间隙拒绝、越界拒绝、退化距离对称性与梯度。**变异实测**:把类型门去掉后 `max_depth=torch.tensor(255,dtype=torch.uint8)` 会回绕成 `range(0)`、整段判据被跳过,真实间隙 −0.05 mm 的段直接返回 `safe=true`;加门后同一调用报 `certification budgets must be plain ints`。这是本轮抓到的第二个误放行路径(第一个是轮次 30 的未夹紧认证)。 +- **口径与边界**:认证只在 float64 下进行,浮点求距误差没有形式上界(`seg_seg_dist` 距离下限约 1e−9 mm),eps=1e−4 mm 是工程容差不是证明;48 段取自轮次 30 修复后的执行轨迹,是固定样本不是新策略闭环;连续认证未接入 rollout,实际执行仍走端点/中点离散检查;速度/加速度超限(轮次 30 实测最大 1.66×VMAX)本轮未处理。 +- **结论与下一步**:判据确实变强(抓到离散检查漏掉的段内碰撞、未知只拒不放),但成本与 `bound/间隙` 的对数绑定,**当前实现不能部署,也不得把“认证通过”说成零碰撞**。下一步两条:(1) 把逐层依赖的二分改成**一次均匀细分**(固定层数、单个 gaps 调用覆盖全部子段),其实时可行性取决于几何查询成本随批大小是否近似平坦;(2) 把余量要求移到规划/速度侧——实际轨迹贴着 0.001–0.02 mm 间隙走,任何认证方案都会退化成几十次查询,而反馈叠加后的速度约束本来就是未完成项。 + ## 分支清理(2026-10-20) - `feat/fb-mix`(8e5431c):反馈混合方案的中间分支,**已验证是 `exp/dagger-deploy` 的祖先**(所有提交都在后者历史里),本地/远端分支删除,内容保留在 exp/dagger-deploy。 diff --git a/ml/common/kin_torch.py b/ml/common/kin_torch.py index 165d8be..1f3744a 100644 --- a/ml/common/kin_torch.py +++ b/ml/common/kin_torch.py @@ -38,7 +38,8 @@ def seg_seg_dist(p1, q1, p2, q2, eps=1e-12): s = torch.where(t_lo, (-c / a.clamp_min(eps)).clamp(0, 1), s) s = torch.where(t_hi, ((b - c) / a.clamp_min(eps)).clamp(0, 1), s) t = t.clamp(0, 1) - # 退化(线段长度≈0) + # 第二条退化成点时,仍须在第一条上投影,而不是固定取其起点。 + s = torch.where(e <= eps, (-c / a.clamp_min(eps)).clamp(0, 1), s) s = torch.where(a <= eps, torch.zeros_like(s), s) t = torch.where(e <= eps, torch.zeros_like(t), t) c1 = p1 + d1 * s.unsqueeze(-1) @@ -85,6 +86,25 @@ class Kin: gi, gj = self.cap_g[self.pi], self.cap_g[self.pj] self.pair_gp = torch.minimum(gi, gj) * 7 + torch.maximum(gi, gj) self.lever = T(K['lever']) + table = [[0.0] * 7 for _ in range(6)] + for group in range(1, 7): + endpoints = [c[key] for c in caps if c['g'] == group for key in ('a', 'b')] + if not endpoints: + continue + pivot, axis = K['P'][group - 1], K['D'][group - 1] + unit = [v / math.hypot(*axis) for v in axis] + relative = [[e[j] - pivot[j] for j in range(3)] for e in endpoints] + radius = max(math.hypot(*v) for v in relative) + radial = max(math.hypot(v[1] * unit[2] - v[2] * unit[1], + v[2] * unit[0] - v[0] * unit[2], + v[0] * unit[1] - v[1] * unit[0]) for v in relative) + for joint in range(group): + chain = sum(math.dist(K['P'][j], K['P'][j + 1]) for j in range(joint, group - 1)) + table[joint][group] = (chain + (radial if joint == group - 1 else radius)) * D2R + self.cert_groups = torch.tensor([a * 7 + b for a in range(7) for b in range(a + 2, 7)], device=device) + # 三角不等式给出全姿态界,不用随机姿态最大值冒充上界。 + self.cert_lever = T([[table[k][b] if a <= k < b else 0.0 for k in range(6)] + for a in range(7) for b in range(a + 2, 7)]) # ---------------- 运动学 ---------------- def cum_xf(self, q): @@ -250,6 +270,56 @@ class Kin: gm = gm.scatter_reduce(0, rep_b * len(gp) + self._gp49[self.pair_gp[pidx]], gap.clamp(max=cap), reduce='amin', include_self=True) return gm.view(B, len(gp)) + @torch.no_grad() + def certify_segments(self, a, b, max_queries=32, max_depth=12, eps=1e-4, cap=20.0, adaptive_cap=True): + if self.dtype != torch.float64 or a.dtype != torch.float64 or b.dtype != torch.float64: + raise ValueError('segment certification requires float64') + # 预算给成张量时 max_depth + 1 会在 uint8 这类窄类型上回绕成 0,循环整个跳过,把碰撞段当安全返回。 + if type(max_queries) is not int or type(max_depth) is not int: + raise ValueError('certification budgets must be plain ints') + if max_queries < 2 or max_depth < 0 or eps <= 0 or cap <= eps: + raise ValueError('invalid certification budget or tolerance') + count = a.shape[0] + status = torch.zeros(count, dtype=torch.long, device=a.device) + inside = (((a >= self.lo) & (a <= self.hi) & (b >= self.lo) & (b <= self.hi)) | self.cont).all(-1) + status[~inside] = 3 + root = torch.arange(count, device=a.device) + gaps = self.gaps(torch.cat([a, b]), cap)['gm'][:, self.cert_groups] + ga, gb = gaps[:count], gaps[count:] + queries = torch.full((count,), 2, dtype=torch.long, device=a.device) + bound = (b - a).abs() @ self.cert_lever.T + for depth in range(max_depth + 1): + finite = torch.isfinite(ga).all(-1) & torch.isfinite(gb).all(-1) + collision = (ga <= 0).any(-1) | (gb <= 0).any(-1) + status[root[~finite]] = 2 + status[root[collision]] = 1 + positive = (ga > eps).all(-1) & (gb > eps).all(-1) + proven = positive & (ga + gb > bound + 2 * eps).all(-1) + pending = (status[root] == 0) & ~proven + if not bool(pending.any()): + break + a, b, ga, gb, root, bound = a[pending], b[pending], ga[pending], gb[pending], root[pending], bound[pending] + if depth == max_depth: + status[root] = 2 + break + requested = torch.bincount(root, minlength=count) + status[(status == 0) & (queries + requested > max_queries)] = 2 + keep = status[root] == 0 + a, b, ga, gb, root, bound = (t[keep] for t in (a, b, ga, gb, root, bound)) + if not root.numel(): + break + mid = a + 0.5 * (b - a) + # 子段的界是父段一半;宽相位只需覆盖到能被证明的最小间隙,层越深筛得越狠。 + qc = min(cap, float(bound.max()) / 2 + eps) if adaptive_cap else cap + gm = self.gaps(mid, qc)['gm'][:, self.cert_groups] + queries += torch.bincount(root, minlength=count) + a, b = torch.cat([a, mid]), torch.cat([mid, b]) + ga, gb = torch.cat([ga, gm]), torch.cat([gm, gb]) + root = torch.cat([root, root]) + bound = torch.cat([bound, bound]) / 2 + return {'safe': status == 0, 'collision': status == 1, 'unresolved': status == 2, + 'outside_box': status == 3, 'queries': queries} + def min_gap(self, q, cap=40.0): return self.gaps(q, cap)['gm'].min(-1).values diff --git a/ml/eval/diag_collision.py b/ml/eval/diag_collision.py index 9b0ec3e..0671952 100644 --- a/ml/eval/diag_collision.py +++ b/ml/eval/diag_collision.py @@ -153,11 +153,124 @@ def replay_dense(path, indices, max_step_deg=0.05, device='cpu', out=None): return result +@torch.no_grad() +def replay_certificates(path, indices, device='cpu', out=None, repeats=5, extra_segments=()): + saved = torch.load(path, map_location='cpu', weights_only=True) + kin = Kin(device=device, dtype=torch.float64) + if saved.get('kin_fp') != kin.fp: + raise ValueError('trace/kin fingerprint mismatch') + if not indices or min(indices) < 0 or max(indices) >= len(saved['tasks']) or repeats < 1: + raise ValueError('valid task indices and positive repeats required') + rows, offset = [], 0 + for _, per, count in saved['batches']: + for index in indices: + if not offset <= index < offset + count: + continue + b = index - offset + nstep = min(per['traj'].shape[1] - 1, math.floor((float(per['limit'][b]) + 1e-6) / DT)) + if torch.isfinite(per['t_done'][b]): + nstep = min(nstep, round(float(per['t_done'][b]) / DT)) + traj = per['traj'][b, :nstep + 1] + moving = ((traj[1:] - traj[:-1]).abs().max(-1).values > 1e-6).nonzero().flatten().tolist() + if not moving: + continue + plans = per['plans'] + nearest, nearest_gap = None, float('inf') + for it in moving: + pi = int(torch.searchsorted(plans['it'], it, right=True)) - 1 + step = it - int(plans['it'][pi]) + if 0 <= step < plans['commit'].shape[2] and plans['certified'][b, pi, step]: + gap = float(plans['gaps'][b, pi, [step, plans['commit'].shape[2] + step]].min()) + if gap < nearest_gap: + nearest, nearest_gap = it, gap + selected = {moving[0], moving[len(moving) // 2], moving[-1]} + if nearest is not None: + selected.add(nearest) + for task_index, it in extra_segments: + if task_index == index: + if it not in moving: + raise ValueError('extra segment must be a moving segment before deadline or arrival') + selected.add(it) + for it in sorted(selected): + rows.append({'i': index, 'start_it': it, 'a': traj[it].tolist(), 'b': traj[it + 1].tolist()}) + offset += count + if not rows: + raise ValueError('no moving segments in selected tasks') + a = torch.tensor([r['a'] for r in rows], dtype=torch.float64, device=device) + b = torch.tensor([r['b'] for r in rows], dtype=torch.float64, device=device) + started = time.perf_counter() + print('certificate replay: %d tasks, %d fixed moving segments' % (len(indices), len(rows)), flush=True) + summaries = {} + for budget in (2, 8, 32): + result = kin.certify_segments(a, b, max_queries=budget) + summaries[str(budget)] = {key: int(result[key].sum()) for key in ('safe', 'collision', 'unresolved', 'outside_box')} + summaries[str(budget)]['queries_p50'] = float(result['queries'].double().quantile(0.5)) + summaries[str(budget)]['queries_max'] = int(result['queries'].max()) + for j, row in enumerate(rows): + row.setdefault('budgets', {})[str(budget)] = {key: value[j].item() for key, value in result.items()} + print('budget %d: %s' % (budget, summaries[str(budget)]), flush=True) + latencies = [] + for j, row in enumerate(rows): + aa, bb = a[j:j + 1], b[j:j + 1] + discrete = kin.gaps(torch.cat([aa, aa + 0.5 * (bb - aa), bb]), 0.5)['gm'].min(-1).values + row['previous_midpoint_endpoint_gap_mm'] = discrete.tolist() + nseg = max(2, 2 * math.ceil(float((bb - aa).abs().max()) / 0.02)) + alpha = torch.linspace(0, 1, nseg + 1, dtype=torch.float64, device=device) + points = aa + alpha[:, None] * (bb - aa) + dense = torch.cat([kin.gaps(chunk, 0.5)['gm'].min(-1).values for chunk in points.split(64)]) + row['dense_points'] = len(points) + row['dense_min_gap_mm'] = float(dense.min()) + row['dense_min_fraction'] = float(alpha[dense.argmin()]) + for _ in range(3): + kin.certify_segments(aa, bb) + elapsed = [] + for _ in range(repeats): + if a.is_cuda: + torch.cuda.synchronize(a.device) + t0 = time.perf_counter() + result = kin.certify_segments(aa, bb) + if a.is_cuda: + torch.cuda.synchronize(a.device) + elapsed.append((time.perf_counter() - t0) * 1000) + row['batch_single_match'] = all(value.item() == row['budgets']['32'][key] for key, value in result.items()) + row['latency_ms'] = elapsed + latencies.extend(elapsed) + print('segment %d/%d task %d it %d dense %.6f mm queries %d latency %.2f ms' % + (j + 1, len(rows), row['i'], row['start_it'], row['dense_min_gap_mm'], + row['budgets']['32']['queries'], sum(elapsed) / len(elapsed)), flush=True) + elapsed = torch.tensor(latencies, dtype=torch.float64) + result = { + 'trace': str(path), 'tasks_sha256': saved.get('tasks_sha256'), 'kin_fp': kin.fp, + 'device': str(device), 'gpu': torch.cuda.get_device_name(a.device) if a.is_cuda else None, + 'torch_version': str(torch.__version__), 'cpu_threads': torch.get_num_threads(), 'dtype': 'float64', + 'indices': indices, 'extra_segments': list(extra_segments), + 'selection': 'First/middle/last moving segment and minimum original certified gap per task; plus explicit extra_segments.', + 'cap_mm': 20.0, 'eps_mm': 1e-4, 'max_depth': 12, 'dense_max_step_deg': 0.01, + 'timing': {'scope': 'B=1 certificate only, resident inputs, 3 warmups per segment; synchronized wall time, not policy or scheduling latency.', + 'repeats_per_segment': repeats, 'calls': len(latencies), + 'p50_ms': float(elapsed.quantile(0.5)), 'p99_ms': float(elapsed.quantile(0.99)), + 'max_ms': float(elapsed.max()), 'over_20ms': int((elapsed > 20).sum())}, + 'budgets': summaries, + 'dense_collision_segments': sum(r['dense_min_gap_mm'] <= 0 for r in rows), + 'accepted_dense_collision_segments': sum(r['dense_min_gap_mm'] <= 0 and r['budgets']['32']['safe'] for r in rows), + 'batch_single_match': all(r['batch_single_match'] for r in rows), + 'scope': 'Fixed recorded segments, not a new rollout. Dense replay is finite sampling; floating-point certification error is not formally bounded.', + 'wall_s': time.perf_counter() - started, 'rows': rows, + } + if out: + with open(out, 'w', encoding='utf-8') as f: + json.dump(result, f, indent=2, allow_nan=False) + return result + + def main(): ap = argparse.ArgumentParser() ap.add_argument('--ckpt') ap.add_argument('--trace') ap.add_argument('--dense_indices', help='逗号分隔的任务下标;回放实际轨迹,不依赖原 col 标记') + ap.add_argument('--cert_indices', help='固定实际段的连续认证、加密对照和单段计时') + ap.add_argument('--cert_segments', default='', help='额外指定任务号:零基段号,逗号分隔') + ap.add_argument('--repeats', type=int, default=5) ap.add_argument('--max_step_deg', type=float, default=0.05) ap.add_argument('--samples', default='ml/data/samples') ap.add_argument('--split', default='val') @@ -169,14 +282,24 @@ def main(): ap.add_argument('--device', default='cuda' if torch.cuda.is_available() else 'cpu') ap.add_argument('--out', default=None) a = ap.parse_args() + if a.dense_indices and a.cert_indices: + ap.error('--dense_indices and --cert_indices are mutually exclusive') + if a.cert_segments and not a.cert_indices: + ap.error('--cert_segments requires --cert_indices') if a.trace: - if a.dense_indices: + if a.cert_indices: + extra = [tuple(map(int, segment.split(':'))) for segment in a.cert_segments.split(',') if segment] + indices = [int(i) for i in a.cert_indices.split(',')] + if any(len(segment) != 2 or segment[0] not in indices for segment in extra): + ap.error('--cert_segments requires task:segment pairs from --cert_indices') + replay_certificates(a.trace, indices, a.device, a.out, a.repeats, extra) + elif a.dense_indices: replay_dense(a.trace, [int(i) for i in a.dense_indices.split(',')], a.max_step_deg, a.device, a.out) else: replay_first_hits(a.trace, a.out) return - if a.dense_indices: - ap.error('--dense_indices requires --trace') + if a.dense_indices or a.cert_indices: + ap.error('--dense_indices and --cert_indices require --trace') if not a.ckpt: ap.error('--ckpt or --trace is required') diff --git a/tests/test_eval_cl.py b/tests/test_eval_cl.py index d2291e2..6b27738 100644 --- a/tests/test_eval_cl.py +++ b/tests/test_eval_cl.py @@ -9,8 +9,9 @@ from unittest.mock import patch import torch from ml.eval.eval_cl import json_finite, run -from ml.eval.diag_collision import replay_dense, replay_first_hits +from ml.eval.diag_collision import replay_certificates, replay_dense, replay_first_hits from ml.sim.closed_loop import TeacherOracle, rollout +from ml.common.kin_torch import Kin, seg_seg_dist class EvalMetricsTest(unittest.TestCase): @@ -124,6 +125,30 @@ class EvalMetricsTest(unittest.TestCase): self.assertGreater(row['min_gap64_mm'], 0) self.assertEqual(row['steps'], 1) + def test_certificate_replay_samples_actual_movement_before_deadlines(self): + kin = SegmentCertificateTest.ThinObstacle() + kin.fp = 'probe' + traj = torch.zeros(3, 4, 6) + traj[:, :, 0] = torch.tensor([[0, 1, 1, 1], [0, -0.5, -1, -1], [0, 0, 1, 1]]) + per = {'traj': traj, 'limit': torch.tensor([0.06, 0.02, 0.02]), + 't_done': torch.tensor([float('nan'), 0.02, float('nan')]), + 'plans': {'it': torch.arange(3), 'commit': torch.zeros(3, 3, 1, 6), + 'certified': torch.ones(3, 3, 1, dtype=torch.bool), 'gaps': torch.full((3, 3, 2), 0.5)}} + with tempfile.TemporaryDirectory() as folder: + trace, output = Path(folder) / 'trace.pt', Path(folder) / 'audit.json' + torch.save({'kin_fp': 'probe', 'tasks': [{}] * 3, 'batches': [({}, per, 3)]}, trace) + with patch('ml.eval.diag_collision.Kin', return_value=kin), contextlib.redirect_stdout(io.StringIO()): + result = replay_certificates(trace, [0, 1, 2], out=output, repeats=1, extra_segments=[(0, 0)]) + with self.assertRaisesRegex(ValueError, 'extra segment'): + replay_certificates(trace, [1], repeats=1, extra_segments=[(1, 1)]) + self.assertEqual(json.loads(output.read_text())['dense_collision_segments'], 1) + self.assertEqual([(r['i'], r['start_it']) for r in result['rows']], [(0, 0), (1, 0)]) + self.assertEqual(result['budgets']['32']['safe'], 1) + self.assertEqual(result['budgets']['32']['collision'], 1) + self.assertEqual(result['accepted_dense_collision_segments'], 0) + self.assertTrue(result['batch_single_match']) + self.assertEqual(result['timing']['calls'], 2) + class DlsSafetyTest(unittest.TestCase): def test_rejected_refinement_retains_safe_candidate(self): @@ -373,5 +398,116 @@ class ClampedPathSafetyTest(unittest.TestCase): self.assertFalse(per['plans']['certified'].any().item()) +class SegmentCertificateTest(unittest.TestCase): + class ThinObstacle(Kin): + def __init__(self): + self.dtype = torch.float64 + self.lo, self.hi = torch.full((6,), -5.0), torch.full((6,), 5.0) + self.cont = torch.zeros(6, dtype=torch.bool) + self.cert_groups = torch.tensor([0]) + self.cert_lever = torch.tensor([[1.0, 0, 0, 0, 0, 0]], dtype=self.dtype) + + def gaps(self, q, cap): + return {'gm': ((q[:, :1] - 0.25).abs() - 0.05).clamp(max=cap)} + + def test_bound_detects_hidden_collision_and_accepts_clear_segment(self): + a, b = torch.zeros(3, 6, dtype=torch.float64), torch.zeros(3, 6, dtype=torch.float64) + a[:, 0] = torch.tensor([0.0, -1.0, 0.25]) + b[:, 0] = torch.tensor([1.0, 0.0, 0.25]) + result = self.ThinObstacle().certify_segments(a, b) + self.assertEqual(result['safe'].tolist(), [False, True, False]) + self.assertEqual(result['collision'].tolist(), [True, False, True]) + self.assertEqual(result['queries'].tolist(), [4, 2, 2]) + + def test_budget_and_depth_exhaustion_do_not_accept_unknown_segment(self): + a, b = torch.zeros(1, 6, dtype=torch.float64), torch.zeros(1, 6, dtype=torch.float64) + b[:, 0] = 1.0 + kin = self.ThinObstacle() + for kwargs in ({'max_queries': 2}, {'max_depth': 0}): + with self.subTest(**kwargs): + result = kin.certify_segments(a, b, **kwargs) + self.assertFalse(result['safe'].item()) + self.assertTrue(result['unresolved'].item()) + self.assertEqual(result['queries'].item(), 2) + + def test_budget_exhaustion_scales_with_gap_and_bound(self): + class ConstantGap(self.ThinObstacle): + def gaps(self, q, cap): + return {'gm': torch.full((q.shape[0], 1), 0.1, dtype=q.dtype, device=q.device)} + + # 界取 1 mm/度:1° 段要证明无碰撞,必须细分到位移界 < 两端间隙之和(0.2 mm)。 + kin = ConstantGap() + kin.cert_lever = torch.ones(1, 6, dtype=torch.float64) + a, b = torch.zeros(1, 6, dtype=torch.float64), torch.zeros(1, 6, dtype=torch.float64) + b[:, 0] = 1.0 + for budget, safe, queries in ((4, False, 3), (8, False, 5), (9, True, 9)): + with self.subTest(budget=budget): + result = kin.certify_segments(a, b, max_queries=budget) + self.assertEqual(bool(result['safe'].item()), safe) + self.assertEqual(int(result['queries'].item()), queries) + + def test_tensor_budget_cannot_wrap_depth(self): + a, b = torch.zeros(1, 6, dtype=torch.float64), torch.zeros(1, 6, dtype=torch.float64) + a[:, 0] = b[:, 0] = 0.25 + for tensor in (torch.tensor(255, dtype=torch.uint8), torch.tensor(255)): + with self.subTest(dtype=tensor.dtype): + with self.assertRaisesRegex(ValueError, 'plain ints'): + self.ThinObstacle().certify_segments(a, b, max_depth=tensor) + + def test_batch_matches_per_root_and_ignores_order(self): + kin = self.ThinObstacle() + a = torch.tensor([[0.0, 0, 0, 0, 0, 0], [0.25, 0, 0, 0, 0, 0], [-1.0, 0, 0, 0, 0, 0]], dtype=torch.float64) + b = torch.tensor([[1.0, 0, 0, 0, 0, 0], [0.25, 0, 0, 0, 0, 0], [0.0, 0, 0, 0, 0, 0]], dtype=torch.float64) + batch = kin.certify_segments(a, b, max_queries=16) + self.assertEqual(batch['collision'].tolist(), [True, True, False]) + self.assertEqual(batch['safe'].tolist(), [False, False, True]) + for perm in ([0, 1, 2], [2, 1, 0], [1, 0, 2]): + index = torch.tensor(perm) + moved = kin.certify_segments(a[index], b[index], max_queries=16) + for key in ('safe', 'collision', 'unresolved', 'queries'): + torch.testing.assert_close(moved[key], batch[key][index], rtol=0, atol=0) + + def test_empty_batch_and_all_rejected_frontier(self): + kin = self.ThinObstacle() + empty = kin.certify_segments(torch.zeros(0, 6, dtype=torch.float64), torch.zeros(0, 6, dtype=torch.float64)) + self.assertEqual(empty['safe'].shape, (0,)) + a = torch.tensor([[0.25, 0, 0, 0, 0, 0], [6.0, 0, 0, 0, 0, 0]], dtype=torch.float64) + result = kin.certify_segments(a, a.clone(), max_queries=2) + self.assertEqual(result['safe'].tolist(), [False, False]) + self.assertEqual(result['collision'].tolist(), [True, False]) + self.assertEqual(result['outside_box'].tolist(), [False, True]) + + def test_nonfinite_and_outside_box_are_rejected(self): + a, b = torch.zeros(1, 6, dtype=torch.float64), torch.zeros(1, 6, dtype=torch.float64) + kin = self.ThinObstacle() + with patch.object(kin, 'gaps', side_effect=lambda q, cap: {'gm': torch.full((q.shape[0], 1), float('nan'))}): + result = kin.certify_segments(a, b) + self.assertFalse(result['safe'].item()) + self.assertTrue(result['unresolved'].item()) + for value in (float('inf'), -float('inf')): + with self.subTest(value=value): + with patch.object(kin, 'gaps', + side_effect=lambda q, cap, v=value: {'gm': torch.full((q.shape[0], 1), v)}): + result = kin.certify_segments(a, b) + self.assertFalse(result['safe'].item()) + a[:, 0] = b[:, 0] = 6.0 + result = kin.certify_segments(a, b) + self.assertFalse(result['safe'].item()) + self.assertTrue(result['outside_box'].item()) + + def test_point_segment_distance_is_symmetric_and_differentiable(self): + p = torch.tensor([[0.0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]], dtype=torch.float64, requires_grad=True) + q = torch.tensor([[2.0, 0, 0]] * 4, dtype=torch.float64) + point = torch.tensor([[1.0, 0, 0], [1, 3, 0], [4, 0, 0], [-1, 0, 0]], dtype=torch.float64) + forward = seg_seg_dist(p, q, point, point) + reverse = seg_seg_dist(point, point, p, q) + torch.testing.assert_close(forward, torch.tensor([0.0, 3, 2, 1], dtype=torch.float64), atol=1e-8, rtol=0) + torch.testing.assert_close(forward, reverse, atol=1e-8, rtol=0) + forward.sum().backward() + self.assertTrue(torch.isfinite(p.grad).all()) + torch.testing.assert_close(seg_seg_dist(p.detach(), p.detach(), point, point), + (p.detach() - point).norm(dim=-1), atol=1e-8, rtol=0) + + if __name__ == '__main__': unittest.main()