The Summer Undergraduate Research Fellowship (SURF) Program provides opportunities for Amherst College students to immerse themselves in a hands-on, collaborative science research project for 8 weeks during the summer. Research fellows work closely with their faculty mentors to design and execute their research project, and all Fellows take part in group educational and social activities.
The department is involved in SURF activities almost every year, depending on faculty availability and student request. In the summer of 2020, despite the COVID-19 pandemic, we had seven "SURFers" working with Prof. Scott Kaplan and Prof. Lee Spector on different projects. The students working with Prof. Kaplan worked, broadly, on the area of computer systems, while Prof. Spector's group worked on genetic programming and artificial intelligence. The abstracts and student-made videos below give a short summary of these activites.
If you are interested in SURF for the future, look for announcements from the college and/or get in touch with a member of the computer science faculty to check on their availability.
My SURF project centered on improving the PyshGP genetic programming system. I ran stress tests using assorted datasets that revealed several ways to enhance the PyshGP system. One significant improvement involved penalizing programs with higher error values when they produce trivial solutions, which enabled the system to reach a solution more quickly. Additionally, I created user guides and demonstration tools to make the system more accessible and comprehensible to new users.
My SURF group and I, during this summer, focused mostly on different page-replacement policies. Our goal was to create tools that would help us test out implementations of these policies and then compare them with respect to different parameters. My work specifically, centered on implementing the "Safely-Allowed Drop" algorithm (SAD) and integrating it into the Pin tool (bit-instrumentalization tool), which essentially enabled us to shrink the output files we acquired from tracing different programs, while still preserving all the relevant information they provided in the first place.
I worked alongside my peers Luca Duranovic and Tian Xia with Professor Scott Kaplan to investigate the efficiency of page replacement policies. We posed the question "Are there more efficient paging policies than the current standard; do the systems built decades ago continue to provide efficiency when applied to the far greater memory sizes and speeds of modern computing?" Implementing a ground-up approach, we first designed the tools
necessary to gather memory traces and to analyze various policies, then created algorithms for several of the more popular policies to test. Our work is hopefully a first step to faster and more efficient paging policies, and therefore faster systems.
I spent Summer 2020 working with a small team under Professor Lee Spector's supervision. I helped develop Propeller, a Genetic Programming system aimed to be simple and intuitive even to those just beginning to work with Genetic Programming. Goals for the summer included creating a front-end interface for a Genetic Programming
system, increasing the reach of the Genetic Programming by creating applications to help users understand Push, a language specifically made for Genetic Programming, and scaffolding elements in Propeller to aid in the ambitious aim in supporting autoconstructive evolution.
Push is a programming language created for computers to write programs in. When genetic programming evolves a program to solve a given problem in Push, we as users want to be able to understand the program the genetic programming system came up with. Because Push was created exclusively for computers, this can sometimes be challenging. This summer, I created a visualizer for Push programs so that they could be represented in a way that is, hopefully, easier for users to understand.
Over the summer I researched page replacement algorithms performances on modern workloads. Together with our group, we developed a set tool chain that collects, reduces, and simulates memory traces. I worked primarily on writing effective simulators, and evaluated various collected workloads.
My research this summer was helping in developing a genetic programming system called Propeller using Clojure and making it interopable with IBM quantum simulator Qiskit (which is written in Python) to evolve quantum circuits. One of the circuits I evolved which I talked about in the video was the basic two qubits entanglement circuit. The reason why I was doing this project is that finding useful quantum circuits is very counter-intuitive so automating it using genetic programming can be very rewarding.