[rules-users] Best model for planning? technicians, airplanes and shifts

Geoffrey De Smet ge0ffrey.spam at gmail.com
Fri Aug 31 03:08:46 EDT 2012


Op 30-08-12 18:02, mvermand schreef:
> Hi,
>
> I'd like some advice on how to make my model.
>
> I need to plan maintenance-schedules for - let's say - airplanes.
> Constraints are:
> - planes are only at given moments available for maintenance (when not in
> the air ;-)
> - maintenance of a planes requires a number of techniciens (with specific
> skills).
> - techniciens have skills and also shifts and vacation.
>

Sounds like the nurse rostering example in Planner :)
In nurse rostering, such a Shift has a ShiftDate and a ShiftType.
The difference is, you need to assign jobs instead of shifts.

> Now, first I tought to make the maintenance of a plane the planningEntity.
> But I did not know how to populate and match the techniciens.

I wouldn't make plane the planningEntity either, it's on the one side of 
the manyToOne relation.

>
> So, second I tought to make a new Task-class the planningEntity.
> A Task is a job that needs to be done by a technicien with specific skills.
> Maintaining a plane requires then a number of tasks.

Good idea. In nurse rostering, a Task is called a ShiftAssignment.
You can generate all Tasks in advance based on the Planes and their jobs 
and the number of technicians needed by each job.

I recommend to make separate Task instances for multiple technicians 
that perform the same job together on the same plane. In nurse rostering 
there are also multiple ShiftAssignments (=tasks) per Shift (=job).

>
> If I choose this model, I think I'll have to pass two Plannings variables to
> the Task planningEntity:
> 1) a Maintenance-fact (Plane + Period + list of required tasks) and

I don't think this is a planner variable on the planning entity Task.
It really defines the Task: what job on what plane (and some of sort of 
requiredTechnicanCountIndex)

> 2) a Technicien-fact (?)
This is a planning variable.
You're assigning task to techinicians.
Each task has exactly 1 technician (because a job has multiple tasks, 
one per required technician).
Each technician can work on multiple tasks, but the hard/soft 
constraints make sure that it's not at the same time.

>
> Then I'll need to check if availabity of plane and availability of
> technicien match and also skill-requirement of task and skills of
> technicien.

Yep, with constraints

>
> Do you think this second model is the right one?
>
> Will it perform well?
> => ? matching all combinations of plane availabilty and
> techniciens-availability and -skills.

It should, see the nurse rostering problem.
In Planner 5.5.0.Beta1, I would add a filter on the swap move selector 
to prevent it from swapping 2 technicians assigned to different tasks on 
the same job.

https://github.com/droolsjbpm/drools-planner/blob/master/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/DifferentCourseSwapMoveFilter.javatd

>
> Thanks in advance
>
>
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/Best-model-for-planning-tp4019464.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>




More information about the rules-users mailing list