I need to create an algorithm that would give a set of questions to each student based on students` majors, number of students, possible questions.
- I am hosting an exam for my students.
- Each student has been studying some (1+) majors and has to be asked questions about them (each combination of majors corresponds to distribution of questions.) E.G. Student_1 studies math and will be asked 10 math-related questions. Student_2 studied linguistics and will be asked 12 linguistics-related questions. Student_3 studied both math and linguistics and will be asked 6 math- and 6 linguistics-related questions.
- I have a function(sudents_name) that gives me number of questions for each topic.
- I have a map (1 to many) student -> majors.
- I have a map (1 to many) question -> majors.
- At the same time N students attend the exam.
- I have to give each student questions based on their majors and minimise number questions students have in common for every pair. MIN(MAX(OVERLAP(A,B))
- I have tried incorporating Multidimensional assignment problem; linear assignment problem; assignment problem, when jobs are available more then once; circuit flow problem and some variations of the last, but couldn't figure out how to adapt them for my needs. The closest on I've got was this problem Algorithm for fairly assigning tasks to workers based on skills But it searches for the opposite of what I am trying to find and with some significant differences.
Maybe there is an algorythm I haven`t found that is a variation or generalisation of mine.
Biggest difficulties I have encountered so far:
- Function that gives question types for students based on their majors is hidden.
- Some questions can be given to students of different majors. This fact vastly increases ways to distribute questions.
- Different students get different amount of questions.