Source: https://homepages.laas.fr/adoncesc/DocumentsOptimisation/solver.pdf