https://medium.com/@monocosmo77/how-mixed-integer-programming-works-part2-computer-science-9da9900b879a