AI Snake Game
Created an AI that plays snake using a shallow neural net (4 fully connected layers 18-14-8-4). The model was trained using the genetic algorithm. This project was created using python3, TensorFlow and pygame, then converted to JavaScript. The AI was trained using the python version, the neural net weights were then hardcoded into the JavaScript version. Please excuse my JavaScript, this was my first project using the language.
Path Finding Visualizer
A visualization tool for path finding algorithms such as breadth first search, multi-source breadth first search, and A*. Features include, the ability to convert images to maps using edge detection, a convolutional neural network to predict the optimal settings for the A* heuristic, variable speed and grid density settings, a step counter, and a random grid generator. This project was made with python3, TensorFlow, and pygame.
Nanopore Morphology
A scanning transmission electron microscope was used to mill nanopores in a Si3N4 substrate. In python, 3D nanopore profiles were rendered from the 2D BSE images to study the shape of the nanopore as it formed (front and top view shown above). The nanopores were healed using low energy electron irradiation in order to observe the relationship between pore diameter and irradiation dose.
Union Find Visualizer
A painting game with the option to create free-hand drawings or use preset shape tools (up / down arrow keys). The color of each shape is random, however when shapes overlap, the groups of pixels merge together using the union-find data structure and the two groups of pixels take on the same color. Other features include erasable groups and paint-fill regions. (See Learn About the Project to learn more about launching the project in Gitpod and controls.)
Bird-oid (boid) Simulation
Simulation of bird flocking behavior with several tunable variables. Demonstrates emergent behavior from 3 simple hardcoded rules: separation, cohesion, and alignment. To play click the Gitpod button and expand the boid window twice. (See more detailed instructions under Learn About the Project)
Bowtie Defect Identification
Applied image post processing and machine learning techniques to identify critical microcracks in silicon photovoltaic wafers.
Sudoku Solver, Generator, & Game
A sudoku solver, generator, and playable game. This solver uses human techniques to solve most sudokus. In the case of extremely difficult (or underconstrained) sudoku puzzles, the human techniques are combined with an intelligent backtracking algorithm to efficiently solve any sudoku puzzle. See more detailed instructions for how to play the game under Learn About the Project.
Crystallographic Orientation from PL Images
Extracted images of mc-si grains from band-to-band photoluminesce images and used the degree and orientation of polarization to determine the orientation of the axis of greatest absorption within each grain. Pending future studies, this may be the first step in determining grain orientation from band-to-band PL images.
Perfect Snake
Created a bot that plays the game of snake perfectly.
Project made with python, pygame, numpy, and matplotlib.
Web Cam Video Filter
A web cam video filter with:
Multiple filters can be combined to create new effects. Made with python3 and OpenCV.
Image Recreation with Genetic Algorithm
Agent images start as random noise and those that best fit the target image are allowed to survive and breed. Basing the fitness function on a target image, the best agents will eventually recreate the image.
Photovoltaic Wafer Characterization
Characterized microcracks by stress intensity and geometric factors according to each crack's shear strain profile and estimated photovoltaic silicon wafers' strength according to the distribution of critical microcracks.
Traveling Salesman Heuristic
The traveling salesman problem (TSP) is a classic NP-Complete problem where there are n cities (nodes) that a salesman must determine the optimal path (list of edges) to visit every city and return to the starting city. The solution can be applied to any scenario with n nodes that must be visited near optimally - for example a robot arm soldering a set of nodes on a circuit board. (Caveat: the edge weights must satisfy the triangle inequality theorem.) Algorithms for finding the optimal path have O(n!) time complexity through brute force and O(n2 2n) time complexity through dynamic programming, which resticts scenarios where the optimal solution can be found to approximatley 20 nodes. This repository explores 3 heuristic solutions with more attractive time complexities than O(n2 2n):
*k is the contiguous subpath length where n/4 ≤ k ≤ n/2
Pyramidal Number Variation of Waring's Problem
A variation of Waring's problem. Problem Statement: For every natural number x in the range 1 to 109, find a combination of 5 or less pyramidal numbers that sum to x. i.e. 424 is the sum of (4, 56, 364). This repo was inspired by a war story from "The Algorithm Design Manual" by Steven Skiena. Three solution methods are available in waring_pyramidal.py: