Search - Experiment with various graph search techniques to discover the most efficient way to find the shortest path between three places in a city.
Isolation Player - Use the MINIMAX and alpha-beta pruning techniques and experiment with evaluation functions to create a program that can play a variant of the game Isolation better than a human.
Bayes Nets - Implement Bayesian networks and sampling algorithms to gain a better understanding of probabilistic systems concerning discrete random variables.
Decision Trees - Build, train, and test several decision tree models to perform basic classification tasks.
Gaussian Mixture Models - Implement k-means clustering and Gaussian mixture models to perform basic image segmentation. Research, implement, and test the Bayesian Information Criterion to guarantee a more robust image segmentation.
Hidden Markov Models - Implement the Viterbi and Forward-Backward algorithm to recognize signals using HMMs.
Implementation of Decision Trees, Neural Networks, Boosting, Support Vector Machines, and K-nearest neighbours.
Training the aforementioned algorithms on two large datasets in order to analyse how they perform in testing and validation phases.
Performed hyperparameter tuning to achieve optimal accuracy.
Learning curves generated in order to compare their performance.
Randomized Optimization
Implementation of localized random search algorithms, namely, Randomized Hill Climbing (RHC), Simulated Annealing (SA), Genetic Algorithms (GA) and Mutual Information Maximizing Input Clustering (MIMIC).
Experiments conducted on three discrete optimization problems namely Flip Flop, N-Queens, Knapsack to find the maximum fitness function.
Unsupervised Learning and Dimensionality Reduction
Implementation of unsupervised learning and dimensionality reduction techniques on two different classification large datasets.
Implemented K-Means Clustering and Expectation Maximization as clustering algorithms for unsupervised learning.
Implemented PCA (Principal Component Analysis), ICA (Independent Component Analysis), Randomized Projects, and SelectKModel as dimensionality reduction algorithms.
Analysed the performance of combinations of the aforementioned clustering and dimensionality techniques on the chosen datasets and performed hyperparameter tuning in order to yield accurate modeling results.
Markov Decision Processes
Explored various reinforcement learning techniques an agent can use to make decisions.
Implementation of Markov Decision Processes (MDPs) namely, value iteration and policy iteration, and one reinforcement learning algorithm, namely, Q-Learning.
Experiments conducted on two different Markov Decision Process problems namely Frozen Lake and Forest Management.
Experiments conducted using Gymnasium (a maintained fork of OpenAI’s Gym library).
Implemented a vCPU scheduler and a memory coordinator to dynamically manage resources assigned to each guest virtual machine.
Memory ballooning driver implementation.
Barrier Synchronization
Implementation of barrier synchronization algorithms from the paper titled “Algorithms for Scalable Synchronization on Shared-Memory Multiprocessors, by John M. Mellor-Crummey (Rice University) and Michael L. Scott (University of Rochester), ACM Transactions on Computer Systems Vol. 9, No. 1, February, 1991”.
Barriers implemented using OpenMP: Sense-Reversing Centralized Barrier and the MCS Tree Barrier.
Barriers implemented using Open MPI: MCS Tree Barrier and Dissemination Barrier.
Barriers benchmarked on a Supercomputing cluster.
Simulations carried out on 1-12 CPUs with each CPU capable of executing upto 12 simultaneous threads.
A multi-threaded e-Commerce Store in a distributed service
Distributed service implementation using gRPC (Google RPC) for RPC services and Protocol Buffers as the IDL (Interface Definition Language).
Asynchronous RPC communication model: Clients <—> Store and Service <—> Vendors.
Implementation of the MapReduce programming model in a distributed service
Distributed service implementation using gRPC (Google RPC) for RPC services and Protocol Buffers as the IDL (Interface Definition Language).
In line with the specifications as per the paper titled “MapReduce: Simplified Data Processing on Large Clusters, J. Dean, S. Ghemawat, Google Inc. OSDI 2004”.
Implementation of a multi-threaded (boss-worker pattern) file server servicing a pool of clients in C based on the GetFile protocol (HTTP-like protocol) and multi-threaded client that acts as a load generator for the server.
Proxy server using Inter-Process Communication
Implementation of a proxy server to act as an intermediary between a file server and its clients using libcurl’s Easy Interface.
Implementation of a cache server to act as an alternate file source in a client-proxy-server setup.
Support for multiple proxy servers by incorporating multi-threading constructs in addition to shared memory and message queues (POSIX and SystemV).
Distributed File System using RPC (Remote Procedure Call) protocol service
Built a series of remote procedure calls (RPCs) and message types that fetch, store, list, and delete files in addition to getting file attributes/statistics in a distributed file system (one file server and multiple clients).
Used gRPC (Google RPC) for RPC services and Protocol Buffers as the IDL (Interface Definition Language).
Watcher thread implemented to be on a lookout for changes in the mounted directories.
File content synced between clients and servers using asynchronous calls between server and clients to update the client/clients in case a file/files/directory changes on the server and vice versa.
Mutexes and condition variables set in place in order to avoid race conditions and to avoid multiple writers from accessing the same file/directory.
Implementation of a consistent synchronization system to manage cache consistency between multiple clients and server.