Example #1
0
        private int getIndexOfBestMatch(StudentGroup studentGroup, List <Student> studentList)
        {
            int[] points = new int[studentList.Count];
            for (int i = 0; i < studentList.Count; i++)
            {
                Student s = studentList[i];
                points[i] = this.groupSize;
                foreach (Student member in studentGroup.getMembers())
                {
                    if (relationshipListContains(s, RelationshipTypeEnum.MATCH, member))
                    {
                        points[i] -= 1;
                    }
                    if (relationshipListContains(s, RelationshipTypeEnum.DO_NOT_MATCH, member))
                    {
                        points[i] += 1000;
                    }
                }
            }

            int minIndex = 0;

            for (int j = 0; j < points.Length; j++)
            {
                if (points[j] < points[minIndex])
                {
                    minIndex = j;
                }
            }

            return(minIndex);
        }
Example #2
0
        private bool optimize(StudentGroup group1)
        {
            foreach (Student student1 in group1.getMembers())
            {
                // group score of group with student1
                int before1 = getGroupScore(group1);

                foreach (StudentGroup group2 in studentGroups)
                {
                    if (group2.id == group1.id)
                    {
                        continue;
                    }
                    foreach (Student student2 in group2.getMembers())
                    {
                        int before2 = getGroupScore(group2);

                        int after = getGroupScoreIfReplace(group1, student1, student2) + getGroupScoreIfReplace(group2, student2, student1);

                        if (after < before1 + before2)
                        {
                            swapGroupMembers(group1, student1, group2, student2);
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #3
0
        private int getGroupScore(StudentGroup group)
        {
            int score = group.max * group.max;

            foreach (Student s in group.getMembers())
            {
                foreach (Student member in group.getMembers())
                {
                    if (member.getId() != s.getId())
                    {
                        if (relationshipListContains(s, RelationshipTypeEnum.MATCH, member))
                        {
                            score -= 1;
                        }
                        if (relationshipListContains(s, RelationshipTypeEnum.DO_NOT_MATCH, member))
                        {
                            score += 1000;
                        }
                    }
                }
            }
            return(score);
        }