I teach a large class, with $N$ students, where groups of 4 to 5 students are assigned to a unique set of a projects. Each student provides a list of their top $m$ ranked preferences of the project they'd like to work on. There are generally more projects available than there are students to fill them, i.e. I drop some projects. Additionally, I collect some survey data with a number of questions that allow me to form a continuous objective function for any given organization of teams, i.e. given a unique set of team members I can output a continuous value based on their survey responses that should be maximized for each team. My goal is to algorithmically choose optimal teams such that the objective is maximized and students are placed with a project that is as high as possible on their ranking list.
I assume that my unknown is a set of integers that assign the students into $M$ teams. I'm not quite sure that I can incorporate the objective of project preference into the continuous objective function.
I have yet to home in on analogous mathematical optimization problems or the correct language to search for that give clues how this might be best solved. I'm asking for some leads on how this may be solved.
My attempt to solve the optimization problem with the MiniZinc constraint solver:
Sample solution output: