Brief

Edward Greer and I created GeoRanking as our final year project at university, the aim was to use the web as an interface into an artificial intelligence that could recommend results based on preference rather than filtering. Where most property search engines would recommend based on checkboxes such as "I want a bungalow", we wanted a way to say "I would prefer a bungalow, a house would be fine but I really don't want a flat". Our final result wasn't quite as clever as we had planned but it was a good proof of concept and we visualised the results nicely in 3D using Robin Hawkes' ViziCities.

Process

As a team of two, we were able to work closely together developing both the ideas and codebase in a pair programming style where we critiqued each other to push the project to be the best it could be. Our supervisor helped with this as he refused to allow us to build an ad-hoc algorithm so instead we spent countless hours in the library to produce an algorithm that was based firmly in mathematics.

To organise the project we used a Trello board that we would both update with the progress of features and used it to track bugs. We could have used Github for this but being a small team, we wanted everything in one place as it wasn't large enough to need spreading out.

Technology

For this project we decided a robust backend was crucial, so we used Python with the Flask microframework to provide the API. JavaScript was used heavily on the front end to visualise the results, using ViziCities as the main mapping tool. At the time ViziCities was very early in development and so we needed to add a lot of features, many of which have now been implemented into the core project. The project is a great example of the power of the web and how modern web standards can easily create a cross-platform interface into the most complicated of systems.

Final Version

Incredibly we finished the project successfully. It wasn't quite as powerful as we had planned but it proves that the approach can work well. Since finishing the project, I've often wished I could run the results of various websites through our algorithm! Imagine going to a car site and being able to say "I want to try to get the cheapest car possible but I am willing to pay slightly more if it has an amazing insurance bracket or miles per gallon". You simply can't do that at the moment, you currently need to specify a min and max price, the exact insurance brackets you want etc. There is a lot of room for improvement.

Georanking Fullsize