This document provides an overview of various optimization techniques that have been used for operating multi-reservoir systems, including linear programming, non-linear programming, and dynamic programming. It describes how each technique works and examples of its applications to reservoir systems. Dynamic programming is highlighted as being well-suited for reservoir operations given their multi-stage decision process nature, but it faces computational challenges for problems with more than a few state variables. The document also discusses how combinations of techniques, like linear programming and dynamic programming, have been used to help address some of the limitations.