https://sml.codingforstudent.com/3-tactics-to-non-linear-programming/