I am building a staff scheduling model that has a set of binary variables $x_{[i,j]}$, subject to some set of constraints, where $x_{[i,j]}=1$ when person $i$ is assigned to job $j$.
So far my objective function is just:
$\text{maximise} \displaystyle\sum_{i \in I}\displaystyle\sum_{j \in J} x_{[i,j]}$
which aims to find a feasible solution that allocates as many jobs as possible. And it works fine, and produces feasible solutions with nearly all of the jobs allocated (I don't think full allocation is actually possible, so I am not particularly worried about that).
The only problem is that the solutions seem to wind up allocating lots of jobs to certain people, and nothing to others. So I am wondering if there is something I can do in my objective function that will help me to make the spread a little bit more even?
It doesn't really have to be even between people, but even something like a reward for maximising the number of people who have at least one job allocated to them or something would help a lot.
I can't just put a constraint in that says:
$\displaystyle\sum_{j \in J} x_{[i,j]} \geq 1, \qquad \forall i \in I$
because it makes the model infeasible. So I was hoping there would be a way to implement something in the objective function that encourages the model to spread it around a bit more, rather than forces it to. :)