Algo-rhythms of life
This course has been as exhilarating as it has been tiring and mind-boggling. I started with just a basic understanding of the term algorithm, and now, I am thinking of algorithms day in and day out.
The first week of the course was a great introduction — where we learnt the traits of algorithms (preciseness, definiteness, accuracy etc.) Initially, I had thought of algorithms simply as a process to get something done, and as long as the aim was met, nothing else would matter (partially because I had never thought about it, and partially because I didn’t know). Eventually, I saw that there were so many more things involved, but before this course, I only knew of those things in theory — I didn’t know how to actually do those things. Following the traits, we studied computer architecture, and I saw the various types of systems that are present inside a computer. Earlier I knew of RAM only as random access memory, but for what this memory was being accessed, what happens when this memory is accessed — concepts like these were a blur in my head. I later even saw that this very concept has also been adopted by Amazon! I might not have fully grasped it even now, however, at least I know the basics of these concepts. We were also asked to watch a documentary on algorithms, and I saw how everything has an algorithm behind it, and almost anything, with enough research, can be optimised. I had heard of the GCD calculation method, but when I saw how it was put visually, I know I will remember it forever now.
In the second week of class, we were asked to code any two search algorithms and record the time they took for various sizes of inputs. What I had logically thought was that the time would increase linearly with the size of the input. However, once I did the study, I realised that quite randomly, for size 108 of input, the time taken was lower than it was for size 107! This was followed by amortized analysis, where we counted steps and then counted arithmetic steps taken by our algorithm to run. I came across a slight difficulty when I was calculating the steps for binary search, because of the loops. Calculating the best and worst case complexity was simple because it was a definite number of iterations in relation to the size of the input. Average case complexity, on the other hand, was tough because the number of iterations for different sizes of input were different. However, I found a relation of n+1 steps for the loop, when the input size was 2n.
I liked how we panned, zooming in to computer architecture, where we learnt which part handles which function and then zooming out to amortized analysis, where we learnt how these different things actually affected measurable quantities like time and space.
For the third week, we were asked to study an algorithm, and then present it to class (I didn’t get to present it). I had studied the graph colouring which is used to find a colour pattern for a graph when no two adjacent nodes can have the same colour. Initially, I was very intimidated by graphs and vertices, and sure enough, I took some time to understand the algorithm. However, once I understood it, it didn’t seem tough at all, and I understood it to an extent where I coded it myself.
Following this, we started working on group assignments, for which we picked Amazon Fulfilment Centres to study the algorithm that they run on. This has been a whole different journey altogether. Initially, the vastness and the complexity of the subject really overwhelmed me, but I didn’t let it make me dislike the exercise. Instead, I was interested to know how much we could learn about such a complex topic (which people have taken years to compile) in a span of two weeks.
This was also the first time that my class didn’t have anyone from my batch, and I had to group with people that I had never worked with before. My first response was that I should work alone instead, but now I’m very glad I didn’t.
Since we didn’t have a field to visit, our process started with research about the processes that go on inside the warehouse. After research, I realised that there was a lot of complexity in what goes on within the walls of an AFC and that I would have to dig deeper to get real information. I watched several videos, read articles and so on, that would give me insights into the warehouse processes. However, none of the sources that I went through had technical details about the warehouse (there were 2-minute videos with an overview). Most of the videos were also from countries abroad, and so we didn’t get much information about warehouses in our country, without as much automation as warehouses abroad. I looked at a couple of articles on Quora, by former Amazon employees, and they had explained how a few warehouses function here. Taking insights from these sources, I sketched out a detailed flowchart of an order-to-delivery process.
During research, we thought of various things that we could study, but throughout our research, we kept seeing articles about how Amazon pickers have to walk about 7–10 miles a day, articles where they said that Amazon warehouses were a terror to work in. An Amazon emancipatory article said that algorithms took pickers into consideration last. That was our main motivation to choose what we chose. Coming from an HCD background, we wanted to look at pickers as people and not just substitutes for machines. We wanted to reduce the effort taken by a picker to pick orders. To measure effort intangible quantities, we thought of using time and distance.
There were around 4 days that we were absolutely clueless about what to do, we had reached a standstill because we couldn’t see any direction to proceed in. Gaurav helped us map out different factors that were involved in the whole process of picking and the assumptions we would have to consider. We started with a basic simulation of a warehouse, with a size of 3x3. After deciding the factors we would study, we started keying in the assumptions, and calculating with respect to the assumptions we had included, to get a more realistic output.
We accounted for things like time taken to search for an item on the shelf and assigned different search times to low-level, middle-level and high-level items. We also accounted for picking time based on weight and assigned different times accordingly. We accounted for the aisle width. Finding a way to run two pieces of code simultaneously was a little bit of a problem, but we did it anyway. Our ‘simulation’ has reached a great way from where we started, and I am sort of surprised that we actually did make sense of such a vast, abstract topic.
About things that didn’t go very well, we could’ve talked to a few more people connected to Amazon, but the ones we spoke to weren’t allowed to disclose much information. We also felt like we were a little short on time because everything was taking too long to do.
Even though there were a few (quite a few) days when we could rip our hair off, this course has been one of the best courses that I’ve ever taken in Srishti.