public VectorOfCourses(VectorOfCourses i_Vector) { int count = 0; m_Vector = new List<CourseBlock>(); for (; count < k_MaximumNumberOfCourses; count++) { m_Vector.Add(new CourseBlock(i_Vector.m_Vector[count])); } m_VectorRating = i_Vector.m_VectorRating; }
public static int CompareVectors(VectorOfCourses i_VectorOne, VectorOfCourses i_VectorTwo) { if (i_VectorOne.Rate > i_VectorTwo.Rate) { return 0; } else { return 1; } }
private bool isDuplicateVector(VectorOfCourses i_FirstVector, VectorOfCourses i_SecondVector) { bool res = true; ; int i; VectorOfCourses tempVectorFirst = CreateOnlyStudyCoursesVector(i_FirstVector); VectorOfCourses tempVectorSecond = CreateOnlyStudyCoursesVector(i_SecondVector); if (i_FirstVector.Rate != i_SecondVector.Rate) { res = false; } else if (CountNumberOfCourses(i_FirstVector) != CountNumberOfCourses(i_SecondVector)) { res = false; } else { for (i = 0; i < tempVectorFirst.Vector.Count; i++) { if (!isCourseInVector(tempVectorFirst.Vector[0], tempVectorSecond.Vector)) { res = false; } } //if (isCourseInVector(i_FirstVector.Vector[0], i_SecondVector.Vector)) //{ // if (isCourseInVector(i_FirstVector.Vector[1], i_SecondVector.Vector)) // { // if (isCourseInVector(i_FirstVector.Vector[2], i_SecondVector.Vector)) // { // if (isCourseInVector(i_FirstVector.Vector[3], i_SecondVector.Vector)) // { // if (isCourseInVector(i_FirstVector.Vector[4], i_SecondVector.Vector)) // { // if (isCourseInVector(i_FirstVector.Vector[5], i_SecondVector.Vector)) // { // if (isCourseInVector(i_FirstVector.Vector[6], i_SecondVector.Vector)) // { // res = true; // } // } // } // } // } // } //} } return res; }
private void ShowSolution(VectorOfCourses weekCourses) { lblRate.Text = (100 - weekCourses.Rate).ToString(); List<AgendaItem> allAgendaItems = new List<AgendaItem>(); for (int i = 0; i < MAX_NUMBER_OF_COURSES; i++) { allAgendaItems.AddRange(ExtractAgendaItemsFromBlock(weekCourses.Vector[i])); } AssignBackColors(allAgendaItems); var groupedItems = allAgendaItems.GroupBy(item => (int)item.Day).ToArray(); // Group by day of the week // For each day of the week for (int i = 0; i < 6; i++) { var foundItemsForDay = groupedItems.FirstOrDefault(g => g.Key == i); this.DailyUserControls[i].AgendaItems = foundItemsForDay == null ? new List<AgendaItem>() : foundItemsForDay.ToList(); Console.WriteLine("Day " + i + " -> " + (foundItemsForDay != null ? foundItemsForDay.Count() : 0) + " items"); } Console.WriteLine("----------------- SOLUTION SHOW ENDED -----------------"); }
private void crossOverFatherList(List<VectorOfCourses> i_Vector ) { List<VectorOfCourses> crossedVector = new List<VectorOfCourses>(); VectorOfCourses vectorFirst; VectorOfCourses vectorSecond; int count = 0; int first, second, cut; for (; count < k_SizeOfFatherList; count++) { first= rnd.Next(k_SizeOfFatherList); second = rnd.Next(k_SizeOfFatherList); cut = rnd.Next(k_NumberOfStandartElectivesCourses + k_NumberOfStandartRequiredCourses); if ((cut != 0) && (first != second)) { crossOver(out vectorFirst, out vectorSecond, i_Vector[first], i_Vector[second], cut); checkForMutation(vectorFirst, courseBlockDB); checkForMutation(vectorSecond, courseBlockDB); //vectorFirst.rateVector(m_Student); //vectorSecond.rateVector(m_Student); if(vectorFirst.Rate < vectorSecond.Rate) { crossedVector.Add(vectorFirst); } else if (vectorFirst.Rate > vectorSecond.Rate) { crossedVector.Add(vectorSecond); } else { if (rnd.Next(2) == 1) { crossedVector.Add(vectorFirst); } else { crossedVector.Add(vectorSecond); } } } else { if (first == second) { vectorFirst = new VectorOfCourses(i_Vector[first]); checkForMutation(vectorFirst, courseBlockDB); crossedVector.Add(vectorFirst); } else { vectorFirst = new VectorOfCourses(i_Vector[first]); vectorSecond = new VectorOfCourses(i_Vector[second]); checkForMutation(vectorFirst, courseBlockDB); checkForMutation(vectorSecond, courseBlockDB); if (vectorFirst.Rate < vectorSecond.Rate) { crossedVector.Add(vectorFirst); } else if (vectorFirst.Rate > vectorSecond.Rate) { crossedVector.Add(vectorSecond); } else { if (rnd.Next(2) == 1) { crossedVector.Add(vectorFirst); } else { crossedVector.Add(vectorSecond); } } } } } m_Fathers.Clear(); m_Fathers = crossedVector; }
//insert rateVector function private void crossOver(out VectorOfCourses o_VectorFirst, out VectorOfCourses o_VectorSecond, VectorOfCourses i_VectorOfCoursesFirst, VectorOfCourses i_VectorOfCoursesSecond, int i_CutRatio) { o_VectorFirst = new VectorOfCourses(); o_VectorSecond = new VectorOfCourses(); o_VectorFirst.Vector.AddRange(i_VectorOfCoursesFirst.Vector.GetRange(0, i_CutRatio)); o_VectorFirst.Vector.AddRange(i_VectorOfCoursesSecond.Vector.GetRange(i_CutRatio, i_VectorOfCoursesSecond.Vector.Count - i_CutRatio)); o_VectorSecond.Vector.AddRange(i_VectorOfCoursesSecond.Vector.GetRange(0, i_CutRatio)); o_VectorSecond.Vector.AddRange(i_VectorOfCoursesFirst.Vector.GetRange(i_CutRatio, i_VectorOfCoursesFirst.Vector.Count - i_CutRatio)); o_VectorFirst.rateVector(m_Student); o_VectorSecond.rateVector(m_Student); }
private VectorOfCourses CreateOnlyStudyCoursesVector(VectorOfCourses i_Vector) { VectorOfCourses resVector = new VectorOfCourses(); int i; for (i = 0; i < i_Vector.Vector.Count; i++) { if (i_Vector.Vector[i].StartTimeSlotOfFirstClass != -1) { resVector.Vector.Add(i_Vector.Vector[i]); } } return resVector; }
private int CountNumberOfCourses(VectorOfCourses i_Vector) { int count = 0; int i; for (i = 0; i < i_Vector.Vector.Count; i++) { if (i_Vector.Vector[i].StartTimeSlotOfFirstClass != -1) { count++; } } return count; }
//insert rateVector function private void checkForMutation(VectorOfCourses i_Vector, List<List<CourseBlock>> i_CourseBlock) { int count = 0; bool rateAgain = false; int index; for (; count < i_Vector.Vector.Count; count++) { if (rnd.Next(k_MutationCrossOverSize) == 1) { rateAgain = true; index = getIndex(i_Vector.Vector[count].ID, i_CourseBlock); i_Vector.Vector[count] = i_CourseBlock[index][rnd.Next(i_CourseBlock[index].Count)]; } } if (rateAgain) { i_Vector.rateVector(m_Student); } }