/// <summary>
        /// Random fill the given individual
        /// </summary>
        /// <param name="individual">individual to be filled</param>
        /// <returns>success</returns>
        private bool RandomFillIndividual(Individual individual)
        {
            for (int courseIndex = 0; courseIndex < individual.Courses.GetLength(0); courseIndex++)
            {
                List<PlacementContainer> possibilities = GetPossibilitiesForCourse(courseIndex, individual);
                if (possibilities.Count <= 0)
                {
                    //When no possibilities left, restart
                    individual.Clear();
                    return false;
                }

                possibilities.Sort(SortPlacementContainerByBlock);
                List<PlacementContainer> subset = new List<PlacementContainer>();
                if (ttData.Courses[courseIndex].IsDummy)
                {
                    //choose possibility that is late
                    subset.Add(possibilities[possibilities.Count - 1]);
                    for (int i = possibilities.Count - 2; i >= 0; i--)
                    {
                        if (possibilities[i].block >= subset[0].block)
                            subset.Add(possibilities[i]);
                        else
                            break;
                    }
                }
                else
                {
                    //choose possibility that is early
                    subset.Add(possibilities[0]);
                    for (int i = 1; i < possibilities.Count; i++)
                    {
                        if (possibilities[i].block >= subset[0].block)
                            subset.Add(possibilities[i]);
                        else
                            break;
                    }
                }
                int chosenPossibility = random.Next(0, subset.Count);

                for (int blockOffset = 0; blockOffset < ttData.Courses[courseIndex].NumberOfBlocks; blockOffset++)
                {
                    individual.SetChromosome(courseIndex,
                        subset[chosenPossibility].day,
                        subset[chosenPossibility].block + blockOffset,
                        subset[chosenPossibility].room,
                        ttData.Courses[courseIndex].Group.Index,
                        GetLecturerIndices(courseIndex));
                }
            }
            return true;
        }