Search in sources :

Example 16 with ExamStudent

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

the class StudentNotAvailableConflicts method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts) {
    Exam exam = value.variable();
    int penalty = 0;
    for (ExamStudent s : exam.getStudents()) {
        if (!s.isAvailable(value.getPeriod()))
            penalty++;
    }
    return penalty;
}
Also used : ExamStudent(org.cpsolver.exam.model.ExamStudent) Exam(org.cpsolver.exam.model.Exam)

Example 17 with ExamStudent

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

the class StudentMoreThan1ADayConflicts method getValue.

@Override
public double getValue(Assignment<Exam, ExamPlacement> assignment, Collection<Exam> variables) {
    int ret = 0;
    ExamModel m = (ExamModel) getModel();
    Set<Integer> days = new HashSet<Integer>();
    for (ExamPeriod p : m.getPeriods()) {
        if (days.add(p.getDay())) {
            Map<ExamStudent, Set<Exam>> students = ((ExamModel) getModel()).getStudentsOfDay(assignment, p);
            for (Set<Exam> exams : students.values()) {
                int nrExams = exams.size();
                if (nrExams > 1)
                    ret += nrExams - 1;
            }
        }
    }
    return ret;
}
Also used : ExamPeriod(org.cpsolver.exam.model.ExamPeriod) HashSet(java.util.HashSet) Set(java.util.Set) ExamModel(org.cpsolver.exam.model.ExamModel) ExamStudent(org.cpsolver.exam.model.ExamStudent) Exam(org.cpsolver.exam.model.Exam) HashSet(java.util.HashSet)

Example 18 with ExamStudent

use of org.cpsolver.exam.model.ExamStudent 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)

Example 19 with ExamStudent

use of org.cpsolver.exam.model.ExamStudent 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)

Aggregations

ExamStudent (org.cpsolver.exam.model.ExamStudent)19 Exam (org.cpsolver.exam.model.Exam)18 ExamPeriod (org.cpsolver.exam.model.ExamPeriod)11 ExamModel (org.cpsolver.exam.model.ExamModel)10 Set (java.util.Set)9 ExamPlacement (org.cpsolver.exam.model.ExamPlacement)9 CSVFile (org.cpsolver.ifs.util.CSVFile)6 CSVField (org.cpsolver.ifs.util.CSVFile.CSVField)6 HashSet (java.util.HashSet)5 DecimalFormat (java.text.DecimalFormat)4 ArrayList (java.util.ArrayList)4 StudentBackToBackConflicts (org.cpsolver.exam.criteria.StudentBackToBackConflicts)4 ExamRoomPlacement (org.cpsolver.exam.model.ExamRoomPlacement)4 StudentDistanceBackToBackConflicts (org.cpsolver.exam.criteria.StudentDistanceBackToBackConflicts)3 HashMap (java.util.HashMap)2 TreeSet (java.util.TreeSet)2 ExamInstructor (org.cpsolver.exam.model.ExamInstructor)2 ExamOwner (org.cpsolver.exam.model.ExamOwner)2 FileWriter (java.io.FileWriter)1 IOException (java.io.IOException)1