Project Portfolio Computer Science Projects

Informative Path Planning

In this project I explore the effectiveness of various sampling algorithms in solving the informative path planning problem. In this case the task is to learn a 2D field (e.g. temperature map). The belief state of the field is modelled using a Gaussian Markov Random Field (GMRF) which is sequentially updated with Bayesian conditioning. The paths are planned to minimize the variance of the belief state.

Mixture of Gaussians

In this project I implement the expectation maximization (EM) algorithm for a mixture of Gaussians model. Here the EM algorithm iteratively updates the covariance matrix, and mean and weight of each cluster.

Connect-4 AI

In this project I create connect-4 AI players using a minimax tree search algorithm with alpha-beta pruning and other added heuristics (e.g. favoring the middle, and favoring having rows of 2, 3).

Natural Language Understanding

I worked through the content of Stanford's online course CS224U Natural Language understanding. The course used many of the most popular Python ML libraries including numpy, tensorflow, pandas, and scikit-learn.


In this project I create a perceptron and then multilayer perceptron (neural net) from scratch and test them on housing data from the US census in a simple classification problem deciding whether the house has price greater than $50,000.

Computer Systems

I completed the projects in Bryant and O'Hallaron's textbook Computer Systems: a Programmer's Perspective. The projects included:
(1) recreating a dynamic memory allocator for C
(2) creating a simple Unix shell
(3) using spatial and temporal cache locality to optimize code
(4) understanding and implementing buffer overflow attacks
(5) stepping through and debugging assembly code

Other projects

For the rest of my machine learning, software development, and computer science projects please look through my Github