[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"navigation":3,"\u002Falgorithms\u002Fassignment\u002Ftutorials":174,"\u002Falgorithms\u002Fassignment\u002Ftutorials-surround":397},[4,8,101,165,170],{"title":5,"path":6,"stem":7},"Getting started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12},"Algorithms","\u002Falgorithms","2.algorithms",[13,15,58],{"title":9,"path":10,"stem":14},"2.algorithms\u002Findex",{"title":16,"path":17,"stem":18,"children":19},"Assignment","\u002Falgorithms\u002Fassignment","2.algorithms\u002F1.assignment\u002Findex",[20,21,25,29,32,36,40],{"title":16,"path":17,"stem":18},{"title":22,"path":23,"stem":24},"Quickstart","\u002Falgorithms\u002Fassignment\u002Fquickstart","2.algorithms\u002F1.assignment\u002F1.quickstart",{"title":26,"path":27,"stem":28},"Tracking","\u002Falgorithms\u002Fassignment\u002Ftracking","2.algorithms\u002F1.assignment\u002F2.tracking",{"title":9,"path":30,"stem":31},"\u002Falgorithms\u002Fassignment\u002Falgorithms","2.algorithms\u002F1.assignment\u002F3.algorithms",{"title":33,"path":34,"stem":35},"Reference","\u002Falgorithms\u002Fassignment\u002Freference","2.algorithms\u002F1.assignment\u002F4.reference",{"title":37,"path":38,"stem":39},"Choosing","\u002Falgorithms\u002Fassignment\u002Fchoosing","2.algorithms\u002F1.assignment\u002F5.choosing",{"title":41,"path":42,"stem":43,"children":44},"Tutorials","\u002Falgorithms\u002Fassignment\u002Ftutorials","2.algorithms\u002F1.assignment\u002F6.tutorials\u002Findex",[45,46,50,54],{"title":41,"path":42,"stem":43},{"title":47,"path":48,"stem":49},"Fundamentals","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Ffundamentals","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F1.fundamentals",{"title":51,"path":52,"stem":53},"Backends","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Fbackends","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F2.backends",{"title":55,"path":56,"stem":57},"Object tracking","\u002Falgorithms\u002Fassignment\u002Ftutorials\u002Ftracking","2.algorithms\u002F1.assignment\u002F6.tutorials\u002F3.tracking",{"title":59,"path":60,"stem":61,"children":62},"Transport","\u002Falgorithms\u002Ftransport","2.algorithms\u002F2.transport\u002Findex",[63,64,67,71,74,77,80,84],{"title":59,"path":60,"stem":61},{"title":22,"path":65,"stem":66},"\u002Falgorithms\u002Ftransport\u002Fquickstart","2.algorithms\u002F2.transport\u002F1.quickstart",{"title":68,"path":69,"stem":70},"Point-cloud tutorial","\u002Falgorithms\u002Ftransport\u002Fpoint-clouds","2.algorithms\u002F2.transport\u002F2.point-clouds",{"title":9,"path":72,"stem":73},"\u002Falgorithms\u002Ftransport\u002Falgorithms","2.algorithms\u002F2.transport\u002F3.algorithms",{"title":33,"path":75,"stem":76},"\u002Falgorithms\u002Ftransport\u002Freference","2.algorithms\u002F2.transport\u002F4.reference",{"title":37,"path":78,"stem":79},"\u002Falgorithms\u002Ftransport\u002Fchoosing","2.algorithms\u002F2.transport\u002F5.choosing",{"title":81,"path":82,"stem":83},"Building","\u002Falgorithms\u002Ftransport\u002Fbuilding","2.algorithms\u002F2.transport\u002F6.building",{"title":41,"path":85,"stem":86,"children":87},"\u002Falgorithms\u002Ftransport\u002Ftutorials","2.algorithms\u002F2.transport\u002F7.tutorials\u002Findex",[88,89,93,97],{"title":41,"path":85,"stem":86},{"title":90,"path":91,"stem":92},"Optimal transport","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Foptimal-transport","2.algorithms\u002F2.transport\u002F7.tutorials\u002F1.optimal-transport",{"title":94,"path":95,"stem":96},"Sinkhorn","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Fsinkhorn","2.algorithms\u002F2.transport\u002F7.tutorials\u002F2.sinkhorn",{"title":98,"path":99,"stem":100},"Point clouds","\u002Falgorithms\u002Ftransport\u002Ftutorials\u002Fpoint-clouds","2.algorithms\u002F2.transport\u002F7.tutorials\u002F3.point-clouds",{"title":102,"path":103,"stem":104,"children":105},"Resources","\u002Fresources","3.resources",[106,108,147,151,155],{"title":102,"path":103,"stem":107},"3.resources\u002Findex",{"title":41,"path":109,"stem":110,"children":111},"\u002Fresources\u002Ftutorials","3.resources\u002F1.tutorials\u002Findex",[112,113,131],{"title":41,"path":109,"stem":110},{"title":16,"path":114,"stem":115,"children":116,"page":130},"\u002Fresources\u002Ftutorials\u002Fassignment","3.resources\u002F1.tutorials\u002Fassignment",[117,122,126],{"title":118,"path":119,"stem":120,"icon":121},"Tutorial 1 — The Assignment Problem","\u002Fresources\u002Ftutorials\u002Fassignment\u002F01_the_assignment_problem","3.resources\u002F1.tutorials\u002Fassignment\u002F01_the_assignment_problem","i-lucide-notebook",{"title":123,"path":124,"stem":125,"icon":121},"Tutorial 2 — Backends and Batching","\u002Fresources\u002Ftutorials\u002Fassignment\u002F02_backends_and_batching","3.resources\u002F1.tutorials\u002Fassignment\u002F02_backends_and_batching",{"title":127,"path":128,"stem":129,"icon":121},"Tutorial 3 — Object Tracking with the Assignment Problem","\u002Fresources\u002Ftutorials\u002Fassignment\u002F03_object_tracking","3.resources\u002F1.tutorials\u002Fassignment\u002F03_object_tracking",false,{"title":59,"path":132,"stem":133,"children":134,"page":130},"\u002Fresources\u002Ftutorials\u002Ftransport","3.resources\u002F1.tutorials\u002Ftransport",[135,139,143],{"title":136,"path":137,"stem":138,"icon":121},"Tutorial 1 — What Is Optimal Transport?","\u002Fresources\u002Ftutorials\u002Ftransport\u002F01_optimal_transport","3.resources\u002F1.tutorials\u002Ftransport\u002F01_optimal_transport",{"title":140,"path":141,"stem":142,"icon":121},"Tutorial 2 — The Sinkhorn Algorithm","\u002Fresources\u002Ftutorials\u002Ftransport\u002F02_sinkhorn_algorithm","3.resources\u002F1.tutorials\u002Ftransport\u002F02_sinkhorn_algorithm",{"title":144,"path":145,"stem":146,"icon":121},"Tutorial 3 — Point-Cloud OT and Shape Learning","\u002Fresources\u002Ftutorials\u002Ftransport\u002F03_point_clouds","3.resources\u002F1.tutorials\u002Ftransport\u002F03_point_clouds",{"title":148,"path":149,"stem":150},"Assignment applications","\u002Fresources\u002Fassignment-applications","3.resources\u002F2.assignment-applications",{"title":152,"path":153,"stem":154},"Transport applications","\u002Fresources\u002Ftransport-applications","3.resources\u002F3.transport-applications",{"title":156,"path":157,"stem":158,"children":159},"Benchmarks","\u002Fresources\u002Fbenchmarks","3.resources\u002F4.benchmarks\u002Findex",[160,161],{"title":156,"path":157,"stem":158},{"title":162,"path":163,"stem":164},"Contributing benchmarks","\u002Fresources\u002Fbenchmarks\u002Fcontributing","3.resources\u002F4.benchmarks\u002Fcontributing",{"title":166,"path":167,"stem":168,"icon":169},"API Reference","\u002Fapi","4.api","i-lucide-package",{"title":171,"path":172,"stem":173},"References","\u002Freferences","5.references",{"id":175,"title":176,"api":177,"body":178,"description":391,"extension":392,"links":177,"meta":393,"navigation":394,"path":42,"seo":395,"stem":43,"__hash__":396},"docs\u002F2.algorithms\u002F1.assignment\u002F6.tutorials\u002Findex.md","Assignment tutorials",null,{"type":179,"value":180,"toc":388},"minimark",[181,190,261,266,365,384],[182,183,184,185,189],"p",{},"Three progressive tutorials on the ",[186,187,188],"strong",{},"assignment"," family, targeting readers\nwith Python\u002FPyTorch experience but no prior knowledge of combinatorial\noptimisation.",[191,192,193,209],"table",{},[194,195,196],"thead",{},[197,198,199,203,206],"tr",{},[200,201,202],"th",{},"Tutorial",[200,204,205],{},"Topic",[200,207,208],{},"Notebook",[210,211,212,232,247],"tbody",{},[197,213,214,220,227],{},[215,216,217],"td",{},[218,219,47],"a",{"href":48},[215,221,222,223],{},"What LAP is, why brute force fails, ",[224,225,226],"code",{},"assignment.solve",[215,228,229],{},[224,230,231],{},"assignment\u002F01_the_assignment_problem.py",[197,233,234,239,242],{},[215,235,236],{},[218,237,238],{"href":52},"Backends and batching",[215,240,241],{},"Backend selection, 3-D batched solve, unpacked output",[215,243,244],{},[224,245,246],{},"assignment\u002F02_backends_and_batching.py",[197,248,249,253,256],{},[215,250,251],{},[218,252,55],{"href":56},[215,254,255],{},"IoU cost matrix, SORT-style tracker, trajectory visualisation",[215,257,258],{},[224,259,260],{},"assignment\u002F03_object_tracking.py",[262,263,265],"h2",{"id":264},"running-the-notebooks-locally","Running the notebooks locally",[267,268,273],"pre",{"className":269,"code":270,"language":271,"meta":272,"style":272},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# Install the notebooks dependency group\nuv sync --extra cu128 --group notebooks\n\n# Launch Jupyter Lab\njupyter lab notebooks\u002F\n\n# Re-render the docs pages from executed notebooks\nnix run .#nb-render -- --family assignment\n","bash","",[224,274,275,284,308,315,321,333,338,344],{"__ignoreMap":272},[276,277,280],"span",{"class":278,"line":279},"line",1,[276,281,283],{"class":282},"sutJx","# Install the notebooks dependency group\n",[276,285,287,291,295,299,302,305],{"class":278,"line":286},2,[276,288,290],{"class":289},"sbgvK","uv",[276,292,294],{"class":293},"s_sjI"," sync",[276,296,298],{"class":297},"stzsN"," --extra",[276,300,301],{"class":293}," cu128",[276,303,304],{"class":297}," --group",[276,306,307],{"class":293}," notebooks\n",[276,309,311],{"class":278,"line":310},3,[276,312,314],{"emptyLinePlaceholder":313},true,"\n",[276,316,318],{"class":278,"line":317},4,[276,319,320],{"class":282},"# Launch Jupyter Lab\n",[276,322,324,327,330],{"class":278,"line":323},5,[276,325,326],{"class":289},"jupyter",[276,328,329],{"class":293}," lab",[276,331,332],{"class":293}," notebooks\u002F\n",[276,334,336],{"class":278,"line":335},6,[276,337,314],{"emptyLinePlaceholder":313},[276,339,341],{"class":278,"line":340},7,[276,342,343],{"class":282},"# Re-render the docs pages from executed notebooks\n",[276,345,347,350,353,356,359,362],{"class":278,"line":346},8,[276,348,349],{"class":289},"nix",[276,351,352],{"class":293}," run",[276,354,355],{"class":293}," .#nb-render",[276,357,358],{"class":297}," --",[276,360,361],{"class":297}," --family",[276,363,364],{"class":293}," assignment\n",[182,366,367,368,371,372,375,376,379,380,383],{},"Notebooks are stored as jupytext percent-format ",[224,369,370],{},".py"," files under\n",[224,373,374],{},"notebooks\u002Fassignment\u002F",".  ",[224,377,378],{},"nix run .#nb-render"," converts them to ",[224,381,382],{},".ipynb",",\nexecutes each one, and writes the output to these pages.",[385,386,387],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":272,"searchDepth":310,"depth":310,"links":389},[390],{"id":264,"depth":286,"text":265},"Hands-on Jupyter notebooks covering the linear assignment problem — from first principles through SORT-style object tracking.","md",{},{"title":41},{"title":176,"description":391},"0wu4Iu27HbHqS1p1ZUMcvte_R_8ypTH9R7WHZeCdKfQ",[398,400],{"title":37,"path":38,"stem":39,"description":399,"children":-1},"A decision tree drawn from the 540-case benchmark sweep, with rules of thumb by problem size, cost distribution, and tracing requirement.",{"title":47,"path":48,"stem":49,"description":401,"children":-1},"What the linear assignment problem is, why brute force fails, and how to solve your first problem with torchmatch.assignment.solve.",1785218164101]