UniTime / unitime

Comprehensive University Timetabling System
http://www.unitime.org
Apache License 2.0
274 stars 162 forks source link

Distribution preference for Exams #75

Closed tsnouidui closed 3 years ago

tsnouidui commented 3 years ago

I would like to set-up the first semester exams of students of a particular department to be so that students shouldn't have more than 2 exams per day. I don't see such a preference in the distribution preference. Is such a use case possible?

tomas-muller commented 3 years ago

The examination solver automatically checks for the following constraints (between all exams that a student or an instructor has)

There is no need to setup distribution preferences for these. For more details, please see Examination Timetabling Problem Description.

tsnouidui commented 3 years ago

@tomas-muller Thanks a lot for the feedback. I had a typo in my question. I would like to have only exam per day. Is that possible?

tomas-muller commented 3 years ago

In UniTime 4.4, there was an additional criterion More Than One Exam A Day added (it is using the StudentMoreThan1ADayConflicts optimization criterion, which is a modification of the default StudentMoreThan2ADayConflicts criterion), penalizing cases where a student has two or more exams on the same day.

To enable it, you would need use Administration > Solver > Parameters to 1) add ;org.cpsolver.exam.criteria.additional.StudentMoreThan1ADayConflicts to the Exams.AdditionalCriteria solver parameter's default value

Screen Shot 2021-02-23 at 15 00 03

2) create Exams.MoreThanOneADayWeight solver parameter as follows:

Screen Shot 2021-02-23 at 14 59 31
tsnouidui commented 3 years ago

Thanks. Will try that out.

tsnouidui commented 3 years ago

@tomas-muller Ok, I have done that but it still not working quite well. My use case is the following: I have first and second year students of a particular programme who are supposed to sit for their final exams. The constraint is that they all should only have one exam per day. The only thing that so far differentiates them in the system is the code number of the courses which starts with CS 1xx for first year courses and CS 2xx for second year course. It this use case feasible? All the courses have been entered into the system and I can create a good courses timetable for them but when it comes to the exam timetable, I end up having two first year exams courses scheduled on the same day.

[ On a separate note what is the best option to exclude a course from an already made timetable (Is it not mark the course as not been offered?)].

tsnouidui commented 3 years ago

@tomas-muller Any answer to my question above? Should I create a new issue that describes my use case?

tomas-muller commented 3 years ago

It has been less than 24 hours since your last question.

Do you have student class enrollments in UniTime? The examination solver needs them to be able to know which students will attend each of the exams and to track student conflicts. They can be imported using the Student Class Enrollments XML (see XML Interfaces for more details).

What you mean by excluding a course from an already made timetable? A course that is not offered has no classes and no timetable. It is possible to split the timetabling so that each department is timetabled separately (all courses that belong to one of the subject areas of a department). There can also be a different (external) department for classes that need to be timetabled separately, e.g. because they need a special room -- for example, see our Online Demo where the problem is split into two timetabling departments.

tsnouidui commented 3 years ago

Thanks for the response. Sorry for re-asking so quickly, I wasn't sure whether I needed to open a new issue.

I currently don't have student enrollment. This may be the reason why the solver hasn't applied the new constraint. I will add that.

By excluding a course I mean the following: Suppose I have created a timetable that includes a number of classes for a particular semester. I then realize that I have made a mistake and I want one of the class to no no longer be included in the updated timetable. What is the best way to do that? I was wondering if there a way to disable a class...

tomas-muller commented 3 years ago

If there are no student class enrollments, no student conflicts will be tracked by the examination solver.

Once the timetable is done, you can use the Class Assignment page to change an assignment of a class without using the solver. Or, you can use the solver in the interactive mode (only making manual changes using the Suggestions page) or in the MPP mode (Minimal Perturbation Problem, which is trying to minimize changes by providing an additional penalty for changing class time and/or room).

If a class or a course is not going to be needed, you can also just cancel the class or make the whole course not offered.

tsnouidui commented 3 years ago

Alright. I have imported some student class enrollment. Is it possible to edit them after import or I need to do the edit in XML and reimport?

Thanks for the suggestion for excluding classes/courses from the timetable.

tomas-muller commented 3 years ago

Unless you want to start playing with student scheduling too, the easiest is to just edit the XML.

tsnouidui commented 3 years ago

Sounds good, thanks

tsnouidui commented 3 years ago

@tomas-muller Let's assume I have students from two departments that would like to take a course that has different course codes (e.g. CS 174 Procedural Programming in C is the name of the course in Department 1 and CS111 Programming in C is the name of the course in Department 2) but same course content.

So far I have created the courses for both departments and I have cross referenced them using Cross Lists. However, when the time table is created, I only see the name of one of the courses.

Will it be possible to display the names of both courses so students know that when the course if offered

tomas-muller commented 3 years ago

If you are talking about the Timetable Grid page, you can enable the display of all cross-listed course names when you set unitime.timeGrid.crossList to true on the Administration > Defaults > Configuration page.

Also, please note that once the timetabling solution is saved and committed, the classes will appear on the Events pages (e.g., see Events > Timetable) where all the cross-listed course names are shown. Also, in the personal schedule of a student, only the course name under which the student is enrolled will show.

tsnouidui commented 3 years ago

That works. Thanks a lot and amazing work you have all accomplished. I have only tested a subset and it is really impressive....

tsnouidui commented 3 years ago

@tomas-muller I have another quick question here with respect to preferences.

I have a course offering where the time preference is set for all weekdays. I have assigned an instructor to the course who has the constraint that he cannot teach on some weekdays. When I run the solver, I see that the solver is allowing the course to be held on days where the instructor can't.

What has precedence, the time preference in the course offering or the instructor preference?

tomas-muller commented 3 years ago

You should see the preferences and requirements that are listed on the instructor applied to classes he/she is teaching. Please note that the preferences for time and space (room, room groups, etc.) are combined from what is set on the scheduling subpart and what is set on the instructor and then they can be overridden on the individual classes. This means, however, that you need to set up the time and room preferences on the subpart level, otherwise what you set on the class will override the instructor preferences. See http://help.unitime.org/Application_Of_Preferences for more details.

tsnouidui commented 3 years ago

Ok. It works now, thanks. Can the instructors' course preferences been inherited by the Class as well?

I have added some courses preferences to an instructor and have deliberately not assigned any instructor at the Class level of that specific course. When I ran the solver I saw that the Class was present in the timetable with no instructor assigned. Is that the expected behavior?

tomas-muller commented 3 years ago

Yes, the course timetabling solver does NOT assign instructors.

We have an instructor scheduling solver for that. It is usually used after the timetabling is done, e.g., to assign teaching assistants. See Instructor Scheduling Manual for more details (also available in UniTime under Help > Manuals).

tsnouidui commented 3 years ago

alright, thanks