In this project, I created a set of programs to solve the 8-Puzzle problem. The 8-Puzzle problem is a puzzle played on 3x3 grid with 8 blocks numbered one through 8, and one blank square. When this program was completed, it was able to discover a series a steps that would allow for putting the blocks in order. The program is also able to tell apart solvable and unsolvable board.
The purpose of this project was to reaffirm the atomic nature of matter by tracking the motion of particles undergoing Brownian motion, fit the data to Einstein’s model, and estimate Avogadro’s number. I was provided with image data of polystyrene spheres (“beads”) suspended in water, undergoing Brownian motion. I then created a computer program that analyzed this data by first finding the beads, then figure out how much each bead moved from one frame to the other, and then using this data to fit it into Einstein's modal and estimating Avogadro's number.
I worked in a group of four to develop a program to detect craters on images of the surface of mars. The project consisted of two parts. The first part was to develop a neural network to recognize the craters on the Mars image and for us to become familiar with supervised learning. We were able to achieve 95.8% detection rate on this part. The second part of the project was to develop a Convolution Neural Network(CNN) to do the same task, along with a real time pyramid and scanning window program to detect craters on the image. With the CNN we were able to achieve detection rate of 86.7% but a validation accuracy of up to 99%, and test accuracies between 96% and 97%. The reason we determined the detection rate to be only 86.7% is due to the lack of detail and increase noise that is visible to the sliding window with large size images. Another issue, was that the network had trouble differentiating small craters and surface features. My contributions included, processing images to create training, validation, and test data, determining optimal hyper parameters, and implemented an image pyramid and scanning window program for object recognition.
In this project I created a computer program that computed the optimal sequence alignment of two DNA strings. To do this, I had to measure the similarity between two genetic sequences by their edit distance. This project focused on dynamic programming to reduce the number of computations necessary. After the edit distance program was created and tested, I then created a program to produce the optimal alignment.
This was an extra credit assignment for my Linear Algebra course. It involved using rotational matrices to produce rotation of images. I then created an animation and speed feature for continuous rotation at different rates. The code can be found here.
In this assignment I implemented a 2-D tree. The keys of this tree were 2-dimensional points in the nodes structured in an alternating sequence starting with the x values. The 2-D tree is able to support efficient range search, nearest neighbor, and k-nearest neighbor search.
The goal of this project was to create a statistical model from English text, and use the model to generate stylized pseudo-random text and decode noisy messages. This model was built using a dictionary that contained kgrams as keys, and a dictionary with the succeeding letter after the kgram, and how many times it occured. A kgram is group of characters of a certain size. By using the frequency of the number of times the kgram appeared in the text, and the number of times a certain character succeeded it, the probability of the next character being that character can be calculated. This data was then used to decode noisy("~") text by replacing the tilde with the most likely character.
The goal of this project was to implement two methods to find good solutions to the traveling salesperson problem. The goal of the traveling salesperson is to visit all locations (points) provided, while keeping the total distance traveled at a minimal. However, the methods used in this project does not guarantee the minimum distance traveled. One method was the nearest neighbor approach. This involved creating a tour, which is a series of points that have been visited. The next step is to read a point and add the closest point to it to the tour and so on. The other approach was the smallest increase approach. In this approach a point is read and added after a point in the tour where it results in the smallest possible tour length.
Tunza is the project my Software Engineering team and I worked on in the spring of 2018. It is a web application that connects caregivers to supporters in order to help take care of patients. The team consisted of five engineers including me, where I was the group leader. My responsibilities included training the team on the tech stack, communicating with the client on the status of the project, taking his ideas and working with the team to make them tangible, developing a majority of the backend, and helping out on the frontend. I first created a user authentication system and an architecture for building patient networks via caregivers. In this system caregivers can create patient profiles which in turn creates a patient network. This allowed for caregivers to be part of many networks, and for patients to have multiple caregivers. I also created a posting system that allowed caregivers to post updates and photos to networks they are in. The tech stack consisted of Django, HTML, JavaScript, AJAX, and SASS.