private static ShiftStructure SearchForShift(ScheduleState state) { Random random = new Random((int)DateTime.Now.Ticks); int dayMax = 14; int lineMax = 3; int timeMax = 2; ShiftStructure shift = new ShiftStructure() { IsLast = false }; shift.Day = random.Next(0, dayMax); shift.Line = random.Next(0, lineMax); shift.Time = random.Next(0, timeMax); while (state.IsShiftAlreadyScheduled(shift.Day, shift.Line, shift.Time)) { shift.Day = random.Next(0, dayMax); shift.Line = random.Next(0, lineMax); shift.Time = random.Next(0, timeMax); if (state.IsLeftLassFiveShift()) { shift = state.GetFirstAvaliable(); } } return(shift); }
private static ScheduleState GenerateStateCandidate(ScheduleState state) { ShiftStructure shift = SearchForShift(state); int day = shift.Day; int time = shift.Time; int lineNum = shift.Line; int?driver = SearchForDriver(state, day, lineNum); while (driver == null) { shift = SearchForShift(state); day = shift.Day; time = shift.Time; lineNum = shift.Line; driver = SearchForDriver(state, day, lineNum); if (driver == null && shift.IsLast == true) { return(null); } } state.SetLineToDriver(lineNum, driver.Value, day, time); return(state); }