In Erik Learned-Miller's Deep Learning class, we built Deep Jammer, a music generator that learns how to compose classical piano music from hundreds of classical piano pieces. Deep Jammer uses deep learning, specifically two LSTMs, to learn the spatial and temporal patterns of classical piano music. To evaluate Deep Jammer, we conducted a survey of over 50 participants where the best piece by Deep Jammer scored a 7.5 compared to a famous piece by Bach that scored an 8.1.
As a side project to learn more about automated decision making, I built Logos, a library that can solve MDPs. Logos offers dynamic programming methods (like value iteration) and reinforcement learning methods (like TD learning). Fortunately, Logos has been the basis for the decision making in many autonomous systems that I've worked on, such as self-driving vehicles, planetary navigation rovers, and earth observation satellites.
In Ben Carle's AI class, we built Deep Rainbow, an optimal Rubik’s Cube solver based on Richard Korf's approach. Deep Rainbow runs iterative deepening A* using an admissible max-heuristic function over three disjoint pattern databases that correspond to the set of edge cubees and two different sets of corner cubees. In just a few minutes, Deep Rainbow solves Rubik's cube that are 15 steps away or less from being solved.
In Ben Carle's AI class, we built Shallow Blue, a chess agent that uses minimax with alpha-beta pruning. Shallow blue uses an evaluation function with many aspects of chess like piece development, material balance, mobility, and attacked squares. Luckily, Shallow Blue won a chess tournament with over fifteen teams that built their own chess agents.
In Alan Labouseur's Operating Systems class, I built SvegOS, a browser-based operating system. Like any operating system, SvegOs can manage files (create, read, update, delete, and ls), load programs (load), and manage processes (run, ps, and kill). For debugging purposes, SvegOS has an interface that shows the state of the CPU registers, the memory, the hard drive, and each process as it's running.
In Alan Labouseur's Compilers class, I built Svegliator, a browser-based compiler that compiles a C-like language into 6502alan assembly language. Svegliator shows the machine code, the concrete syntax tree, the abstract syntax tree, and the symbol table after compilation. To follow compilation, Svegliator records every step of the scanner, the parser, the semantic analyzer, and the code generator as it's compiling.