//musze wziac kazda pielegniarke z dnia i sprawdzic czy pracuje one jeszcze w tym samym dniu public override bool HC2EachDayOnlyOneShiftForNurse() { NurseNavigator.clearChromosomeStatements(); //zeruje zeby pobierało od początku Chromosoma te pielegniarki NurseClass checkedNurse = NurseNavigator.getNextNurseFromChromosome(chromosomeVectorReference); while (checkedNurse != null) { if (CheckThatIsOnlyOneNurseOnDay(checkedNurse, NurseNavigator.CurrentWeek, NurseNavigator.CurrentDay) == false)//jesli zwroci false to pielegniarki sie powatrzaja w danym dniu wiec przerywam sprawdzanie { return(false); } checkedNurse = NurseNavigator.getNextNurseFromChromosome(chromosomeVectorReference); } return(true); }
public NurseClass getRandomNurseFromPoolAndRemoveNurse() { Random rnd = new Random(); sbyte indexOfRandomNurse; if (listOfNurses.Count > 2) { indexOfRandomNurse = (sbyte)(rnd.Next(1, listOfNurses.Count) - 1); } else { indexOfRandomNurse = 0; } NurseClass selectedNurse = listOfNurses[indexOfRandomNurse]; listOfNurses.RemoveAt(indexOfRandomNurse); return(selectedNurse); }
/// <summary> /// Zwraca true jesli jest tylko jedna pielegniarka w danym dniu /// </summary> private bool CheckThatIsOnlyOneNurseOnDay(NurseClass checkedNurse, sbyte week, sbyte day) { //tu musze sprawdzic czy jest tylko jedna w danym dniu int duplicateNursesCounter = 0; //pielegniarki ktore sie powatrzaja //wybieram wszystkie pielegnairki z danego dnia i sprawdzam z podana w paramatrze for (sbyte shift = 0; shift < 4; shift++) { for (int nurse = 0; nurse < chromosomeVectorReference[week][day][shift].Length; nurse++) { if (chromosomeVectorReference[week][day][shift][nurse].ID == checkedNurse.ID) { duplicateNursesCounter++; } } } if (duplicateNursesCounter > 1) { return(false); //jesli wiecej niz jedna } return(true); //jesli jedna }