I'm currently trying to model a large scale school timetabling problem. My current objective function tries to maximize the set of teacher preferences allocated in the final solution. But, there is a problem, every course has a specific shift that it happens but sometimes that are classes that needs to be taken in another shift.
For example, the engineers can mainly take classes in the morning but sometimes that are classes that needs to be taken in the afternoon. This situation happens with a specif set of courses in which the total sum of daily classes on a week exceeds the total possible number of classes on a week.
I'm trying to model this situation:
An objective function that maximizes the teachers preferences - (minus)*(weight)*a soft constraint that allows these specific courses to take classes outside their main shift.
I mean: If a a course that only takes classes in the morning happens to have some clases in the afternoon, this can be done but it will cause a penalty to be added in the objective function.
The problem is that it doesn't seems to be working, the model just allocates a lot of classes in this extra shifts independent of the weight that i put in the soft constraint, it seems like it's somehow better to have this penalties instead of avoiding them as much as possible.
What could be possible to change?