/* www.glthr.com/20monkeys
   Guillaume Lethuillier
   Oct. 2015  v.2.1      
*/

#include "Header.h"

int main()
{
	bool next { false };
	std::vector<Primate> monkeys(POPULATION * 2);
	Population troop;
	Text book;

	initialize(monkeys, book, troop);
	
	for (;;) 
	{
		restart(book, troop);
		log(monkeys, book, troop, 0);

		do
		{
			reset(monkeys, troop);
			
			do
			{ 
				evaluation(monkeys, book, troop, next);

				selection(monkeys, book, troop);

				if (next) break;

				reproduction(monkeys);

				++troop.generations;

				mutation(monkeys);

			} while (!next);

			log(monkeys, book, troop, 2);
	
			next = false;
			
			++book.current_line;
	
		} while (book.current_line < book.lines.size());

		++book.editions;
	}
}