<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<style>html, body {height: 100%;}</style>
</head>
<body>
<div style="height:900px; width:1400px;"> <script>window.PlotlyConfig = {MathJaxConfig: 'local'};</script>
<script charset="utf-8" src="https://cdn.plot.ly/plotly-4.1.1.min.js" integrity="sha256-O24V1F27f8pb0glCkelh3cVHLNiHAJ5gCaVtq2aNch8=" crossorigin="anonymous"></script> <div id="9a2c89ab-dcd6-4cda-9567-971440d005d1" class="plotly-graph-div" style="height:100%; width:100%;"></div> <script> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("9a2c89ab-dcd6-4cda-9567-971440d005d1")) { Plotly.newPlot( "9a2c89ab-dcd6-4cda-9567-971440d005d1", [{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},"type":"data","visible":true},"legendgroup":"apex-solver","marker":{"color":"#4C78A8"},"name":"apex-solver (LM + sparse Cholesky)","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"FM+CciaRST8rXdkONAoFQAXkmZ82Lzs\u002fTpqZqMTGUz\u002fj+ubzJTKNP4BRNNGy1yE\u002fLXcOnQaXnz9OvgefVo1LPw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4fwAAAAAAAAAAAAAAAAAA+H8AAAAAAAD4fw=="},"type":"data","visible":true},"legendgroup":"factrs","marker":{"color":"#72B7B2"},"name":"factrs","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"sNP+vcqQST\u002fNzMzMzGSIQIKUM28wLzs\u002fwXCuYYbGUz8AAAAAAAD4f\u002fyjFBnC1iE\u002fAAAAAAAA+H8AAAAAAAD4fw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+H8AAAAAAAAAAA=="},"type":"data","visible":true},"legendgroup":"tiny-solver","marker":{"color":"#54A24B"},"name":"tiny-solver","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"zczMzMxMLUAAAAAAAKCDQGZmZmZm5iZAPQrXo3C9Q0BSuB6F65EwQMP1KFyPQjpAAAAAAAAA+H8lBoGVQ4vsPw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},"type":"data","visible":true},"legendgroup":"Ceres","marker":{"color":"#EECA3B"},"name":"Ceres (LM + SPARSE_NORMAL_CHOLESKY)","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"BFYOLbKdAkCamZmZmVkyQKAaL90kBvs\u002fhlrTvOMUTT\u002fsUbgehctHQClcj8L1yEVADi2yne+nF0B56SYxCKz4Pw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},"type":"data","visible":true},"legendgroup":"GTSAM","marker":{"color":"#E45756"},"name":"GTSAM (LM, multifrontal)","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"bIQ0GURaST86kst\u002fSL\u002fNPy9KdaZ1wDo\u002f1dgUfl8STT+ME1\u002ftKM6BP+M+zSRFvyE\u002fNh\u002fXhopxnj8omgewyK8\u002fPw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},"type":"data","visible":true},"legendgroup":"g2o","marker":{"color":"#B279A2"},"name":"g2o (LM + BlockSolver, LinearSolverEigen)","showlegend":true,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"bIQ0GURaST8K16NwPYpQQBtMw\u002fARMaU\u002f1dgUfl8STT+Ss7CnHf6aPyhTuxV43SE\u002fAFKbOLnfoT\u002fNIhRbQdNSPw=="},"type":"bar","xaxis":"x","yaxis":"y"},{"error_y":{"array":{"dtype":"f8","bdata":"AF3TPF1MBkDgw+RCtmHgP9HRo86fF9w\u002fItZY72DBwj8LLkSTg6QHQLAGmpTaDc4\u002frd9rZvl2JkDL5z1\u002fGCXsPw=="},"type":"data","visible":true},"legendgroup":"apex-solver","marker":{"color":"#4C78A8"},"name":"apex-solver (LM + sparse Cholesky)","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"oBov3SQmQUAOLbKd76cjQCYxCKwcClxA5tAi2\u002fl+BED8qfHSTaphQMDKoUW2k0RAhhbZzvdVnkAW2c73U7N1QA=="},"type":"bar","xaxis":"x2","yaxis":"y2"},{"error_y":{"array":{"dtype":"f8","bdata":"MzMzMzMz4z8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAD4f2ZmZmZmZvY\u002fAAAAAAAA+H8AAAAAAAD4fw=="},"type":"data","visible":true},"legendgroup":"factrs","marker":{"color":"#72B7B2"},"name":"factrs","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"AAAAAADATEAzMzMzMzMLQJqZmZmZOWxAMzMzMzMzEUAAAAAAAAD4f2ZmZmZmjntAAAAAAAAA+H8AAAAAAAD4fw=="},"type":"bar","xaxis":"x2","yaxis":"y2"},{"error_y":{"array":{"dtype":"f8","bdata":"mpmZmZmZCUCamZmZmZm5PwAAAAAAABRAmpmZmZmZyT8AAAAAAAAcQJqZmZmZmR9AAAAAAAAA+H9mZmZmZuY3QA=="},"type":"data","visible":true},"legendgroup":"tiny-solver","marker":{"color":"#54A24B"},"name":"tiny-solver","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"MzMzMzNTakAzMzMzMzMXQM3MzMzM5pBAmpmZmZmZNEDNzMzMzAGgQM3MzMzMpIpAAAAAAAAA+H9mZmZmZvieQA=="},"type":"bar","xaxis":"x2","yaxis":"y2"},{"error_y":{"array":{"dtype":"f8","bdata":"MzMzMzMz0z+amZmZmZm5P5qZmZmZmQFAAAAAAAAAAACamZmZmZkbQJqZmZmZmfE\u002fMzMzMzMzGUBmZmZmZmYKQA=="},"type":"data","visible":true},"legendgroup":"Ceres","marker":{"color":"#EECA3B"},"name":"Ceres (LM + SPARSE_NORMAL_CHOLESKY)","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"MzMzMzPTUkAAAAAAAAAnQDMzMzMzg3hAzczMzMzMCEDNzMzMzGCRQM3MzMzMvHBAzczMzMxwj0BmZmZmZtqNQA=="},"type":"bar","xaxis":"x2","yaxis":"y2"},{"error_y":{"array":{"dtype":"f8","bdata":"mpmZmZmZ2T\u002fNzMzMzMz0P83MzMzMzPQ\u002fmpmZmZmZ2T\u002fNzMzMzMz8P83MzMzMzOw\u002fAAAAAAAAAEAzMzMzMzMHQA=="},"type":"data","visible":true},"legendgroup":"GTSAM","marker":{"color":"#E45756"},"name":"GTSAM (LM, multifrontal)","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"AAAAAADARUDNzMzMzExTQDMzMzMzk2NAMzMzMzMzI0AzMzMzMzNWQM3MzMzMTDxAZmZmZmYueUDNzMzMzBx3QA=="},"type":"bar","xaxis":"x2","yaxis":"y2"},{"error_y":{"array":{"dtype":"f8","bdata":"AAAAAAAA4D8zMzMzMzPTP5qZmZmZmSlAAAAAAAAAAAAzMzMzM3NKQGZmZmZmZgJAZmZmZmbmUEDNzMzMzMwWQA=="},"type":"data","visible":true},"legendgroup":"g2o","marker":{"color":"#B279A2"},"name":"g2o (LM + BlockSolver, LinearSolverEigen)","showlegend":false,"x":["M3500","mit","city10000","ring","sphere2500","parking-garage","torus3D","cubicle"],"y":{"dtype":"f8","bdata":"mpmZmZn5WkDNzMzMzExHQJqZmZmZYLBAmpmZmZmZGUAzMzMzs0bFQAAAAAAA1INAMzMzMxNo3kBmZmZmppjAQA=="},"type":"bar","xaxis":"x2","yaxis":"y2"}], {"template":{"data":{"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"contour"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmap"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2dcontour"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2d"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermap":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermap"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"matches":"x2","showticklabels":false},"yaxis":{"anchor":"x","domain":[0.55,1.0],"title":{"text":"normalized cost cost\u002f(m−n) (dimensionless, log scale)"},"type":"log"},"xaxis2":{"anchor":"y2","domain":[0.0,1.0],"title":{"text":"dataset — 2D SE2: M3500, mit, city10000, ring · 3D SE3: sphere2500, parking-garage, torus3D, cubicle"}},"yaxis2":{"anchor":"x2","domain":[0.0,0.45],"title":{"text":"runtime (ms, log scale)"},"type":"log"},"annotations":[{"font":{"size":16},"showarrow":false,"text":"Solution cost per degree of freedom — ½·Σ‖r‖² \u002f (m−n), lower is better","x":0.5,"xanchor":"center","xref":"paper","y":1.0,"yanchor":"bottom","yref":"paper"},{"font":{"size":16},"showarrow":false,"text":"Runtime per solve, lower is better","x":0.5,"xanchor":"center","xref":"paper","y":0.45,"yanchor":"bottom","yref":"paper"}],"legend":{"title":{"text":"solver (algorithm configured in each benchmark binary)"}},"title":{"text":"Pose Graph Optimization — cost and runtime (mean ± std; apex-solver ×5 · factrs ×5 · tiny-solver ×5 · Ceres ×5 · GTSAM ×5 · g2o ×5)\u003cbr\u003e\u003csup\u003emissing bars = solver failed on that dataset · all solvers minimize the unweighted objective with unit information, so costs are comparable · apex-solver bars: fresh 1.5.0 runs (2026-09-29); other bars: 2026-09-27 session means as recorded in doc\u002fperformance.md\u003c\u002fsup\u003e"},"barmode":"group","height":900,"width":1400}, {"responsive": true} ) }; </script> </div>
</body>
</html>