{"id":8867,"date":"2016-08-21T12:00:12","date_gmt":"2016-08-21T16:00:12","guid":{"rendered":"http:\/\/mat.tepper.cmu.edu\/blog\/?p=8867"},"modified":"2016-08-21T12:00:12","modified_gmt":"2016-08-21T16:00:12","slug":"touring-the-rio-olympics","status":"publish","type":"post","link":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/2016\/08\/21\/touring-the-rio-olympics\/","title":{"rendered":"Touring the Rio Olympics"},"content":{"rendered":"<blockquote><p>I&#8217;m a sportswriter who is bound for the Olympics, and I&#8217;m writing an article about maximizing the number of events I see in a particular day.<\/p>\n<p>I thought the input of a mathematician with expertise in these matters would be helpful to the story.<\/p><\/blockquote>\n<p>This was an interesting start to day a month ago. \u00a0I received this email from\u00a0<em>New York Times\u00a0<\/em>reporter <a href=\"http:\/\/www.nytimes.com\/by\/victor-mather\">Victor Mather<\/a> via University of Waterloo prof <a href=\"http:\/\/www.math.uwaterloo.ca\/~bico\/\">Bill Cook<\/a>. \u00a0Victor had contacted Bill since Bill is the world&#8217;s foremost expert on the Traveling Salesman Problem (he has a must-read book aimed at the general public called\u00a0<em><a href=\"http:\/\/press.princeton.edu\/titles\/9531.html\">In Pursuit of the Traveling Salesman: Mathematics at the Limits of Computation<\/a><\/em>). \u00a0The TSP involves visiting a number of sites while traveling the minimum distance. \u00a0While Victor&#8217;s task will have some aspects of the TSP, \u00a0there are scheduling aspects that I work on so Bill recommended me (thanks Bill!).<\/p>\n<p>Victor&#8217;s plan was to visit as many Olympic events in Rio as he could in a single day. \u00a0This was part of a competition with another reporter, <a href=\"http:\/\/www.nytimes.com\/by\/sarah-lyall\">Sarah Lyall<\/a>. \u00a0Victor decided to optimize his day; Sarah would simply go where her heart took her. \u00a0Who would see more events?<\/p>\n<p>Victor initially just wanted to talk about how optimization would work (or at least he made it seem so) but I knew from the first moment that I would be optimizing his day if he would let me. \u00a0He let me. \u00a0He agreed to get me data, and I would formulate and run a model that would find his best schedule.<\/p>\n<p>On the day they chose (Monday, August 15), there were 20 events being held. \u00a0<a href=\"https:\/\/fac-mtrick02.tepper.cmu.edu\/blog\/wp-content\/uploads\/2016\/08\/rio-2016.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-8868\" src=\"https:\/\/fac-mtrick02.tepper.cmu.edu\/blog\/wp-content\/uploads\/2016\/08\/rio-2016.png\" alt=\"rio-2016\" width=\"203\" height=\"144\" \/><\/a>The map shows that the venues are all spread out across Rio (a dense, somewhat chaotic, city not known for its transportation infrastructure). \u00a0So we would have to worry about travel distance. \u00a0Victor provided an initial distance matrix, with times in minutes (<a href=\"https:\/\/fac-mtrick02.tepper.cmu.edu\/blog\/wp-content\/uploads\/2016\/08\/OLY-times.xlsx\">OLY times<\/a>). \u00a0As we will see, this matrix must have been created by someone who had a few too many caipirinhas on Copacabana Beach: \u00a0it did not exactly match reality.<\/p>\n<p>So far the problem does look like a TSP: just minimize the distance to see 20 sites. \u00a0The TSP on 20 sites is pretty trivial (see <a href=\"http:\/\/mat.tepper.cmu.edu\/blog\/?p=6995\">a previous blog post<\/a> for how hard solving TSPs are in practice) so simply seeing the sites would be quite straightforward. \u00a0However, not surprisingly Victor actually wanted to see the events happening. \u00a0For that, we needed a schedule of the events, which Victor promptly provided:<\/p>\n<blockquote><p>Badminton 8:30 am \u2013 10:30 am \/\/ 5:30 pm -7<br \/>\nBasketball 2:15 pm \u2013 4:15 pm\/\/ 7 pm -9 pm \/\/ 10:30 pm &#8211; midnite<br \/>\nBeach Volleyball 4 p.m.-6 p.m. \/\/ 11pm \u2013 1 am<br \/>\nBoxing 11 am-1:30 pm, 5 pm \u2013 7:30 pm<br \/>\nCanoeing 9 am \u2013 10:30 am<br \/>\nCycling: 10 a.m. \u2013 11 am \/\/\/ 4 pm \u2013 5:30<br \/>\nDiving 3:15 pm -4:30<br \/>\nEquestrian 10 am- 11 am<br \/>\nField Hockey 10 am \u2013 11:30 am \/\/ 12:30 \u20132 \/\/ 6-7:30 pm \/\/ 8:30 pm -10<br \/>\nGymnastics 2 pm -3 pm<br \/>\nHandball: 9:30 am- 11 am\/\/ 11:30 \u2013 1pm \/\/2:40 -4 \/\/4:40 \u2013 6 pm \/\/ 7:50 \u2013 9:10 pm \/\/ 9:50 pm -11:10<br \/>\nOpen water Swimming 9 am \u2013 10 am<br \/>\nSailing 1 pm \u2013 2 pm<br \/>\nSynchronized swimming: 11 am- 12:30<br \/>\nTable tennis 10 am -11 am \/\/ 3pm -4:30 \/\/ 7:30pm &#8211; 9<br \/>\nTrack 9:30 am -11:30 am \/\/ 8:15pm -10 pm<br \/>\nVolleyball 9:30 am- 10:30 am \/\/ 11:30 \u2013 12:30 \/\/ 3pm \u2013 4 pm \/\/ 5 pm \u2013 6 pm \/\/ 8:30 pm -9:30 \/\/ 1030 pm -11:30<br \/>\nWater polo 2:10 pm \u2013 3 pm \/\/ 3:30 -4:20 \/\/6:20 -7:10 \/\/ 7:40 \u2013 8:30<br \/>\nWeightlifting 3:30 \u2013 4:30 pm \/\/ 7 pm- 8 pm<br \/>\nWrestling 10 am \u2013 noon \/\/ 4 pm- 6 pm<\/p><\/blockquote>\n<p>Many events have multiple sessions: \u00a0Victor only had to see one session at each event, and decided that staying for 15 minutes was enough to declare that he had &#8220;seen&#8221; the event. \u00a0It is these &#8220;time windows&#8221; that make the problem hard(er).<\/p>\n<p>With the data, I promptly sat down and modeled the problem as an mixed-integer program. \u00a0I had variables for the order in which the events were seen, the time of arrival at each event, and the session seen for each event (the first, second, third or so on). \u00a0There were constraints to force the result to be a path through the sites (we didn&#8217;t worry about where Victor started or ended: travel to and from his hotel was not a concern) and constraints to ensure that when he showed up at an event, there was sufficient time for him to see the event before moving on.<\/p>\n<p>The objective was primarily to see as many events as possible. \u00a0 With this data, it is possible to see all 20 events. \u00a0At this point, if you would like to see the value of optimization, you might give it a try: \u00a0can you see all 20 events just by looking at the data? \u00a0I can&#8217;t!<\/p>\n<p>But there may be many ways to see all the events. \u00a0So, secondarily, I had the optimization system minimize the distance traveled. \u00a0The hope was that spending less time on the buses between events would result in a more robust schedule.<\/p>\n<p>I put my model in the amazing modeling system <a href=\"http:\/\/www.aimms.com\">AIMMS<\/a>. \u00a0AIMMS lets me input data, variables, constraints, and objectives incredibly quickly and intuitively, so I was able to get a working system together in a couple of hours (most of which was just mucking about with the data). \u00a0AIMMS then generates the integer program which is sent to <a href=\"http:\/\/www.gurobi.com\">Gurobi<\/a> software (very fast effective mixed-integer programming solution software) and an hour later I had a schedule.<\/p>\n<table class=\" aligncenter\" style=\"border-collapse: collapse; width: 153pt;\" border=\"0\" width=\"204\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col style=\"width: 51pt;\" span=\"3\" width=\"68\" \/> <\/colgroup>\n<tbody>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt; width: 51pt;\" width=\"68\" height=\"19\">start<\/td>\n<td style=\"width: 51pt;\" width=\"68\">Arrival<\/td>\n<td style=\"width: 51pt;\" width=\"68\">Next travel time<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">canoe<\/td>\n<td class=\"xl63\" style=\"text-align: right;\" align=\"right\">9:00<\/td>\n<td align=\"right\">20<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">open swimming<\/td>\n<td class=\"xl63\" align=\"right\">9:35<\/td>\n<td align=\"right\">45<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">equestrian<\/td>\n<td class=\"xl63\" align=\"right\">10:35<\/td>\n<td align=\"right\">35<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">wrestling<\/td>\n<td class=\"xl63\" align=\"right\">11:25<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">synchro<\/td>\n<td class=\"xl63\" align=\"right\">12:15<\/td>\n<td align=\"right\">30<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">sailing<\/td>\n<td class=\"xl63\" align=\"right\">13:00<\/td>\n<td align=\"right\">30<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">gymnastics<\/td>\n<td class=\"xl63\" align=\"right\">14:00<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">handball<\/td>\n<td class=\"xl63\" align=\"right\">14:40<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">basketball<\/td>\n<td class=\"xl63\" align=\"right\">15:05<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">diving<\/td>\n<td class=\"xl63\" align=\"right\">15:30<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">cycling<\/td>\n<td class=\"xl63\" align=\"right\">17:00<\/td>\n<td align=\"right\">30<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">beach volleyball<\/td>\n<td class=\"xl63\" align=\"right\">17:45<\/td>\n<td align=\"right\">30<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">badminton<\/td>\n<td class=\"xl63\" align=\"right\">18:40<\/td>\n<td align=\"right\">5<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">boxing<\/td>\n<td class=\"xl63\" align=\"right\">19:00<\/td>\n<td align=\"right\">5<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">weightlifting<\/td>\n<td class=\"xl63\" align=\"right\">19:20<\/td>\n<td align=\"right\">5<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">table tennis<\/td>\n<td class=\"xl63\" align=\"right\">19:40<\/td>\n<td align=\"right\">10<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">water polo<\/td>\n<td class=\"xl63\" align=\"right\">20:05<\/td>\n<td align=\"right\">35<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">hockey<\/td>\n<td class=\"xl63\" align=\"right\">20:55<\/td>\n<td align=\"right\">35<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">track<\/td>\n<td class=\"xl63\" align=\"right\">21:45<\/td>\n<td align=\"right\">20<\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">volley<\/td>\n<td class=\"xl63\" align=\"right\">22:30<\/td>\n<td><\/td>\n<\/tr>\n<tr style=\"height: 14.25pt;\">\n<td style=\"height: 14.25pt;\" height=\"19\">end<\/td>\n<td class=\"xl63\" align=\"right\">22:45<\/td>\n<td align=\"right\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This schedule has 385 minutes on the bus.<\/p>\n<p>I discussed this problem with my colleague <a href=\"http:\/\/www.andrew.cmu.edu\/user\/vanhoeve\/\">Willem van Hoeve<\/a>, who spent about five minutes implementing a constraint programming model (also in AIMMS) to confirm this schedule. \u00a0He had a access to a newer version of the software, which could find and prove optimality within minutes. \u00a0Unfortunately my version of the software could not prove optimality overnight, so I kept with my MIP model through the rest of the process (while feeling I was driving a Model T, while a F1 racecar was sitting just up the hallway). \u00a0CP looks to be the right way to go about this problem.<\/p>\n<p>I spent some time playing around with these models to see whether I could get something that would provide Victor with more flexibility. \u00a0For instance, could he stay for 20 minutes at each venue? \u00a0No: the schedule is too tight for that. \u00a0So that was the planned schedule.<\/p>\n<p>But then Victor got to Rio and realized that the planned transportation times were ludicrously off. \u00a0There was no way he could make some of those trips in the time planned. \u00a0So he provided another transportation time matrix (<a href=\"https:\/\/fac-mtrick02.tepper.cmu.edu\/blog\/wp-content\/uploads\/2016\/08\/olympics3.xlsx\">olympics3<\/a>) with longer times. \u00a0Unfortunately, with the new times, he could not plan for all 20: the best solution only allows for seeing 19 events.<\/p>\n<table width=\"340\">\n<tbody>\n<tr>\n<td width=\"68\">Event<\/td>\n<td width=\"68\"><\/td>\n<td width=\"68\">Arrival<\/td>\n<td width=\"68\">Next Travel<\/td>\n<td width=\"68\">Slack<\/td>\n<\/tr>\n<tr>\n<td>canoe<\/td>\n<td><\/td>\n<td>9:00<\/td>\n<td>30<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>track<\/td>\n<td><\/td>\n<td>9:45<\/td>\n<td>45<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>equestrian<\/td>\n<td><\/td>\n<td>10:45<\/td>\n<td>35<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>synchro<\/td>\n<td><\/td>\n<td>11:35<\/td>\n<td>60<\/td>\n<td>0:10<\/td>\n<\/tr>\n<tr>\n<td>sailing<\/td>\n<td><\/td>\n<td>13:00<\/td>\n<td>60<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">gymnastics<\/td>\n<td>14:15<\/td>\n<td>15<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">water polo<\/td>\n<td>14:45<\/td>\n<td>15<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>diving<\/td>\n<td><\/td>\n<td>15:15<\/td>\n<td>15<\/td>\n<td>0:25<\/td>\n<\/tr>\n<tr>\n<td>cycling<\/td>\n<td><\/td>\n<td>16:10<\/td>\n<td>15<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>handball<\/td>\n<td><\/td>\n<td>16:40<\/td>\n<td>15<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>wrestling<\/td>\n<td><\/td>\n<td>17:10<\/td>\n<td>25<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>boxing<\/td>\n<td><\/td>\n<td>17:50<\/td>\n<td>15<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">badminton<\/td>\n<td>18:20<\/td>\n<td>15<\/td>\n<td>0:10<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">weightlifting<\/td>\n<td>19:00<\/td>\n<td>15<\/td>\n<td>0:35<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">table tennis<\/td>\n<td>20:05<\/td>\n<td>25<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>basketball<\/td>\n<td><\/td>\n<td>20:45<\/td>\n<td>35<\/td>\n<td>0:10<\/td>\n<\/tr>\n<tr>\n<td>hockey<\/td>\n<td><\/td>\n<td>21:45<\/td>\n<td>45<\/td>\n<td>0:30<\/td>\n<\/tr>\n<tr>\n<td>volley<\/td>\n<td><\/td>\n<td>23:15<\/td>\n<td>30<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">beach volleyball<\/td>\n<td>0:00<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: left;\">So that is the schedule Vincent started with. \u00a0I certainly had some worries. \u00a0Foremost was the travel uncertainty. \u00a0Trying to minimize time on the bus is a good start, but we did not handle uncertainty as deeply as we could have. \u00a0But more handling of uncertainty would have led to a more complicated set of rules and it seemed that a single schedule would be more in keeping with the challenge. \u00a0The morning in particularly looked risky, so I suggested that Victor be certain to get to gymnastics no later than 2:15 in order to take advantage of the long stretch of close events that follow. \u00a0Sailing in particular, looked to be pretty risky to try to get to.<\/p>\n<p style=\"text-align: left;\">I had other worries: \u00a0for instance, what if Victor arrived during half-time of an event, or between two games in a single session? \u00a0Victor probably wouldn&#8217;t count that as seeing the event, but I did not have the detailed data (nor an idea of the accuracy of such data if it did exist), so we had to hope for the best. \u00a0I did suggest to Victor that he try to keep to the ordering, leaving an event as soon as 15 minutes are up, hoping to get a bit more slack when travel times worked out better than planned (as-if!).<\/p>\n<p style=\"text-align: left;\">So what happened? \u00a0Victor&#8217;s full story is <a href=\"http:\/\/www.nytimes.com\/2016\/08\/19\/sports\/olympics\/reporter-race-to-events-rio-games-mather.html\">here<\/a>\u00a0and it makes great reading (my school&#8217;s PR guy says Victor is &#8220;both a reporter and a writer&#8221;, which is high praise). \u00a0Suffice it to say, things didn&#8217;t go according to plan. The article starts out:<\/p>\n<blockquote>\n<p style=\"text-align: left;\">There are 20 [events] on the schedule on Monday. \u00a0Might an intrepid reporter get to all of them in one day? \u00a0I decide to find out, although it doesn&#8217;t take long to discover just how difficult that will be.<\/p>\n<p style=\"text-align: left;\">The realization comes while I am stranded at a bus stop in Copacabana, two and a half hours into my journey. \u00a0The next bus isn&#8217;t scheduled for three hours. \u00a0And I&#8217;ve managed to get to exactly one event, which I could barely see.<\/p>\n<\/blockquote>\n<p style=\"text-align: left;\">I had given him some rather useless advice in this situation:<\/p>\n<blockquote>\n<p style=\"text-align: left;\">&#8220;Something goes wrong, you reoptimize,&#8221; Professor Trick had cheerfully said. \u00a0This is hard to do sitting on a bus with the computing power of a pen and a pad at my disposal.<\/p>\n<\/blockquote>\n<p style=\"text-align: left;\">Fortunately, he got back in time for the magical sequence of events in the afternoon and early evening. \u00a0One of my worries did happen, but Victor agilely handled the situation:<\/p>\n<blockquote>\n<p style=\"text-align: left;\">Professor Trick urged me in his instructions to &#8220;keep the order!&#8221; \u00a0So it is with some trepidation that I go off-program. \u00a0Wrestling is closer to where I am than handball, and it looks like I will land at the handball arena between games. \u00a0So I switch them. \u00a0It&#8217;s the ultimate battle of man and machine &#8212; and it pays off. \u00a0I hope the professor approves of my use of this seat-of-the-pants exchange heuristic.<\/p>\n<\/blockquote>\n<p style=\"text-align: left;\">I do approve, and I very much like the accurate use of the phrase &#8220;exchange heuristic&#8221;.<\/p>\n<p style=\"text-align: left;\">At the end Victor sees 14 events. \u00a019 was probably impossible, but a few more might have been seen with better data. \u00a0I wish I had used the optimization code to give Victor some more &#8220;what-ifs&#8221;, and perhaps some better visualizations so his &#8220;pen and pad optimization&#8221; might have worked out better. \u00a0But I am amazed he was able to see this many in one day!<\/p>\n<p style=\"text-align: left;\">And what happened to Sarah, the reporter who would just go as she pleased? \u00a0Check out <a href=\"http:\/\/www.nytimes.com\/2016\/08\/19\/sports\/olympics\/reporter-race-to-events-rio-games-lyall.html\">her report<\/a>, where she saw five events. \u00a0If Victor went a little extreme getting a university professor to plan his day, Sarah went a little extreme the other way in not even looking at a map or a schedule.<\/p>\n<p style=\"text-align: left;\">This was a lot of fun, and I am extremely grateful to Victor for letting me do this with him (and to Bill for recommending me, and to Willem for providing the CP model that gave me confidence in what I was doing).<\/p>\n<p style=\"text-align: left;\">I&#8217;ll be ready for Tokyo 2020!<\/p>\n<p style=\"text-align: left;\">\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m a sportswriter who is bound for the Olympics, and I&#8217;m writing an article about maximizing the number of events I see in a particular day. I thought the input of a mathematician with expertise in these matters would be helpful to the story. This was an interesting start to day a month ago. \u00a0I &hellip; <a href=\"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/2016\/08\/21\/touring-the-rio-olympics\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Touring the Rio Olympics&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39,41,51],"tags":[],"class_list":["post-8867","post","type-post","status-publish","format-standard","hentry","category-or-in-the-press","category-personal","category-sports"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/8867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=8867"}],"version-history":[{"count":0,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/8867\/revisions"}],"wp:attachment":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=8867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=8867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=8867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}