public Schedule MakeNewFromPrototype()
{
// number of time-space slots
int size = _slots.Length;
// make new chromosome, copy chromosome setup
Schedule newChromosome = new Schedule(this, true);
// place classes at random position
List<CourseClass> cc = Configuration.GetInstance.GetCourseClasses();
foreach (CourseClass it in cc)
{
// determine random position of class
int num_rooms = Configuration.GetInstance.GetNumberOfRooms();
int dur = it.GetDuration;
Random rand = new Random();
int day = rand.Next() % DAYS_NUM;
int room = rand.Next() % num_rooms;
int time = rand.Next() % (DAY_HOURS + 1 - dur);
int pos = (day * num_rooms * DAY_HOURS) + (room * DAY_HOURS + time); // (Base) + (offset) time's
// fill time-space slots, for each hour of class
for (int i = dur - 1; i >= 0; i--)
newChromosome._slots[pos + i].Add(it);
// insert in class table of chromosome
newChromosome._classes.Add(it, pos);
}
newChromosome.CalculateFitness();
// return smart pointer
return newChromosome;
}