Cooperative Schools

Started by klaberte, November 29, 2011, 01:02:56 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

klaberte

Hello!  I am trying to schedule parent-volunteers for our cooperative
preschool. We have roughly 50 students and 30 parent-volunteers.
School is 5 days a week for 40 or so weeks.  Each M, W, F has a
morning and afternoon session. On Tu, Th, we have only a morning
session. Each student attends in one of three classes: 3 a.m., which
meets Tu and Th mornings; 4 a.m., which meets M, W, F mornings; and a
mixed group, which meets M, W, F afternoons.

Essentially, my need is to schedule parent-volunteers to attend their
child's class a minimum number of times.  They will volunteer only for
their child's class time.  Further, our parent-volunteers fulfill one
of two roles: Primary or Backup.  In other words, each parent is
expected to attend a minimum number of times as a Primary, and a
different number of times as a Backup.

Once this structure is put together, we will need to fulfill certain
constraints, such as certain parents must volunteer together (or
separately), due to carpooling needs.  Of course, some parents will
not be able to volunteer on certain dates, due to other commitments.

How do I best structure my components to fit to this school
structure?  Is FET well suited for this type of scheduling task?

I am new to FET, but am willing to learn.

Thanks!

Liviu Lalescu

I must admit I did not read thoroughly your message, I'll try to do that.

But firstly, some clarifications:

1) You have maximum 35 days per "week" (but you can modify FET to have 40, if you want).

2) You need to specify exactly the teachers/students for each activity (though with some tricks, like considering a FET room = a real student or teacher, you can schedule real students to activities).

Volker Dirr

1. is a parentvolunteer visiting the school only one hour per day or the whole day?

2. if i understood correct, then you can divide this task into (nearly) 3 independent task. so do that planning for each class. (only the mixed activity battle a bit. but i don't have enugh information to give a better answer in that point.)

klaberte

Quote from: Volker Dirr on November 29, 2011, 03:26:06 PM
1. is a parentvolunteer visiting the school only one hour per day or the whole day?

2. if i understood correct, then you can divide this task into (nearly) 3 independent task. so do that planning for each class. (only the mixed activity battle a bit. but i don't have enugh information to give a better answer in that point.)


1 parentvolunteer attend either the am or pm session.  There are either 2 or 3 slots per week, depending on the age of their child.  The parentvolunteer will work a small subset of the classes throughout the term.

There is a second category of parents: "parentassist". A parentassist comes from the same pool of parents as the parent volunteer, and a parent cannot serve both as parentvolunteer and parentassist for any given session.  I am not sure if it makes more sense to simply create two sets of parents: volunteers and assists, where they are taken from the same pool of parents, or if I should just model assists as special category of volunteers.  Thoughts?

Each parent will be assigned a parentvolunteer X times and as a parrentassist Y times.

2. In essence, we could think of each of the three classes independently.  Maybe that's the easiest method for my first try at this?

3. There is another wrinkle.  Perhaps we can table it until I better understand the problem defined above.  Anyway, the extra wrinkle is this: Some parents can only volunteer on "daycare" days.  That is, they have young children that will attend a co-located daycare while their parent serves as either parentvolunteer or parentassist.  However, the daycare is only available on a subset of dates.  I am not sure if it is worth trying to explicitly include this in the model, or just manually set a constraint on days that a given parent can work (i.e. if ParentD needs to work only on daycare days, I simply mark them unavailable on the non-daycare days)

Volker Dirr

#4
you haven't done that planning ever before?

it look like most of your problems are activity planning problems and not scheduling problems.
fet do only scheduling, not activity planning.

currently i advice you write down you whole activity planning.
i think you should do it seperated for each class.
as soon as you have done that you can enter the dataset in fet. (but i guess in your case it is possible do schedule manualy very easy as soon as you have the activity planning. it look like in your case the activity planning is the difficult part.)

klaberte

Quote from: Volker Dirr on November 30, 2011, 06:03:11 PM
you haven't done that planning ever before?

it look like most of your problems are activity planning problems and not scheduling problems.
fet do only scheduling, not activity planning.

currently i advice you write down you whole activity planning.
i think you should do it seperated for each class.
as soon as you have done that you can enter the dataset in fet. (but i guess in your case it is possible do schedule manualy very easy as soon as you have the activity planning. it look like in your case the activity planning is the difficult part.)


Perhaps we are misunderstanding each other.

My wife did the entire schedule last semester by hand.  It took well over 30 hours.

I don't think the stuff we have been discussing thus far is the source of the problem.  The problem comes in trying to meet several conditions at the same time.  Conditions like: Parent1 cannot work on these 7 days, Parent3 and Parent4 should always be scheduled together, etc.

For example, in the past, after a solution is found, and each condition is checked by hand, a parent would provide a new condition (cannot work on Date D).  Then a new solution would need to be found, and all the conditions would need to be rechecked by hand.

[Phase 1] So, as a first step (what I've been describing so far) is to figure out the best structure for this problem.  I have since confirmed that the classes can be scheduled independently.  So, given one class, there is a pool of parents.  Parents must work at least X times as a parentvolunteer, and Y times as parentassist.  No one can be scheduled for both roles in the same timeslot.  The schedule is expected to be different for each week, and each parent will work a small subset of the number of time slots.

[Phase 2] Once I have Phase 1 captured in FET (hopefully with some architectural suggestions from you), then I will start on phase 2, which is entering conditions.  My understanding is that, once I add an additional condition, FET will search for a solution that meets the new condition while still meeting all previous conditions. [Am I correct in this?]  If no solution exists, FET will state this.

So, at this point, can you suggest the best way to represent Phase 1 in FET?

Liviu Lalescu

Quote from: klaberte on November 30, 2011, 06:29:21 PM
[Phase 1] So, as a first step (what I've been describing so far) is to figure out the best structure for this problem.  I have since confirmed that the classes can be scheduled independently.  So, given one class, there is a pool of parents.  Parents must work at least X times as a parentvolunteer, and Y times as parentassist.  No one can be scheduled for both roles in the same timeslot.  The schedule is expected to be different for each week, and each parent will work a small subset of the number of time slots.

There may be more possibilities. I think of this, firstly:

Say parent P has X hours of parentvolunteer and Y hours of parentassist. Add X+Y activities for parent P. Constraint activities not overlapping, all of these X+Y activities. Simply schedule activities to time slots. You may increase X or Y if needed (use a progressive approach).

If this is not good, we may think of other approaches.

Volker Dirr

i think he don't need the "Constraint activities not overlapping", because he can just enter the parents as a teacher. and teachers are not overlapping, because that is a basic consraint.

so he/you must only care about the correct number of parents.
if i understood correct, then you have a "full" timetable. there are no gaps for students/pupils.

so you need to add subject "parentvolunteer" and subject "parentassist".

add two pseudo room for each class. one room for "parentvolunteer" and one for "parentassist".
then add 2 constraints:
- subject "parentvolunteer" need the "parentvolunteer"-rooms
- subject "parentassist" need the "parentassist"-rooms

Liviu Lalescu

Quote from: Volker Dirr on November 30, 2011, 07:28:12 PM
i think he don't need the "Constraint activities not overlapping", because he can just enter the parents as a teacher. and teachers are not overlapping, because that is a basic consraint.

Yes, you are right.

Quote
so you need to add subject "parentvolunteer" and subject "parentassist".

add two pseudo room for each class. one room for "parentvolunteer" and one for "parentassist".
then add 2 constraints:
- subject "parentvolunteer" need the "parentvolunteer"-rooms
- subject "parentassist" need the "parentassist"-rooms

Why are rooms needed? An activity of type X has subject X, an activity of type Y has subject Y, you can differentiate between them by subject (or even activity tag).

Volker Dirr

Quote from: Liviu Lalescu on December 01, 2011, 04:50:16 AM
Quote
so you need to add subject "parentvolunteer" and subject "parentassist".

add two pseudo room for each class. one room for "parentvolunteer" and one for "parentassist".
then add 2 constraints:
- subject "parentvolunteer" need the "parentvolunteer"-rooms
- subject "parentassist" need the "parentassist"-rooms

Why are rooms needed? An activity of type X has subject X, an activity of type Y has subject Y, you can differentiate between them by subject (or even activity tag).

maybe i missunderstood, but i think he need exactly one volunteer per class and one assistant per class.
he don't always want to add the assistant and the volunteer into a singel activity (except if they drive with car together.)
so fet can schedule the combination of volunteers and assistants as it is needed. the rooms limit the number of assistant and volunteers per class.

klaberte

Quote from: Volker Dirr on December 01, 2011, 08:31:25 PM
Quote from: Liviu Lalescu on December 01, 2011, 04:50:16 AM
Quote
so you need to add subject "parentvolunteer" and subject "parentassist".

add two pseudo room for each class. one room for "parentvolunteer" and one for "parentassist".
then add 2 constraints:
- subject "parentvolunteer" need the "parentvolunteer"-rooms
- subject "parentassist" need the "parentassist"-rooms

Why are rooms needed? An activity of type X has subject X, an activity of type Y has subject Y, you can differentiate between them by subject (or even activity tag).

maybe i missunderstood, but i think he need exactly one volunteer per class and one assistant per class.
he don't always want to add the assistant and the volunteer into a singel activity (except if they drive with car together.)
so fet can schedule the combination of volunteers and assistants as it is needed. the rooms limit the number of assistant and volunteers per class.


Sorry for not being clear, and thanks so much for this great support I am getting.  Much appreciated!

In fact, we usually have 3 volunteers and 1 backup per class.  Obviously, this set of 4 people are not likely to be grouped together on other class days, although there may be some exceptions, e.g. ParentA and ParentB always work together.

Think of it as 3 teachers+1 special (the parentbackup) teacher needed for each class.  All 4 are drawn from the same pool (the parents).  Each "teacher" will serve at least X times as "teacher" (where they will be one of 3 teachers in the class) and Y times as "special" (where they will be the only special teacher, working with 3 regular teachers). 

Assigning a schedule at the Phase 1 stage would be trivial.  It isn't until we add the constraints of Phase 2 that things become harder.

Given that, what would you recommend for the way I represent this problem in fet?


Volker Dirr

#11
Quote from: klaberte on December 01, 2011, 10:16:10 PM
In fact, we usually have 3 volunteers and 1 backup per class.  Obviously, this set of 4 people are not likely to be grouped together on other class days, although there may be some exceptions, e.g. ParentA and ParentB always work together.

Think of it as 3 teachers+1 special (the parentbackup) teacher needed for each class.  All 4 are drawn from the same pool (the parents).  Each "teacher" will serve at least X times as "teacher" (where they will be one of 3 teachers in the class) and Y times as "special" (where they will be the only special teacher, working with 3 regular teachers).

i think there are 2 good possibilities:

variant a)
you add 4 (pseudo) rooms per class.
the 1st, 2nd and 3th rooms are for the teachers.
the 4th room is for the backup.
(advantage: you use the same trick/workaround for each teacher, disadvantage: the students table is not visible, but since they can't read that is maybe unneeded.)
the 3 teachers get subject "teacher"
the backup get subject "backup"
use room constraints to set the correct room(s) to each subject.

variant b)
you add 3 (or 4) pseudo rooms per class.
2 rooms are for the teachers.
1 room is for the backup.
one of the 3 teachers will be the "main" teacher. you can put im into the activity with the pupils. that teacher don't need the room trick, but you can also add him the normal/real room name if you want.
the 2 teachers get subject "teacher"
the backup get subject "backup"
use room constraints to set the correct room(s) to each subject.
the "main teacher" get the subject of the students. (and maybe a room constraint to that subject to the real room)