In an exploration of how machine learning works, I built a neural network from scratch in raw Python. The only library used was numpy for some quicker calculations. This was a long project, where I wrote everything involved from the ground up. Neurons, layers, activation functions, loss, backpropagation, optimizers, testing, training, regression, and so on. The final result is what you see on the right. A deep neural network that's able to classify the randomly distributed spiral of red, blue, and green dot into their respective colors. I've also used this for predicting the detector response from my optical simulation.
Computer graphics are fascinating to me. Games used to mostly reproduce lighting in their scenes through rasterization, which focuses on object meshes and shading logic to produce images. These days, some games utilize ray tracing. Ray tracing is when the light in the scene is treated as realistically as possible, absorbing and bouncing around on every surface. I wrote a ray tracer from scratch to start understanding the fundamentals of how modern games use it in their lighting. This ray tracer supports multiple materials, bounded volume hierarchy, ray bouncing, motion blur, basic animation, anti-aliasing, and more. Eventually, this project will be translated to the Unity game engine, and I'll incorporate the GPU to start ray tracing in real-time with parallelization, like modern games do. This also happens to involve quite a bit of optical physics, which ties in well with my work on the PROSPECT-II optical simulations.
This one came out of both necessity and pure interest. In writing the paper on Neutrino Directionality, we found that there was no clear way to showcase the angles that PROSPECT was reconstructing relative to the reactor core. I decided that the best way to approach this was to build a 3D model in Blender and animate the camera moving around it. This was a chance to exercise some light artistic creativity as well as provide a new look at our detector. The result is what you see on the right, a model complete with materials and lighting, while still retaining the most accurate measurements of the detector and reactor core that we have.
If you can build a competent Chess AI, you can build an AI for any type of game, right? That's my hope, at least. I mostly took on this project because the idea of pitting bots against older versions of the AI every time I added a new feature sounded really fun. The win rate going up with the inclusion of better algorithms and optimization was my main motivation. Then I found out that just getting the program to obey all the rules of chess is a much bigger project than I'd imagined. I did get there, however. The AI has been tested against official chess AIs like Stockfish to verify its following of the rules. The "AI" just plays random moves at the moment, but they are all legal random moves (after painstakingly testing millions of positions). The next step when I have time will be incorporating bitboards to boost the depth calculation to possibly millions of positions per second.
It's not like I'm an expert, but I do enjoy building websites. I built this one after all, at least. Everything here was built from scratch using HTML, CSS, Javascript, and Bootstrap 5. Check out the website's responsiveness to different screen sizes by resizing your window horizontally, or try opening it on your phone or tablet. Things like the website fading in on load, the text unblurring and fading in from the right, the navigation menu hover effects, and the colored layer curves were all made by me. I might end up adding more cool features to the website over time, so stay tuned!
Some features are still experimental, so if you don't see the scrolling fade (for example), use a newer version of Chrome or Brave Browser.