private void generate()
    {
        final double latest = this.history.getLatestIteration().doubleValue();
        final double totalProducts = this.sumOfIterationsProduct();
        for (Candidate candidate : Candidate.values())
        {
            final boolean wasLatest = candidate.equals(history.getLatestCandidate());
            final boolean wasSecondLatest = candidate.equals(history.getSecondLastCandidate());
            if (!wasLatest && !wasSecondLatest && candidate != Candidate.MORY)
            {
                List<Integer> iterations = history.getIterationsForCandidate(
                        candidate);
                double prob = this.generateProbability(iterations,
                        totalProducts);
                if (Constants.DEBUG)
                {
                    System.out.println("Candidate: " + candidate.getFirstName()
                            + " Prob: " + prob);
                }
                probabilityMap.put(candidate, prob);
            }
            else
            {
                probabilityMap.put(candidate, 0.0);
            }
        }
        normalize();
        if (Constants.DEBUG)
        {
            double sum = getMapSum();
            if (Math.round(sum) != Math.round(Constants.BASE_PROBABILITY))
            {
                System.err.println("Something's wrong: Expected "
                        + Constants.BASE_PROBABILITY
                        + " sum after normalization. Actual sum: " + sum);
            }
            
            System.out.println("Probabilities generated:\n" + probabilityMap.
                    toString());
        }
        
        
    }