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.

Reinforcement Learning in Two Player Games

This research project focuses on reinforcement learning in multiplayer competitve environments. I developed novel algorithms that combine ideas from reinforcement learning, game theory, and meta learning. Read more about this research here! Also if you are interested in getting a deeper understanding of the key ideas in RL I highly reccomend YouTube courses by Sergey Levine and David Silver.

Satellite Scheduling

At Riverside Research I worked on improving a greedy satellite scheduling system using tools from Machine Learning and Mixed Integer Programming.

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

Prosthetic Thumb Design

In SolidWorks I designed a fully automated 3D thumb to be used with myoelectric sensors. The thumb has two DOF each with a separate motor to actuate motion. The motors are taken from models of real commercial products, thus the 3D printed parts will be correctly scaled. This design costs a total of less than $15 to 3D print and order the parts; links to parts and more details are given in this report.

Other projects

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