Programming – a powerful tool
Programming has been an indispensable tool for many of my projects. I learned Python through an online Udemy course during fourth grade. Since then, I have been using Python for analyzing and visualizing data for almost all my science experiments.
One of my early projects with Python was developing a simulator to render the trajectories of objects in space under the influence of gravity and collisions. I initially wrote the program that rendered the paths of multiple circular balls interacting only under gravity — similar to our solar system. My program computed an object’s acceleration incrementally at each time step based on the positions of all objects using Newton’s law of gravitation. Then the program performs numerical integration on each object’s acceleration to determine its subsequent displacement. Also, In the initial version of my simulator, the objects passed through each other when they met since I did not model collisions. As I learned about momentum and energy, I modeled the effect of elastic collisions using the objects’ velocities. Now, the program accounts for the forces exerted on each object due to both gravity and collisions. After I included these concepts, the objects moved and bounced off each other more naturally. Further, in order to achieve smoother animation, I also upgraded the simulator from Turtle graphics to Arcade graphics. Coding this simulator was a painstaking process driven solely to satisfy my curiosity. I started writing this program three years ago, and it is still a work in progress. I am still working on reducing the error in my simulations further to more accurately reflect reality.
For my science explorations, I have relied on programming to process information. During my exploration of finger muscle fatigue, Python became invaluable for processing time series electrical signals using interpolation, eliminating noise with a bandpass filter, extracting frequencies using the fast Fourier transform, and inferring frequency changes over time. It was very interesting to learn new signal processing concepts and implement them.
As I learned about programming, I was also exposed to optimization problems and interesting solution techniques. Through summer courses at the AlphaStar Academy and online resources such as usaco.org and geeksforgeeks.org, I learned interesting and efficient algorithms and data structures and that can reduce the time to solve hard computationally intensive “large data” problems from months to minutes, and how to implement them in C++. I have been an avid participant of the USA Computing Olympiad, and I have reached the Silver division. In my research with Professor Chhabria, I have also naturally find the need for efficient algorithms and data structures when working with circuit netlists with close to a million cells, like topological sort for voltage-aware static timing analysis and segment trees as part of an endeavor to randomly generate large benchmark circuits.
Recently, I have also been using Python for projects that involve machine learning. As an officer for my school’s Programming Club, I implemented K-Means clustering in Python to group Programming Club members with similar interests. In a project to reduce the design time for digital integrated circuits, I implemented a solution utilizing Tensorflow deep learning libraries in Python. The method aims to reduce the simulations needed to determine the propagation delays of building blocks of such circuits. Under the guidance of Professor Chhabria, I continue to investigate applications of machine learning in digital design and am implementing a solution using convolutional neural networks to reduce power delivery network congestion in integrated circuits. An avid listener of music, I am exploring how machine learning can be used to group and create music autoencoders and generative adversarial networks (GANs) in Python.