When performing simulations with a differentiable solvers, gradients of most variables are accessible. This allows for neural networks to be trained in an unsupervised way for various tasks. In this project, I trained neural networks through a set of physically interpretable loss terms to control an obstacle immersed in a fluid system with two-way coupling. The network controller is able to learn efficient control strategies that generalize well for complex environments not seen during training, which becomes evident when compared to other approaches, such as Supervised and Reinforcement Learning as well as common used linear control design strategies, like PID and Loop Shaping. More details can be found in the Github repository and in the paper above.