https://medium.com/@monocosmo77/exploring-evolutionary-algorithms-part2-computer-science-9b1ee41935f6