I am an enthusiastic physicist and data scientist, deeply motivated by the pursuit of knowledge. Currently based in Cambridge, UK, I have been actively engaged in research to unravel scientific truths and translate them into real-world applications. My diverse experience spans photonics, quantum computing, medical physics, industrial sensing, electrochemistry, and sustainability, allowing me to explore a wide range of fascinating topics. I am currently seeking opportunities that allow be to combine my technical knowledge and passion for research with a creative edge. I am looking for positions as a Tools programmer, Gameplay programmer in video game studios or other creative settings.
Programming: 8 years experience in Python including Machine Learning libraries (PyTorch, TensorFlow) for classification and reinforcement learning, experience with large collaborative projects, Github repository management and UI development. Foundational knowledge in C#, JavaScript and gaming engines.
Research and Development: including automating and optimizing experiments, hypothesis testing, extracting insights from large datasets.
Interpersonal skills: troubleshooting problems, presenting complex concepts for variety of audiences, working in interdisciplinary teams, working on several projects simultaneously.
Fraser plays Tetris is a reinforcement learning project based on python libraries PyGame and PyTorch. The algorithm is based on a project by patrickloeber on GitHub which revolved around the classic game Snake. I modified the code to work for Tetris, here are some of my findings.
Find my code here.
In reinforcement learning, the state serves as the foundation for decision-making, providing the agent with information about the environment. The state representation determines what aspects of the environment are observable to the agent and influences its ability to perceive, learn, and generalize across different situations. A well-designed state representation should capture relevant features of the environment while minimizing dimensionality and computational complexity. For my algorithm I studied 4 different states.
The different states were evaluated by looking at the average score after the learning process has concluded. The average score is affected by model parameters, for example
In the plot below the optimization process is shown for state number 3 (Local Information State Representation) converging into a learning rate of 0.001 and a discount factor of 0.9. With these values the model reached an average of 2.0 points per game and a record of 14 points.
As a longterm music fan I have always been interested in what makes a song a specific genre. As I was studying the application of ML (Machine Learning) on audio signals for my work, I decided to use some of the methods I had learned in a side project. My final aim is to understand whether it is possible for a machine to descern a user's taste using ML.
I decided to begin with genre prediction and found an open dataset with 400 songs from 4 different genres which I used as my dataset and chose TensorFlow as my ML library. I initially attempted to feed waveform data directly into the algorithm. However, I encountered significant challenges due to slow performance and limitations in computational resources. Despite several attempts to optimize the algorithm, the computing power of my laptop proved insufficient to handle the complexity of the waveform data, hindering the training process.
I decided to take a different approach, and my research into the subject brought me to MFCC (Mel-Frequency Cepstral Coefficients) analysis, a technique widely utilized in voice recognition and related tasks. Thanks to this change I was able to overcome my performanxe issues and the training process sped up significantly. I then proceeded to optimize my algorithm by carefully selecting parameters such as model layers, layer depth and learning rate. My final algorithm achieved a validation accuracy of 90% and ROI of 0.78.
For future implementations of this algorithm I want to combine the two approaches. I will segment the original waveform in fractions that I will then use for the MFCC analysis, providing a change in frequencies over time.
Mycelium is a cozy puzzle game that asks you to play as the Mycelium Network connecting all trees within the forest. The aim of the game is to connect all trees using the least amount of resources as possible.
The connections are procedurally generated to branch out randomly every time. The code to genrate the connections was first written in python and then transferred to GDscript. It connects 2 points with many small segments all with a small random rotation. Once the connection has reached it's destination the trees are considered to be connected and the connection starts branching out, this occurs with passes where the in each pass the segrments from the previous passes branch out into new segments. Segment size, angle, and branching factor are randomly chosen for each connection.
The level is designed to be a slightly modified travelling salesmen problem, i.e. quickest path that connects all points with some paths being blocked by rocks. In later levels there will be two types of tree object, regular tree and resource tree. The resource trees will allow to increase the amount of resource in order to allow for more connections. In the image these are indicated by the trunks.
Tree asset art taken from Chuck CG.
Forest sounds from Mixkit.
Sound effects by Jordan Payne.
GDscript code found in GitHub repository.
During my doctoral research in quantum physics, I encountered a bottleneck in the data analysis process. The Python library I initially employed for fitting data to complex systems proved to be inefficient, particularly for the large datasets inherent in quantum experiments.
Seeking a solution, I embarked on a collaboration and ventured into learning Julia, a programming language known for its efficiency in scientific computing. Julia's optimization capabilities and efficient linear algebra operations offered a significant improvement over the Python library. The speed at which Julia processed and fitted the data was several orders of magnitude faster, enabling rapid extraction of insights from extensive datasets. As a result, I uncovered nuanced characteristics of the system that were previously obscured.
This experience underscored the value of collaboration and the importance of exploring alternative tools in scientific research. Learning Julia for this project was instrumental in accelerating the data analysis process and revealing novel insights into the physics of the system.
This project was a collaboration with a biologist, the primary objective was to provide quantitative data analysis for her study. The dataset consisted of microscopy videos capturing the post-fertilization movement of cortical fluids in ascidian cells, exhibiting different fluorescence frequency levels. My task involved extracting key metrics such as the cell's radius of curvature, fluorescence intensity distribution, and fluid speed from the 2D images.
To analyze the data, I utilized Python programming, developing algorithms for image processing. The process involved fitting the data to a custom function to extract cell walls, followed by calculating essential parameters like curvature and speed. This approach enabled us to produce quantitative insights into the biological processes under study.
The collaboration underscored the significance of interdisciplinary cooperation and was an enriching experience. Our findings were documented in a published paper, highlighting the value of combining expertise from different fields to advance scientific research.
My PhD work was concerned with two fascinating circuit quantum electrodynamics components, the Josephson junction and the geometric superinductor, and the interesting experiments that can be done by combining the two. The Josephson junction has revolutionized the field of superconducting circuits as a non-linear dissipation-less circuit element and is used in almost all superconducting qubit implementations since the 90s. On the other hand, the superinductor is a relatively new circuit element introduced as a key component of the fluxonium qubit in 2009. This is an inductor with characteristic impedance larger than the resistance quantum and self-resonance frequency in the GHz regime. The combination of these two elements can occur in two fundamental ways, in parallel and in series. When connected in parallel the two create the fluxonium qubit, a loop with large inductance and a rich energy spectrum reliant on quantum tunneling. On the other hand placing the two elements in series aids with the measurement of the IV curve of a single Josephson junction in a high impedance environment. In this limit theory predicts that the junction will behave as its dual element the phase-slip junction. While the Josephson junction acts as a non-linear inductor the phase-slip junction has the behavior of a non-linear capacitance and can be used to measure new Josephson junction phenomena, namely Coulomb blockade of Cooper pairs and phase-locked Bloch oscillations. The latter experiment allows for a direct link between frequency and current which is an elusive connection in quantum metrology. My work introduced the geometric superinductor, a superconducting circuit element where the high inductance is due to the geometry rather than the material properties of the superconductor, realized from a highly miniaturized superconducting planar coil. In my thesis these structures are be described and characterized as resonators and qubit inductors and progress towards the measurement of phase-locked Bloch oscillations is presented.
Disaster chemistry is an artistic porject inspired by the nanofabrication processes I was doing in my PhD. In particular I was fascinated by how mistakes in fabrication manifested as very interesting and abstract images. The art in disaster chemistry comes from overlaying and enhancing pictures taken with SEM and optical mictroscopes of samples that for one reason or another didn't qualify as being "useful" in the scientific sense. This project allowed me to process the frustration inherent to the trial and error nature of my work by helping me appreciate the value of mistakes and learning from them.
One of my great passions is clothing and fashion. For years I have been designing and bringing to life unique garments for myself and friends. I really enjoy the design process such as choosing patterns and fabrics, and I find the process of cutting and sewing pieces together relaxing. Above you can find some of my creations.