Source: https://people.eecs.berkeley.edu/~varaiya/Download/Varaiya-Optimization.pdf