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(j in 1..nbshifts)( sum(i in 1..nbdoctors)(x[j,i]) >= 1 )
Low level arithmetic formulas
Objective function
forall(j in 1..nbshifts)( sum(i in 1..nbdoctors)(x[j,i]) >= 1 )
Low level:
Objective function:
In:
Return: best solution encountered
During: stochastically transform solution into "neighbor" solution
Analogy: hill climbing