I am a graduate from University of Washington, Seattle having studied Computer Science and Applied & Computational Mathematical Sciences (ACMS).
I am interested in the practical applications of computer science, particularly in the fields of machine learning. I enjoy exploring and solving problems across a range of other subjects, and have a passion for honing projects to perfection and expanding my repertoire by pursuing challenges.
A chess playing program built as an exercise of high-performance computing and artificial intelligence, and dedicated to a lifelong love of the game. The engine focuses on optimized move generation using magic bitboards and pinned king detection to speed up major bottlenecks. Position exploration is assisted by a variety of techniques, including killer move and principle variation heuristics. The search itself used by the engine is a basic negamax implementation of alpha-beta pruning, which uses a quiescence search and Late Move Reduction as necessary to extend or cut lines.
This engine was originally implemented in Java and is in the process of being converted to C++ to take advantage of lower level optimizations and of the chance to do an architectural re-write from the ground up. While the original implementation didn't possess many of the board representation specific optimizations its successor does, it did utilize a parallelized "Jamboree" variation of the alpha-beta pruning.
SFGrid (Simple and Fast Grid) is a class designed for creating, managing, and displaying a graphical grid. It is written in C++ for use with SFML (Simple and Fast Multimedia Library). It was originally written as a simple visual display method for personal projects. SFGrid features full control customizability over gridline coloring, visibility, and thickness, texture mapping, and resizing and repositioning. Additionally, it is optimized with large dimensions (> 1,000,000 individual cells) in mind.
The original motivation for this project was to have a simple and flexible graphical output method for future projects. Since then, I've ported SFGrid to Java, and have used it in several projects, such as the Pathfinding Comparison and Minesweeper Clone.
An exploration of various pathfinding algorithms and the traits of each. This program allows for the creation of identical obstacle courses of variable size that several algorithms can then traverse simultaneously. The interface gives the user easy editing and viewing capabilities, mirroring all edits to the obstacles grids for all algorithms and allowing step-by-step or continuous execution of the algorithms in action.
Weighted graphs are supported, with the ability to give different cells travel costs. Several preset obstacle setups can also be randomly generated, including mazes, gradients, and random fields.
Included algorithms are Dijkstra's algorithm, three variations of A* search, breadth-first search, and greedy best-first search. Additional algorithms can be added through by implementing a template interface.
The motivation for this project was familiarization and examination of available algorithms, seeing implementation and performance benefits of each. It was also one of the first uses of SFGrid's Java port.
A graphics engine created as an application of 3D calculus and linear algebra skills and later utilized for visualization of 3D mathematical concepts. It allows for the rudimentary display of points in 3D space, with the additional option of connecting them into line segments.
The engine works by simulating a movable 2D viewing plane to act as the camera. Points in space are then traced through the plane to the center of projection behind it. Points are then drawn using the coordinates of the line-plane intersections, producing the image for display. If line segments are being produced, an additional step is taken, identifying whether one of the two connected points is out of view and computing an intermediate point on the viewing plane if so.
Several implementation of this program can be seen in the adjacent images, including a basic perspective projection, TNB frame visualizer, and Riemann sum approximator.
An interactive redesign of the Seattle Public Utilities website, created for a course project as an exercise of design principles and processes. The new site has a focus on quick accessibility and access for several key services. The site also is also built to be mobile responsive to enable easy use when out in public.
Features include a quick bill payment page, service management for bin monitoring and pickup, as well as quick links to schedules, maps, and FAQs.
A faithful reproduction of Minesweeper, gameplay and interactibility wise. Features puzzle generation (with customizable parameters), score/time tracker, and auto-solving capabilities.
Puzzle generation is achieved by initializing a random board after the player's first guess, then automatically solving it. If an unwinnable position is reached, mine placements are swapped so that the game can be won without any guessing necessary.
This project was also one of the first uses of SFGrid, testing its graphical capabilities and multi-layering use.
An adjustable particle system with parameters for emitter and particle positioning, movement, behavior, and visual customization.
Optimized batching of vertex draw calls allows for steady performance even while updating and rendering 100,000's of particles. Swarming behavior is also implemented with the particles able to home in collectively on a single point.
An attempt at creating an optimal artificial intelligence for playing the game of Battleship. Several bots, each empoying a unique approach, were developed along with the game manager. The tournament manager that runs testing of these bots features adjustable game parameters and presets for various board sizes, ship fleets, along with round-robin tournament play with stat tracking.
This project also built on an improved version of the tournament management framework created for the Rock-Paper-Scissors AI testing program.
A collection of bots that play the game of Rock-Paper-Scissors (RPS) along with a tournament manager to fascilitate their testing and comparison. Creating competent AI for RPS is a challenge in statistical and pattern analysis, typically necessitating dynamic and adaptive strategies.
Several bots were created, each employing unique strategies, including frequency analysis, history matching, pattern prediction through Markov chains, and metastrategy analysis and switching.
The tournament manager allows for multiple game sets to be run in rapid succession to quickly evaluate the efficacy of the different AI strategies, with debugging/training modes also available. This tournament framework created for this project has since been built on for the Battleship AI Manager.
Dynamic 2D terrain that can be generated, raised, and destroyed. Functions using an underlying mesh that forms the terrain shape. A variation of explosion types and terrain physics are available, such as velocity based artillery and sheer-cliff collapsing.
This program models the game of Sudoku for variable board sizes and is able to generate, display, and solve Sudoku puzzles. Parameters can adjust the refresh rate/solving speed as well as the puzzle size and difficulty. In the automated solving display, red numbers represent guesses filled in by the player, with orange cells representing illegal values that conflict with other filled in cells.
This program was originally created for demonstration in the CSE 143 course as a visual example of recursive backtracking.
This collection of programs automates parsing, filtering, modeling, visualizing, and analyzing multidimensional scaling (MDS) models. Such a model seeks to visualize similarity between many different attributes by reducing them to a lower dimension (e.g. 2D) while still preserving major relationships. Each step in this process can be executed individually, or multiple can be done in sequence.
The parsing and filtering steps allow for CSV files to be scanned for particular sets of data, which is then collated into a more organized form. An MDS model can then be generated from this data. An intermediate colorization step can be applied to the filtered data, allowing particular information from another source to appear in the final model. A final script allows a user to determine which original attriute most strongly correlates to each new dimension.
Loose support for creating 1D and 3D visualizations also exists in addition to the standard 2D model.
These tools was originally created as part of the MATH 381 course as an automated utility for generating models.
A variable height dog ramp designed for water use, made out of repurposed wood. Hinges allow the ramp to float freely to a comfortable height and be collapsed for storage when not in use. Flotation devices can also be attached beneath the slope to adjust buoyancy.
Swinging prongs on the land component allow the ramp to be hooked into deck gaps or solid ground for increased stability.View Full Pictures: Main View, Main View 2, Side and Underside, Collapsed View