Skip to content

Instantly share code, notes, and snippets.

@bokner
Created December 6, 2024 13:40
Show Gist options
  • Save bokner/5d35c3fde74faf9f3b9222db486a9c10 to your computer and use it in GitHub Desktop.
Save bokner/5d35c3fde74faf9f3b9222db486a9c10 to your computer and use it in GitHub Desktop.
include "globals.mzn";
int: R = 4;
int: T = 4;
int: C = 4;
int: S = 30;
set of int: ROOM = 1..R;
set of int: CLASS = 1..C;
set of int: TEACHER = 1..T;
set of int: SLOT = 1..S;
array[ROOM, CLASS, TEACHER] of int: requirements;
array[SLOT, ROOM, CLASS, TEACHER] of var 0..1: assignments;
constraint forall(s in SLOT, c in CLASS)(
sum(r in ROOM, t in TEACHER)(assignments[s, r, c, t]) = 1
);
constraint forall(s in SLOT, r in ROOM)(
sum(c in CLASS, t in TEACHER)(assignments[s, r, c, t]) = 1
);
constraint forall(s in SLOT, t in TEACHER)(
sum(r in ROOM, c in CLASS)(assignments[s, r, c, t]) = 1
);
constraint forall(r in ROOM, c in CLASS, t in TEACHER)(
sum(s in SLOT)(assignments[s, r, c, t]) = requirements[r, c, t]
);
solve minimize sum(assignments);
output ["{Slot \(s), Room \(r)} -> {Teacher \(t), Class \(c)}" ++"\n" | s in SLOT, r in ROOM, c in CLASS, t in TEACHER where fix(assignments[s,r, c, t]) = 1];
@bokner
Copy link
Author

bokner commented Dec 6, 2024

Output (COIN-BC:

{Slot 1, Room 1} -> {Teacher 3, Class 3}
{Slot 1, Room 2} -> {Teacher 4, Class 1}
{Slot 1, Room 3} -> {Teacher 1, Class 4}
{Slot 1, Room 4} -> {Teacher 2, Class 2}
{Slot 2, Room 1} -> {Teacher 4, Class 1}
{Slot 2, Room 2} -> {Teacher 2, Class 2}
{Slot 2, Room 3} -> {Teacher 3, Class 4}
{Slot 2, Room 4} -> {Teacher 1, Class 3}
{Slot 3, Room 1} -> {Teacher 2, Class 4}
{Slot 3, Room 2} -> {Teacher 1, Class 3}
{Slot 3, Room 3} -> {Teacher 3, Class 1}
{Slot 3, Room 4} -> {Teacher 4, Class 2}
{Slot 4, Room 1} -> {Teacher 4, Class 1}
{Slot 4, Room 2} -> {Teacher 1, Class 4}
{Slot 4, Room 3} -> {Teacher 3, Class 2}
{Slot 4, Room 4} -> {Teacher 2, Class 3}
{Slot 5, Room 1} -> {Teacher 4, Class 3}
{Slot 5, Room 2} -> {Teacher 2, Class 1}
{Slot 5, Room 3} -> {Teacher 1, Class 4}
{Slot 5, Room 4} -> {Teacher 3, Class 2}
{Slot 6, Room 1} -> {Teacher 2, Class 4}
{Slot 6, Room 2} -> {Teacher 4, Class 2}
{Slot 6, Room 3} -> {Teacher 1, Class 3}
{Slot 6, Room 4} -> {Teacher 3, Class 1}
{Slot 7, Room 1} -> {Teacher 4, Class 3}
{Slot 7, Room 2} -> {Teacher 3, Class 2}
{Slot 7, Room 3} -> {Teacher 2, Class 1}
{Slot 7, Room 4} -> {Teacher 1, Class 4}
{Slot 8, Room 1} -> {Teacher 1, Class 1}
{Slot 8, Room 2} -> {Teacher 4, Class 4}
{Slot 8, Room 3} -> {Teacher 3, Class 3}
{Slot 8, Room 4} -> {Teacher 2, Class 2}
{Slot 9, Room 1} -> {Teacher 3, Class 4}
{Slot 9, Room 2} -> {Teacher 4, Class 2}
{Slot 9, Room 3} -> {Teacher 1, Class 3}
{Slot 9, Room 4} -> {Teacher 2, Class 1}
{Slot 10, Room 1} -> {Teacher 2, Class 2}
{Slot 10, Room 2} -> {Teacher 1, Class 4}
{Slot 10, Room 3} -> {Teacher 3, Class 3}
{Slot 10, Room 4} -> {Teacher 4, Class 1}
{Slot 11, Room 1} -> {Teacher 4, Class 3}
{Slot 11, Room 2} -> {Teacher 2, Class 2}
{Slot 11, Room 3} -> {Teacher 1, Class 4}
{Slot 11, Room 4} -> {Teacher 3, Class 1}
{Slot 12, Room 1} -> {Teacher 4, Class 2}
{Slot 12, Room 2} -> {Teacher 2, Class 4}
{Slot 12, Room 3} -> {Teacher 3, Class 3}
{Slot 12, Room 4} -> {Teacher 1, Class 1}
{Slot 13, Room 1} -> {Teacher 1, Class 3}
{Slot 13, Room 2} -> {Teacher 2, Class 1}
{Slot 13, Room 3} -> {Teacher 4, Class 2}
{Slot 13, Room 4} -> {Teacher 3, Class 4}
{Slot 14, Room 1} -> {Teacher 4, Class 4}
{Slot 14, Room 2} -> {Teacher 3, Class 2}
{Slot 14, Room 3} -> {Teacher 1, Class 1}
{Slot 14, Room 4} -> {Teacher 2, Class 3}
{Slot 15, Room 1} -> {Teacher 4, Class 2}
{Slot 15, Room 2} -> {Teacher 3, Class 4}
{Slot 15, Room 3} -> {Teacher 2, Class 3}
{Slot 15, Room 4} -> {Teacher 1, Class 1}
{Slot 16, Room 1} -> {Teacher 2, Class 3}
{Slot 16, Room 2} -> {Teacher 1, Class 1}
{Slot 16, Room 3} -> {Teacher 3, Class 2}
{Slot 16, Room 4} -> {Teacher 4, Class 4}
{Slot 17, Room 1} -> {Teacher 1, Class 4}
{Slot 17, Room 2} -> {Teacher 2, Class 2}
{Slot 17, Room 3} -> {Teacher 4, Class 1}
{Slot 17, Room 4} -> {Teacher 3, Class 3}
{Slot 18, Room 1} -> {Teacher 2, Class 1}
{Slot 18, Room 2} -> {Teacher 3, Class 2}
{Slot 18, Room 3} -> {Teacher 4, Class 4}
{Slot 18, Room 4} -> {Teacher 1, Class 3}
{Slot 19, Room 1} -> {Teacher 3, Class 4}
{Slot 19, Room 2} -> {Teacher 1, Class 1}
{Slot 19, Room 3} -> {Teacher 4, Class 3}
{Slot 19, Room 4} -> {Teacher 2, Class 2}
{Slot 20, Room 1} -> {Teacher 4, Class 3}
{Slot 20, Room 2} -> {Teacher 2, Class 1}
{Slot 20, Room 3} -> {Teacher 3, Class 2}
{Slot 20, Room 4} -> {Teacher 1, Class 4}
{Slot 21, Room 1} -> {Teacher 3, Class 4}
{Slot 21, Room 2} -> {Teacher 2, Class 3}
{Slot 21, Room 3} -> {Teacher 1, Class 1}
{Slot 21, Room 4} -> {Teacher 4, Class 2}
{Slot 22, Room 1} -> {Teacher 4, Class 3}
{Slot 22, Room 2} -> {Teacher 2, Class 4}
{Slot 22, Room 3} -> {Teacher 3, Class 2}
{Slot 22, Room 4} -> {Teacher 1, Class 1}
{Slot 23, Room 1} -> {Teacher 3, Class 2}
{Slot 23, Room 2} -> {Teacher 2, Class 1}
{Slot 23, Room 3} -> {Teacher 1, Class 4}
{Slot 23, Room 4} -> {Teacher 4, Class 3}
{Slot 24, Room 1} -> {Teacher 4, Class 3}
{Slot 24, Room 2} -> {Teacher 3, Class 1}
{Slot 24, Room 3} -> {Teacher 1, Class 4}
{Slot 24, Room 4} -> {Teacher 2, Class 2}
{Slot 25, Room 1} -> {Teacher 3, Class 1}
{Slot 25, Room 2} -> {Teacher 2, Class 3}
{Slot 25, Room 3} -> {Teacher 1, Class 4}
{Slot 25, Room 4} -> {Teacher 4, Class 2}
{Slot 26, Room 1} -> {Teacher 4, Class 4}
{Slot 26, Room 2} -> {Teacher 2, Class 1}
{Slot 26, Room 3} -> {Teacher 3, Class 3}
{Slot 26, Room 4} -> {Teacher 1, Class 2}
{Slot 27, Room 1} -> {Teacher 2, Class 1}
{Slot 27, Room 2} -> {Teacher 4, Class 4}
{Slot 27, Room 3} -> {Teacher 3, Class 2}
{Slot 27, Room 4} -> {Teacher 1, Class 3}
{Slot 28, Room 1} -> {Teacher 1, Class 4}
{Slot 28, Room 2} -> {Teacher 2, Class 2}
{Slot 28, Room 3} -> {Teacher 4, Class 1}
{Slot 28, Room 4} -> {Teacher 3, Class 3}
{Slot 29, Room 1} -> {Teacher 1, Class 2}
{Slot 29, Room 2} -> {Teacher 4, Class 1}
{Slot 29, Room 3} -> {Teacher 3, Class 4}
{Slot 29, Room 4} -> {Teacher 2, Class 3}
{Slot 30, Room 1} -> {Teacher 1, Class 1}
{Slot 30, Room 2} -> {Teacher 3, Class 3}
{Slot 30, Room 3} -> {Teacher 2, Class 4}
{Slot 30, Room 4} -> {Teacher 4, Class 2}
----------
==========
Finished in 980msec.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment