{"id":184,"date":"2025-04-19T17:16:53","date_gmt":"2025-04-19T17:16:53","guid":{"rendered":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/?p=184"},"modified":"2025-04-19T17:16:53","modified_gmt":"2025-04-19T17:16:53","slug":"samuel-telanoff-status-report-4-19-25","status":"publish","type":"post","link":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/2025\/04\/19\/samuel-telanoff-status-report-4-19-25\/","title":{"rendered":"Samuel Telanoff Status Report 4\/19\/25"},"content":{"rendered":"<p>This week, I optimized the simulated shot algorithm and worked on our final presentation slides. For the simulated shot algorithm, I added more concrete vectorization for pocket detection and wall collisions. Additionally, I optimized ball collision checks by using scipy.spatial.cKDTree, which is an optimized form of the spatial hashing class I implemented earlier. Now, instead of using vectorized numpy checks with spatial hashing, which was in O(n), we use the cKDTree (a binary tree representing different locations on the board) to find nearest balls in O(log n). Additionally, SciPy uses underlying C code for the cKDTree implementation, which further optimizes the runtime. With these fixes, I was able to improve the shot simulation runtime by almost 600%.<\/p>\n<p>Before Optimizations<img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-185\" src=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/pre_optimizations-300x58.png\" alt=\"\" width=\"584\" height=\"113\" srcset=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/pre_optimizations-300x58.png 300w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/pre_optimizations-768x148.png 768w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/pre_optimizations-1024x198.png 1024w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/pre_optimizations.png 1284w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><span style=\"font-size: 1rem\">After Optimizations<\/span><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-186\" style=\"font-size: 1rem\" src=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/post_optimizations-300x56.png\" alt=\"\" width=\"579\" height=\"108\" srcset=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/post_optimizations-300x56.png 300w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/post_optimizations-768x143.png 768w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/post_optimizations-1024x191.png 1024w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/04\/post_optimizations.png 1286w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/p>\n<p>I will be spending this next week working on the final presentation, final report, and getting everything ready for the final demo. I am still on schedule.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week, I optimized the simulated shot algorithm and worked on our final presentation slides. For the simulated shot algorithm, I added more concrete vectorization for pocket detection and wall collisions. Additionally, I optimized ball collision checks by using scipy.spatial.cKDTree, which is an optimized form of the spatial hashing class I implemented earlier. Now, instead &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/2025\/04\/19\/samuel-telanoff-status-report-4-19-25\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Samuel Telanoff Status Report 4\/19\/25&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1130,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/184"}],"collection":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/users\/1130"}],"replies":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":2,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":188,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/184\/revisions\/188"}],"wp:attachment":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}