Ian McKenzie
• About me
Hi! My name's Ian. I'm currently a Research Engineer at FAR AI. Previously I contracted with OpenAI building Dangerous Capability and AI R&D evaluations, ran the Inverse Scaling Prize, and was a software engineering intern at Ought. Before that, I did an MSc Artificial Intelligence at the University of Edinburgh. Even more before that, I graduated from the University of St Andrews with an MPhys Mathematics and Theoretical Physics (an integrated master's degree).
I got involved in AI safety research because I became concerned about the existential risk posed by AGI during my undergrad and came to the conclusion that working to ensure that future AI is safe and beneficial for everyone is the most valuable thing I could do.
• What I've done
Even before discovering that AI research was what I wanted to do, I'd been working my way towards programming as my main interest. It started with a simple programming assignment in a maths module, followed by some small Javascript projects done in my spare time. I found it so engaging and fun that I started judging my module choices by how much coding they'd let me do.
Below is a selection of things that I've done, which will be updated as I find time to write about them (i.e. rarely: last update 2020). Technically this website is an example of a project I've worked on, but graphic design is not one of my core competencies, as evidenced by the upcoming buttons:
This started as a class project for a maths module (inappropriately named Symbolic Computation). I decided to implement Simulated Annealing (SA), having been inspired by reading about Quantum Annealing for a physics assignment. It quickly expanded from just trying to implement the heuristic on the ising spin model to applying it also on the Travelling Salesman Problem and implementing exact solvers for both to check SA's performance.
Here's SA finding the exact solution for ten randomly placed cities (which it did much faster than the deterministic methods):
The code for this project, and more details, are available on github.
Here is a selection of the small Javascript projects I've done. Many were written using the p5.js library, a choice inspired by The Coding Train.
-
Sierpiński Triangle
Using the Iterated Function System method I learnt from a module in Fractal Geometry, I wrote a piece of code that could be repurposed to draw many different fractals. One of the my favourites is the Sierpiński Triangle, which can be created by repeatedly removing the middle triangle from the image, and repeating this on all the smaller versions this creates. Click on the triangle below to generate the Sierpiński Triangle.
-
Conway's Game of Life
Conway's game of life is the quintessential example of a cellular automaton. Each frame is a 'generation', and the squares (or cells) live or die according to a simple set of rules. Despite this simplicity, the game has been explored in vast depth, as can be seen on LifeWiki. Below is an implementation I wrote for the Game of Life, again using p5.js. Left click to select cells, right click to deselect them.
-
Smart Rockets
These rockets evolve using a genetic algorithm to seek out the Goal – the red circle at the top of the box – while trying to avoid the obstacles in the way. Each rocket is assigned a fitness based on how close it got to the goal; the closer it got, the more likely it is to pass on its 'DNA' (set of vectors that define its path) to the next generation. Click and drag to add an obstacle.
-
Jump! A Generic Platformer
J!AGP is a platforming game prototype written in p5.js. To control Marco, use the WASD keys, and click to use his fire power. Click inside to begin.