set dienst := 1..16; set arzt := 1..10; set tag := 1..14; param eignung{arzt, dienst}, binary; param tagAbw{arzt, tag}, binary; param nachfrage{dienst,tag}, binary; set abwesend := { (j,t) in {arzt,tag}: tagAbw[j,t] != 0 }; set anwesend := { (j,t) in {arzt,tag}: (j,t) not in abwesend }; set geeignet := { (j,i) in {arzt, dienst}: eignung[j,i] != 0 }; var xUD{i in dienst, t in tag}; var x{i in dienst,j in arzt, t in tag}, binary; maximize cost: sum{i in dienst,j in arzt, t in tag} x[i,j,t]; s.t. f2{i in dienst, (j,t) in anwesend }: sum{(j,p) in geeignet}x[i,j,t] + xUD[i,t] == nachfrage[i,t]; solve; # Data block data; param nachfrage : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 := 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 1 1 1 1 0 0 1 1 1 1 1 0 0 1 7 0 1 1 1 1 0 0 0 1 1 1 1 0 0 8 0 1 1 1 1 0 0 0 1 1 1 1 0 0 9 1 0 1 1 1 0 0 1 0 1 1 1 0 0 10 1 1 0 1 1 0 0 1 1 0 1 1 0 0 11 1 1 1 0 1 0 0 1 1 1 0 1 0 0 12 1 1 1 1 0 0 0 1 1 1 1 0 0 0 13 1 1 1 1 1 0 0 1 1 1 1 1 0 0 14 1 1 1 1 1 0 0 1 1 1 1 1 0 0 15 1 1 1 1 1 0 0 1 1 1 1 1 0 0 16 1 1 1 1 1 0 0 1 1 1 1 1 0 0; param tagAbw : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 := 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 0 1 0 1 0 1 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ; param eignung : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 := 1 1 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 2 1 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 3 1 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 4 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 5 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 6 1 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 7 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 1 8 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 1 9 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 10 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 1; end;