[rules-users] Drools Planner: Solving a job schedule problem

mr_moe mc_entry at web.de
Thu Dec 13 10:16:30 EST 2012


Hey,
I want to solve the following problem using drools planner:There are several
jobs which should be worked through by a machine on one day. Each job has a
length and a constraint that it only can be worked of between a fixed start
and end date.
For example there are three tasks 
Job	first possible start date	last possible start date	length
A	7:00 am	8:30 am	60 min
B	7:30 am	10:00 am	30 min
C	10:30 am	12:00 pm	60 min
The jobs should be organized in the following way, that there is as less
time between tasks as possible. If it is due to restrictions not possible to
order the tasks without a break and also the break is longer than, say, 20
minutes, the tasks should be organized with a long break as possible.Tasks
cannot overlap.
A good solution would be:
	
Job	Start date	End date
A	7:00 am	8:00 am
B	8:00 am	8:30 am
C	12:00 am	1:00 pm
First, the planning variable (ValueRangeType.FROM_PLANNING_ENTITY_PROPERTY)
of each task is its start date, which can takes a value which is between the
first possible start date and the last possible start date. E.g. possible
start dates for job A are between 7:00 am and 8:30 am. To make sure, that
tasks aren’t scheduled at the same time, I’ve written a hard constraint
rule, which checks if one task overlaps with another one. And running the
planner with hard constraints only, it works fine.
But now I’m getting problems, writing the soft constraints. At the moment,
every job (planning entity) has variables, called “nextJob” und “prevJob”,
which points to the jobs which are scheduled before and after that job. In
my example, it would look like this:
Job	prevJob	nextJob
A	null	Job B
B	Job A	Job C
C	Job B	null
My intention of these variables is that I can check with a soft constraint
rule, if the current chosen job and the job with which it gets compared are
consecutive jobs, and if so, how much time between these jobs is left.
In the soft constraint rule, I check if the “nextJob” Variable points to the
job, with which I’m currently comparing the job. If this is the case, then
there is no other job scheduled between those jobs and I can check how much
time between these jobs is left.
Every time drools planner reschedules a job, I have to check if nextJob and
prevJob of each job are still pointing to their right predecessor and
successor.
For example, if Job A gets moved to 8:00 the sequence could look like this:
Job	Start date	End date
A		8:00 am	9:00 am
B	7:30 am	8:00 am
C		12:00 am	1:00 pm
Therefore the variables preJob and nextJob have to be adjusted for each job:
Job	prevJob		nextJob
Job A	Job B	Job C
Job B	null	Job A
Job C	Job A	null
To achieve that, I use a list in which I save the current order of the
jobs.Furthermore I’ve written my own mover that, besides assigning the
current job to its new start date, updates the list and each job if a job
gets rescheduled.
You’ve probably got the punch line by now: It’s not working. And besides
from getting a scoreCurroption exception, I truly doubt that this is the
perfect solution for solving this planning problem.Have any of you an idea,
what a better way for solving this problem could be?
I’ve tried to find a similar problem in the examples, but none of them has
similar restrictions as mine. The curriculumcourse example has only fixed
time slots instead of a variable length and in the nurserostering, nurses
(jobs) get assigned to fixed shifts (time periods) and not the other way
around. 
Thanks!



--
View this message in context: http://drools.46999.n3.nabble.com/Drools-Planner-Solving-a-job-schedule-problem-tp4021192.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20121213/5f1b530e/attachment.html 


More information about the rules-users mailing list