Search in sources :

Example 56 with Exam

use of org.cpsolver.exam.model.Exam in project cpsolver by UniTime.

the class InstructorDirectConflicts method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, Collection<Exam> variables) {
    int ret = 0;
    ExamModel m = (ExamModel) getModel();
    for (ExamPeriod p : m.getPeriods()) {
        Map<ExamInstructor, Set<Exam>> instructors = m.getInstructorsOfPeriod(assignment, p);
        for (Set<Exam> exams : instructors.values()) {
            int nrExams = exams.size();
            if (nrExams > 1)
                ret += nrExams - 1;
        }
    }
    if (m.isCheckForPeriodOverlaps()) {
        for (ExamPeriod p : m.getPeriods()) {
            for (ExamPeriod q : m.getPeriods()) {
                if (p.getIndex() < q.getIndex() && p.hasIntersection(q)) {
                    Map<ExamInstructor, Set<Exam>> s1 = m.getInstructorsOfPeriod(assignment, p);
                    Map<ExamInstructor, Set<Exam>> s2 = m.getInstructorsOfPeriod(assignment, q);
                    for (Map.Entry<ExamInstructor, Set<Exam>> e : s1.entrySet()) {
                        ExamInstructor s = e.getKey();
                        if (!e.getValue().isEmpty()) {
                            Set<Exam> x = s2.get(s);
                            if (x != null && x.isEmpty()) {
                                x1: for (Exam x1 : e.getValue()) {
                                    for (Exam x2 : x) {
                                        if (p.hasIntersection(x1, x2, q)) {
                                            ret += 1;
                                            break x1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return ret;
}
Also used : ExamPeriod(org.cpsolver.exam.model.ExamPeriod) ExamInstructor(org.cpsolver.exam.model.ExamInstructor) Set(java.util.Set) ExamModel(org.cpsolver.exam.model.ExamModel) Map(java.util.Map) Exam(org.cpsolver.exam.model.Exam)

Example 57 with Exam

use of org.cpsolver.exam.model.Exam in project cpsolver by UniTime.

the class PeriodPenalty method getBounds.

@Override
public double[] getBounds(Assignment<Exam, ExamPlacement> assignment, Collection<Exam> variables) {
    double[] bounds = new double[] { 0.0, 0.0 };
    for (Exam exam : variables) {
        if (!exam.getPeriodPlacements().isEmpty()) {
            int minPenalty = Integer.MAX_VALUE, maxPenalty = Integer.MIN_VALUE;
            for (ExamPeriodPlacement periodPlacement : exam.getPeriodPlacements()) {
                if (iSoftPeriods != null && (periodPlacement.getExamPenalty() == iSoftPeriods || periodPlacement.getPeriod().getPenalty() == iSoftPeriods))
                    continue;
                minPenalty = Math.min(minPenalty, periodPlacement.getPenalty());
                maxPenalty = Math.max(maxPenalty, periodPlacement.getPenalty());
            }
            bounds[0] += minPenalty;
            bounds[1] += maxPenalty;
        }
    }
    return bounds;
}
Also used : ExamPeriodPlacement(org.cpsolver.exam.model.ExamPeriodPlacement) Exam(org.cpsolver.exam.model.Exam)

Example 58 with Exam

use of org.cpsolver.exam.model.Exam in project cpsolver by UniTime.

the class RoomPerturbationPenalty method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts) {
    if (!isMPP())
        return 0;
    Exam exam = value.variable();
    ExamPlacement initial = exam.getInitialAssignment();
    if (initial == null)
        return 0;
    int penalty = 0;
    if (value.getRoomPlacements() != null)
        for (ExamRoomPlacement rp : value.getRoomPlacements()) {
            if (initial.getRoomPlacements() == null || !initial.getRoomPlacements().contains(rp))
                penalty++;
        }
    return penalty;
}
Also used : ExamRoomPlacement(org.cpsolver.exam.model.ExamRoomPlacement) ExamPlacement(org.cpsolver.exam.model.ExamPlacement) Exam(org.cpsolver.exam.model.Exam)

Example 59 with Exam

use of org.cpsolver.exam.model.Exam in project cpsolver by UniTime.

the class StudentDirectConflicts method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, Collection<Exam> variables) {
    int ret = 0;
    ExamModel m = (ExamModel) getModel();
    for (ExamPeriod p : m.getPeriods()) {
        Map<ExamStudent, Set<Exam>> students = ((ExamModel) getModel()).getStudentsOfPeriod(assignment, p);
        for (Set<Exam> exams : students.values()) {
            int nrExams = exams.size();
            if (nrExams > 1)
                ret += nrExams - 1;
        }
    }
    if (m.isCheckForPeriodOverlaps()) {
        for (ExamPeriod p : m.getPeriods()) {
            for (ExamPeriod q : m.getPeriods()) {
                if (p.getIndex() < q.getIndex() && p.hasIntersection(q)) {
                    Map<ExamStudent, Set<Exam>> s1 = m.getStudentsOfPeriod(assignment, p);
                    Map<ExamStudent, Set<Exam>> s2 = m.getStudentsOfPeriod(assignment, q);
                    for (Map.Entry<ExamStudent, Set<Exam>> e : s1.entrySet()) {
                        ExamStudent s = e.getKey();
                        if (!e.getValue().isEmpty()) {
                            Set<Exam> x = s2.get(s);
                            if (x != null && x.isEmpty()) {
                                x1: for (Exam x1 : e.getValue()) {
                                    for (Exam x2 : x) {
                                        if (p.hasIntersection(x1, x2, q)) {
                                            ret += 1;
                                            break x1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return ret;
}
Also used : ExamPeriod(org.cpsolver.exam.model.ExamPeriod) Set(java.util.Set) ExamModel(org.cpsolver.exam.model.ExamModel) ExamStudent(org.cpsolver.exam.model.ExamStudent) Map(java.util.Map) Exam(org.cpsolver.exam.model.Exam)

Example 60 with Exam

use of org.cpsolver.exam.model.Exam in project cpsolver by UniTime.

the class StudentDirectConflicts method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts) {
    Exam exam = value.variable();
    int penalty = 0;
    ExamPeriod period = value.getPeriod();
    ExamModel m = (ExamModel) getModel();
    Map<ExamStudent, Set<Exam>> students = m.getStudentsOfPeriod(assignment, period);
    for (ExamStudent s : exam.getStudents()) {
        Set<Exam> exams = students.get(s);
        if (exams == null)
            continue;
        int nrExams = exams.size() + (exams.contains(exam) ? 0 : 1);
        if (nrExams > 1)
            penalty++;
    }
    if (m.isCheckForPeriodOverlaps()) {
        for (ExamPeriod p : m.getPeriods()) {
            if (period.hasIntersection(p)) {
                Map<ExamStudent, Set<Exam>> others = m.getStudentsOfPeriod(assignment, p);
                s: for (ExamStudent s : exam.getStudents()) {
                    Set<Exam> exams = students.get(s);
                    if (exams == null || exams.size() + (exams.contains(exam) ? 0 : 1) <= 1) {
                        Set<Exam> other = others.get(s);
                        if (other != null && !other.isEmpty())
                            for (Exam x : other) {
                                if (period.hasIntersection(exam, x, p)) {
                                    penalty++;
                                    continue s;
                                }
                            }
                    }
                }
            }
        }
    }
    /*
        for (ExamStudent s : exam.getStudents()) {
            Set<Exam> exams = s.getExams(assignment, period);
            if (exams.isEmpty()) continue;
            int nrExams = exams.size() + (exams.contains(exam) ? 0 : 1);
            if (nrExams > 1)
                penalty++;
        }
        */
    return penalty;
}
Also used : ExamPeriod(org.cpsolver.exam.model.ExamPeriod) Set(java.util.Set) ExamModel(org.cpsolver.exam.model.ExamModel) ExamStudent(org.cpsolver.exam.model.ExamStudent) Exam(org.cpsolver.exam.model.Exam)

Aggregations

Exam (org.cpsolver.exam.model.Exam)62 ExamPlacement (org.cpsolver.exam.model.ExamPlacement)38 ExamModel (org.cpsolver.exam.model.ExamModel)26 ExamRoomPlacement (org.cpsolver.exam.model.ExamRoomPlacement)21 ExamPeriod (org.cpsolver.exam.model.ExamPeriod)19 ExamStudent (org.cpsolver.exam.model.ExamStudent)18 Set (java.util.Set)15 ArrayList (java.util.ArrayList)13 ExamPeriodPlacement (org.cpsolver.exam.model.ExamPeriodPlacement)12 CSVFile (org.cpsolver.ifs.util.CSVFile)12 CSVField (org.cpsolver.ifs.util.CSVFile.CSVField)12 HashSet (java.util.HashSet)11 ExamInstructor (org.cpsolver.exam.model.ExamInstructor)10 DecimalFormat (java.text.DecimalFormat)6 AssignmentContext (org.cpsolver.ifs.assignment.context.AssignmentContext)6 NeighbourSelectionWithContext (org.cpsolver.ifs.assignment.context.NeighbourSelectionWithContext)6 HashMap (java.util.HashMap)4 TreeSet (java.util.TreeSet)4 ExamOwner (org.cpsolver.exam.model.ExamOwner)4 IOException (java.io.IOException)3