Source: https://www.lirmm.fr/~sau/teaching/MathOpt/Cours1_MathOpt.pdf