I am very new to optimization and OR-Tools. I am trying to solve a very simple question.
Let's assume that we have $n$ students. Each student needs to be assigned to only one teacher as a supervisor. There are several constraints that are not very critical for now. However, there are two types of supervisors. But at the same time, I am trying to keep the balance of the workload of the teachers as much as possible.
I am trying to write the objective but for some reason, it does not work correctly. I believe that I am missing something important.
model = cp_model.CpModel() # Declare the variables. x =  for i in range(num_of_students): t =  for j in range(num_of_teacher): t.append(model.NewIntVar(0, 2, "x[%i,%i]" % (i, j))) #0 not supervisor, 1 1st type, 2nd type x.append(t) workload = for j in range(num_of_teacher): workload.append(sum([x[i][j] for i in range(num_of_students)])) # Constraints # Each student is assigned to EXACTLY one teacher. [model.Add(sum(x[i][j] for j in range(num_of_teacher)) == 1) for i in range(num_of_students)] #objective model.Maximize( min(workload)) solver = cp_model.CpSolver() status = solver.Solve(model) print (solver.ObjectiveValue())
When I run the code, each student (I have 11 students and 3 teachers) is assigned to only one teacher. But all of them are the same teacher. When I look at the workloads, it is [0, 0, 11].
However, system displays 11 as the ObjectiveValue. But min([0,0,11] is 0, right?.
I also tried to write the objective as
model.Minimize( max(workload)) but all of the students assigned to only one teacher again.
Please help me!