This a genetic algorithm that generates strategies (probability distributions) in Rock, Paper, Scissors. When executing the file, type the population and number of game turns that you want as arguments. Ex. ./run.py 100 50 (for 100 population, 50 game turns). The classes have been designed in such a way that you can run the algorithm on a game of your choosing, assuming the game can be classified by the following constraints: 1. Uniform turns, ie. actions are the same on every turn of gameplay. 2. Actions that can be compared for the purpose of outputting a win, loss or a draw. Your program need not allow for draws. If you are using this project as a framework, you must create a number of functions within your game class (eg. rock_paper_scissors.py). There is a template file in place to demonstrate which functions are necessary. These functions perform simple tasks such as returning which player wins given two inputs, generation the initial population, killing weak organisms and replacing them with newly bred organisms, etc. You should also create a SubOrganism class (eg. rps_organism.py) that extends organism.py. This includes any specific rules for your organisms. It is here that a tuple containing the possible actions for a player should be initialized. This file can be nearly identical. Note, however, that in its current incarnation, organism.rps is used instead of a more general attribute name such as organism.distribution or organism.dist. You should set this attribute to match your game class, though this attribute name may be susceptible to change in the future.