public void act() {
    	// This function handles all of an Agents' behavior in
        // any given step.
        // First, check if the Agent has enough energy to survive
        // the step, otherwise remove it.
        if (energy < metabolism) {
            remove();
        } else {
            // Let the Agent know it has survived another step.
            age++;

			// 'Cost of living': Subtracting the metabolism from the
            // Agents' energy level.
            energy -= metabolism;

			// Generating a vector with the Sites that can be moved to,
            // and a vector with Sites suitable for offspring..
            Vector<Site> freeSites = findFreeSites();

			// Evaluating each of the possible Sites to move to.
            // YOU WILL NEED TO IMPLEMENT FINDBESTSITE YOURSELF.
            Site bestSite = findBestSite(freeSites);

			// Moving to the best possible Site, and reaping the energy
            // from it.
            // YOU WILL NEED TO IMPLEMENT MOVE AND REAP YOURSELF.
            move(bestSite);
            reap(bestSite);

			// Checking if the Agent is fertile and has a free neighboring
            // Site, and if so, producing offspring.
            if (energy > procreateReq) {
                Vector<Site> babySites = findBabySites();
                if (babySites.size() > 0) {
                    procreate(babySites);
                }
            }
        }

    }