We are a group of international students that loves to travel. But when we go to a new city, we've found that we don't run the route we'd really love to run, since we don't know the city. That's where UsainBot comes in.
What it does
UsainBot will dynamically and through a chat-like interface generate routes for you according to your preference (how long you want to run and what you would like to see).
How we built it
We use a Django backend, which extracts data from OpenStreetMap. Next we parse this huge amount of data into a graph, which we can query for the optimal route. Frontend, we use Microsoft's Azure Bot Service. Through this, the user gets a personal interaction with our system.
Challenges we ran into
First, finding an efficient algorithm to generate the routes was a big struggle. We had to find a trade-off between time complexity and performance. Exhaustive search wasn't possible, so we opted for a genetic algorithm with mutation and crossover.
Secondly, we've found that not all nodes of OpenStreetMap have information about their environment. Some have tags like 'natural' or 'history', which we used, but a lot of nodes didn't have these tags. Therefore, even though the code to generate routes according to your preference (nature or architecture) is present, it still wouldn't really show to the user because of this issue.
Accomplishments that we're proud of
None of us worked with Django or Microsoft's Azure Bot Service before. Therefore, we are very proud of our work, since we also had to incorporate a larger learning curve than others.
What we learned
Apart from the new technologies, we learned how to work as a team for a long stretch without sleep. Two of us also never attended a hackaton before, so it's pretty cool that this was our first. We also learned we'd want to come back next year!
What's next for UsainBot
We'd love to incorporate machine learning into this. For example, a runner sees that there are works in one street, he or she could send feedback to the system. He or she could also rate the route, which gives us labelled data to generate an even better route next time. Also incorporating the bots in all kinds of services (Twitter, Slack, ...) would be cool. We already included it into Facebook, which was really easy to set up. Lastly, natural language processing could be incorporated even more.