Get in touch¶
Is your school facing tough scheduling problems in order to facilitate social distancing? We'd love to help! We're offering free Imandra licenses and pro bono consulting to help schools solve their COVID-19 scheduling challenges.
Please contact us at email@example.com and we'll help you get started.
Stating the problem¶
During the COVID-19 pandemic of 2020, it's become apparent that due to social distancing, children going to school in Scotland and elsewhere will only be able to attend for a restricted number of days per week. One of the primary concerns for families is that siblings should attend on the same day. This problem is a classical scheduling problem which can become very tricky due to a combinatorial explosion. This notebook demonstrates how it is possible to encode such a problem and use Imandra to find a solution.
The schools in Edinburgh, Scotland, adopted an "ABC" approach where children would attend 1/3 of the time during a shortened 4 day week. This meant that students would attend one day a week, with two days every third week. Each subdivision of a class A, B or C would always attend school on the same days in order to minimise the spread of infection but restricting contact for students to "bubbles".
The challenge is to organise this so families go on the same days, but with the added complication that some children already have days on which they can attend pre-determined. This may be on account of their parents being "keyworkers" - in which case they attend "Hub Schools" which determine which days they can attend, or it may be that they are vulnerable children with particular needs.
Representation of classes, families and students¶
In this notebook, we present a realistic case study of how our
Imandra_scheduler tool can be used to automatically solve tough school
scheduling problems. Due to privacy restrictions, we do this demonstration using
synthetic (i.e., randomly generated) student data for a primary school with 720
students and social distancing restrictions limiting the number of students per
class per day to a third of the normal class size. The school is full
and is comprised of families of 1,2,3 and 4 students. Each student is mapped to
each of 21 classes -
P1A through to
val student_csv_data : string = "Rachael GRAHAM,P6A,William GRAHAM,P6A\n James BAILEY,P7A,Rachael BAILEY,P7A\n Alan FLORES,P6C\n Robert GRAHAM,P7A\n Thomas PETERSON,P6C\n Kenneth PERRY,P6C,Jade PERRY,P5C,Alan PERRY,P4B\n Suzanne RAMOS,P5C\n Kerry EDWARDS,P5C\n Hannah MYERS,P5C,James MYERS,P5C\n Neil BROOKS,P7C,Steven BROOKS,P6A,Jade BROOKS,P5C\n James MURPHY,P6A,William MURPHY,P4C\n Jenna RAMOS,P7C,Colin RAMOS,P7C,Kenneth RAMOS,P7B\n Lynsey HENDERSON,P6B,Graham HENDERSON,P7A,Scott HENDERSON,P4B\n Pamela BAILEY,P7B\n Eilidh COOPER,P4B\n Alison WARD,P6C\n Alexander LONG,P7A,Martin LONG,P7C,Caroline LONG,P6A\n Graeme BUTLER,P2B\n Natasha REED,P7C\n Derek RIVERA,P6B,Alan RIVERA,P6B\n Kayleigh WEST,P6C\n Thomas CHENG,P6A\n Iain ETOO,P7C,George ETOO,P3B\n Iain MORRIS,P1B,Jenna MORRIS,P5A\n Gary COLE,P4A\n Kenneth KHAN,P1B\n Iain FISHER,P2C,Leanne FISHER,P2B,Kathryn FISHER,P3C\n Scott LONG,P3C,Thomas LONG,P7A\n Ian WEST,P7A\n Hannah STEWART,P3A\n Hayley CARTER,P3C,Susan CARTER,P4C,Caroline CARTER,P5B\n Christopher BENNETT,P"... (* string length 13744; truncated *)
and contains data which describes students, families and their classes. For example
Katie GONZALES,P3C,Christopher GONZALES,P4B
denotes a family of two students, Katie and Christopher Gonzales, in classes
P4B, respectively. We want to ensure that Katie and Christopher both
go to school on the same day, and make sure this "siblings attend on the same
day" property holds for all families at the school.
This class allocation size data with the names of classes and the number of students allowed to be in each is also encapsulated in a csv file (click for full version):
val class_csv_data : string = "P1A,30\nP1B,45\nP1C,30\nP2A,30\nP2B,30\nP2C,30\nP3A,30\nP3B,30\nP3C,30\nP4A,30\nP4B,30\nP4C,30\nP5A,35\nP5B,35\nP5C,35\nP6A,40\nP6B,40\nP6C,40\nP7A,40\nP7B,40\nP7C,40"
In addition to this data we import a file of keyworker families - those where the parents are both classed as keyworkers. These families are assumed to have the days on which they can attend normal school (not Hub school) predetermined, and hence their "bubble" (A, B or C) of their class for this school already decided.
val keyworkers_csv_data : string = "0,A\n1,A\n15,B\n23,B\n34,C\n45,B\n57,A"
Solution using the Imandra Scheduler¶
We can now exploit the
Imandra Scheduler to find a solution to the problem.
Imandra_scheduler.Solve.top ~lines:student_csv_data ~classes:class_csv_data ~keyworkers:keyworkers_csv_data
Solving complete! - : unit = ()
The resulting csv can be loaded into a spreadsheet program and manipulated directly (click to view full version).
What is shown here is an example of dealing with the problem of students in a school of 720 students going on for 4 days a week over 3 weeks of a 4-day school week. between 10 and 15 per day for a class with ordinarily between 30 and 40 students. This is fully configurable and can be adapted with variable classes and allocations and number of days according to the restrictions that exist.
Please get in touch with us at firstname.lastname@example.org and we'd be happy to help you get started!