A bird's eye view
"each doctor has at most one shift per day"
"a doctor is present during each shift"
"doctor A never works on mondays"
Solutions
High level:
Low level:
forall(i in 1..nbshifts)( sum(j in 1..nbdoctors)(x[i,j]) >= 1 )
High level:
Low level:
With objective function:
Low level:
With objective function:
In:
Return: best solution encountered
During: stochastically transform solution into "neighbor" solution
Analogy: hill climbing