Projects

Modular Algorithms for Computation in Quadratic Algebraic Number Fields

Source code: [GitHub repository]

Report: [pdf]

Funded by the Australian Mathematical Sciences Institute (AMSI) as part of a Summer Research Scholarship!.

Modular algorithms are a staple method for producing fast algorithms in computer algebra. Usually, we think about modular algorithms as a tool that only makes sense to use over the integers/rationals. For my research project, I investigated extending modular algorithms to perform fast computation over quadratic algebraic number fields, with some success! See the example of a modular linear solver for something really cool.

Since completing this project, I found out that the Magma computer algebra system uses a similar (modular) method to solve linear systems over quadratic algebraic number fields! I think it's pretty cool that I accidentally ended up stumbling upon the same thing that some really smart people had already discovered.

Symbolic Integration in Magma

Source code: [GitHub repository]

Introduction to mathematical concepts: [pdf]

Documentation and report: [pdf]

Magma does not have a symbolic computation library! This project is a partial implementation of the Risch integration procedure that aims to integrate nicely with the existing differential algebra functionality of Magma. You'll notice that I only have implementations for the integration of rational and logarithmic functions, and my logarithmic integration code unfortunately does not pass my tests.

VERY FAST FFT Polynomial Multiplication

Source code: [GitHub repository]

Overview of optimisations: [YouTube Video]

This was a really fun project I did for my High Performance Computing class (COSC3500) at the University of Queensland! I spent way too long writing some very fast C code for the multiplication of polynomials whose coefficients come from a specific finite field. The final result is that I am more than 5 times faster than Maple! (with the caveat that Maple, unlike me, has to interpret source code and decide which kernel code to execute at runtime)

Dracula's Spooky Castle

Source code: [GitHub repository]

This is a pretty cool project I made in a small team for my computer science capstone project! Dracula's Spooky Castle is a hidden information game where players race to track down and throw a lethal volume of holy water on Dracula before they are (rather gruesomely) eliminated by Dracula! On each turn, players can move to a new room on a castle board, cast light to block Dracula, and throw holy water to attack him.

Our project is a "technology-enhanced board game" that aims to integrate cool computer stuff into the already very cool traditional board game medium. Some of the more unfortunate members of the team wrote all of the hardware stuff (interacting with RFID readers on the board, writing to a display, etc.) while I got to have a blast writing an AI to play as Dracula. Let me know if you can beat it! (I can't, even though I know how it makes all of it's decisions)

There might be a web version of the game coming to my website soon...