About some projects and activities

Solving the Avicaching Game Faster and Better

Computational Sustainability Lab, Cornell University

What an amazing first research experience in Computer Science! The project, the internship, and the life — all — went very well during the summer. I worked with Prof. Carla Gomes and Yexiang Xue on the Avicaching game in eBird, trying to solve the models faster and obtain more optimized results. We modeled the game using neural networks and linear programming to solve Avicaching’s sub-problems and used GPUs to accelerate the computation and help the Cornell Lab of Ornithology scale the game to more locations. My contributions and work can be broken down into some sub-tasks for readability:

  • Understand the architecture of GPUs and identify its benefits for certain types of computation, and shortfalls for others. I also implemented some simple saxpy kernels in CUDA to measure the extent of performance difference in parallel programming on GPUs.
  • Optimize the Avicaching sub-models on GPUs by utilizing neural networks implemented with PyTorch. As we found out, our models learnt better than previous models in simulation, and also ran faster — though that was possible by relaxing some constraints, as is often the case in Computer Science.
  • Write a report on the decisions we took, problems we formulated, and results we obtained. This was in addition to documenting the full code repository.
  • Present my work on GPU architecture, parallel programming gotchas on GPUs, and an overview of the Avicaching game modeling to the researchers at Computational Sustainability Lab at Cornell.

A Modular Approach to Optimal Hybrid Bus Allocation for TCAT

Cornell Mathematical Contest in Modeling (CMCM)

During the 3-day hackathon, we wrote a research paper for modeling efficient routes for Ithaca’s bus service (TCAT) considering its new hybrid buses to minimize the net fuel consumption. We modeled the routes directed graphs and ran search algorithms to find efficient routes in the network. To allocate which buses are suited for which routes, we came up with a Stack-Queue algorithm that exploits Computer Science concepts to allocate buses.

We had to model the problem, run experiments, and write an extensive report in 3 days! It was a tiring hackathon.


Cornell Cup Robotics Team, Cornell University

Fall 2017

Following our work on MiniBot Platform in Java in Spring 2017, we reasoned to rewrite all code in Python in Fall 2017. This was decided for two reasons:

  • Our client demanded a full Python code base so that we remained consistent in style and it was easier for developers to read and contribute in the future.
  • Python is more readily understood and used by beginner programmers, which our MiniBot project targets.

My major contributions were to:

  • Rewrite the back-end ‘basestation’ part of the MiniBot Platform source code, minus the Vision modules inside that directory. The basestation files were previously written in Java and it comprised the major chunk of the rewrite process that had to be written in Python. Since the fundamentals of this part of MiniBot Platform had already been established in Spring 2017’s Java version, rewriting wasn’t a very difficult 1-month job. However, I added type annotations (using the typing module) in dynamically-typed Python code and removed circular dependencies that had been glaring in the Java code.
  • Program a Raspberry Pi Zero W to function as an Access Point when it couldn’t connect to the internet, and create a hotspot. The user would then connect to the hotspot and enter their home’s Wifi credentials on a website hosted on that access point, which would reconfigure the Pi to connect to that Wifi network. After a reboot, the Pi would seamlessly connect to Wifi. This was done primarily to prevent beginner users from freaking out while setting up their MiniBot’s Raspberry Pis. The Access Point setup provides a seamless experience where the beginner users (and short-tempered developers for that matter) would not have to waste time setting up their Raspberry Pi to get started. Here’s the directory.

Spring 2017

After joining the team in early Spring’17, I worked on the SwarmBot subteam in the MiniBot project. Our group of 4-5 undergrads, among a total of ~50 team-members, brainstormed this idea of educational “Swarm Robotics” as a core element in the MiniBot kit, and worked on emulating a “pseudo-swarm” that would be controllable through a base station. I focused more on:


CS 3110 Course, Cornell University

term-monopoly is a terminal-based framework for the Monopoly game built by Jehron, Jared, Marina, and me for our CS 3110 final project in OCaml. The salient features of our project are that one can play Monopoly with other friends inside their computers’ terminals (Linux and macOS supported), and they can write custom Monopoly boards to use in the framework. The framework provides for the basic rules of the game, and can be used to play on any compliant Monopoly board with upto 8 players. We also provide 3 AI agents, characterized by their complexity in analyzing their position in the game, which can be played against. To get started with playing and contributing, read this brief README.

I worked with Jehron on designing the GUI framework for term-monopoly, which was the central interface to interaction between the game State (state.mli) and AI controllers (controllers.mli). This involved learning Object-Oriented Programming styles in OCaml, using lambda-term and lwt to program a turn-based Monopoly framework, and designing different frames for display in the terminal.

These are some screenshots of the game, played in my computer’s terminal (background is my wallpaper).

Initializing term-monopoly
Initializing term-monopoly
Screen for a human player's turn: Frame shows several actions and views that the player can perform at this moment
Screen for a human player's turn: Frame shows several actions and views that the player can perform at this moment
Racecar gets another turn since they rolled a double: term-monopoly follows numerous Monopoly rules and features such as trading, selling, property color groups etc.
Racecar gets another turn since they rolled a double: term-monopoly follows numerous Monopoly rules and features such as trading, selling, property color groups etc.

Potential of Conversion of Waste to Energy in India

Dept. of Civil Engineering, IIT, Guwahati

The research program aimed at mapping the feasibility of converting MSW to Energy in India, and specifically in my city, Patna. We conducted Proximate Analyses of the waste that we sampled from residences in the university’s campus, and estimated the feasibility of waste-to-energy conversion based on Carbon, Nitrogen etc. content. Ultimately, we came up with a proposal for our city, Patna, to establish a waste-to-energy unit near the official landfill, with a rough financial estimate of the plant’s operating costs and profits/losses. We also compiled our 1-month research details into a project report.