IVAN BESEVIC / RESEARCH

Pandrosion 601 — benchmark protocol and results

Reproducible Pandrosion 601 versus 600 benchmarks: local solving, target tracking, bounded cases and shared callbacks. Methods, results and limitations.

← Pandrosion 601 product and purchase

Comparaisons appariées, même tolérance 1e-8, mêmes options et budgets, ordre alterné, BLAS limité à un fil. Les données détaillées incluent chaque durée, résidu, statut et compte d’évaluations. Les performances dépendent du matériel et du coût des callbacks.

Campagne principale

Graines 60120261101 (développement) et 60120261102 (réservée après fixation du code). Par graine : 560 problèmes locaux et 600 étapes de suivi, cinq répétitions. Soit **2 320 instances/étapes, 11 600 résolutions par méthode**. Les six variantes obtiennent toutes 11 600 racines sur 11 600 dans cette campagne. Le score résiduel utilise le modèle 600 pour les deux versions.

Chaque version utilise sa propre implémentation de cinématique pour ce test : les gains incluent donc le solveur et les modèles. En suivi, le workspace public RobotSolver est utilisé avec la solution précédente propre à chaque méthode. Les configurations génériques de cette campagne sont sans bornes finies, avec poids et échelles unitaires.

Méthode Temps local total Médiane locale p95 local Temps suivi total Médiane suivi p95 suivi
600_fused 1.803 s 217.2 µs 888.6 µs 1.118 s 112.2 µs 367.4 µs
601_fused 1.079 s 173.4 µs 431.9 µs 0.758 s 96.3 µs 208.7 µs
600_analytic 1.880 s 252.5 µs 781.7 µs 0.976 s 112.8 µs 336.2 µs
601_analytic 1.341 s 202.6 µs 493.2 µs 0.753 s 98.2 µs 216.8 µs
600_fd 2.267 s 296.3 µs 1019.8 µs 1.137 s 123.2 µs 458.2 µs
601_fd 1.841 s 249.3 µs 721.1 µs 0.910 s 109.7 µs 333.7 µs

Réduction de temps total face à 600

Campagne Variante Résolution locale Suivi Racines 601
benchmark_development fused 40.2 % 32.1 % 5800/5800
benchmark_development analytic 28.7 % 22.6 % 5800/5800
benchmark_development fd 18.8 % 19.9 % 5800/5800
benchmark_holdout fused 40.1 % 32.3 % 5800/5800
benchmark_holdout analytic 28.6 % 23.1 % 5800/5800
benchmark_holdout fd 18.8 % 20.0 % 5800/5800
benchmark_bounded fused 36.1 % 26.6 % 3471/3480
benchmark_bounded analytic 21.7 % 17.9 % 3480/3480
benchmark_bounded fd 13.5 % 14.6 % 3480/3480
benchmark_shared fused 7.9 % 8.0 % 3480/3480
benchmark_shared analytic 10.6 % 9.0 % 3480/3480
benchmark_shared fd 10.3 % 7.3 % 3480/3480

Les valeurs sont des réductions de temps, pas des multiplicateurs de vitesse. Aucun meilleur run isolé n’est sélectionné. Un gain total important peut coexister avec un gain médian plus petit lorsque les familles coûteuses sont davantage accélérées.

Détail principal par famille, variante fusionnée

Famille Racines 600 / 601 Temps 600 Temps 601 Réduction
implicit12 800 / 800 0.058 s 0.057 s 1.4 %
mixed_RPRP 800 / 800 0.214 s 0.154 s 27.9 %
planar2 800 / 800 0.153 s 0.124 s 18.8 %
planar7 800 / 800 0.170 s 0.137 s 19.6 %
planar7_tracking 2000 / 2000 0.201 s 0.175 s 12.5 %
range3d 800 / 800 0.109 s 0.090 s 17.2 %
range3d_tracking 2000 / 2000 0.205 s 0.178 s 13.1 %
spatial6_pose 800 / 800 0.666 s 0.326 s 51.0 %
spatial6_tracking 2000 / 2000 0.712 s 0.404 s 43.3 %
spatial7_position 800 / 800 0.433 s 0.190 s 56.1 %

Le gain est surtout marqué sur la cinématique spatiale. La dynamique implicite, qui utilise un callback matriciel commun, bénéficie peu de ces optimisations géométriques.

Contrôles complémentaires

La campagne bornée (graine 60120261103, trois répétitions) impose [-2.5, 2.5] à chaque variable des deux versions. Les variantes fusionnées obtiennent **3 471/3 480 racines**, avec les mêmes trois cas spatiaux non résolus dans la limite de Jacobiennes pour 600 et 601, répétés trois fois. Les variantes avec Jacobienne séparée ou différences finies obtiennent 3 480/3 480. Il n’y a aucune perte de solution par rapport à 600. Le calcul fusionné consomme une Jacobienne pour chaque essai, y compris rejeté : dans certains cas bornés, une Jacobienne séparée préserve mieux ce budget.

La campagne de callbacks communs (graine 60120261104, trois répétitions) fournit exclusivement les callbacks 600 aux deux solveurs. Elle isole les modifications du solveur de l’amélioration des modèles. Les six variantes obtiennent 3 480/3 480 racines.

Les limites actives, poids et échelles non unitaires, coordonnées fixes, vitesses nulles, budgets et délais sont également couverts par les tests fonctionnels ; les comparaisons temporelles ne constituent pas des garanties pour toutes leurs combinaisons.

Environnement et protocole

Python 3.14.3, NumPy 2.4.4, macOS arm64. Les imports, la création des cas et l’échauffement sont hors chronométrage. Les appels sont mesurés avec perf_counter, avec ordre inversé en alternance entre cas et répétitions. Aucune modification d’options ou de tolérance n’a été faite après consultation du jeu réservé.

Les Jacobiennes géométriques nouvelles sont testées bit à bit contre 600 sur 72 chaînes spatiales aléatoires, y compris articulations prismatiques et outil décalé. Les optimisations de disposition mémoire du solveur peuvent modifier les arrondis intermédiaires ; l’identité de toutes les trajectoires flottantes n’est pas revendiquée.

Il s’agit de modèles synthétiques avec initialisations locales et suivi continu. Ces mesures ne comprennent pas capteurs, transport, collisions, commande des actionneurs ou supervision. Aucun robot physique n’est testé et aucune garantie de temps réel dur n’est déduite des latences mesurées.