Hey,
</p>
I want to solve the following problem using drools planner:</br>
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.
</p>
For example there are three tasks 
</p>
<table>
<tr>
<td>Job</td>
<td>first possible start date</td>
<td>last possible start date</td>
<td>length</td>
</tr>
<tr>
<td>A</td>
<td>7:00 am</td>
<td>8:30 am</td>
<td>60 min</td>
</tr>
<tr>
<td>B</td>
<td>7:30 am</td>
<td>10:00 am</td>
<td>30 min</td>
</tr>
<tr>
<td>C</td>
<td>10:30 am</td>
<td>12:00 pm</td>
<td>60 min</td>
</tr>
</table>
</p>
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.</br>
Tasks cannot overlap.
</p>
A good solution would be:
</p>
<table>        
<tr>
<td>Job</td>
<td>Start date</td>
<td>End date</td>
</tr>
<tr>
<td>A</td>
<td>7:00 am</td>
<td>8:00 am</td>
</tr>
<tr>
<td>B</td>
<td>8:00 am</td>
<td>8:30 am</td>
</tr>
<tr>
<td>C</td>
<td>12:00 am</td>
<td>1:00 pm</td>
</tr>
</table>
</p>
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. </br>
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.
</p>
But now I’m getting problems, writing the soft constraints. </br>
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. </br>
In my example, it would look like this:
</p>
<table>
<tr>
<td>Job</td>
<td>prevJob</td>
<td>nextJob</td>
</tr>
<tr>
<td>A</td>
<td>null</td>
<td>Job B</td>
</tr>
<tr>
<td>B</td>
<td>Job A</td>
<td>Job C</td>
</tr>
<tr>
<td>C</td>
<td>Job B</td>
<td>null</td>
</tr>
</table>
</p>
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.
</p>
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.
</p>
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.
</p>
For example, if Job A gets moved to 8:00 the sequence could look like this:
</p>
<table>
<tr>
<td>Job</td>
<td>Start date</td>
<td>End date</td>
</tr>
<tr>
<td>A</td>        
<td>8:00 am</td>
<td>9:00 am</td>
</tr>
<tr>
<td>B</td>
<td>7:30 am</td>
<td>8:00 am</td>
</tr>
<tr>
<td>C</td>        
<td>12:00 am</td>
<td>1:00 pm</td>
</tr>
</table>
</p>
Therefore the variables preJob and nextJob have to be adjusted for each job:
</p>
<table>
<tr>
<td>Job</td>
<td>prevJob</td>        
<td>nextJob</td>
</tr>
<tr>
<td>Job A</td>
<td>Job B</td>
<td>Job C</td>
</tr>
<tr>
<td>Job B</td>
<td>null</td>
<td>Job A</td>
</tr>
<tr>
<td>Job C</td>
<td>Job A</td>
<td>null</td>
</tr>
</table>
</p>
To achieve that, I use a list in which I save the current order of the jobs.</br>
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.
</p>
You’ve probably got the punch line by now: It’s not working. </br>
And besides from getting a scoreCurroption exception, I truly doubt that this is the perfect solution for solving this planning problem.</br>
Have any of you an idea, what a better way for solving this problem could be?
</p>
I’ve tried to find a similar problem in the examples, but none of them has similar restrictions as mine. </br>
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. 
</p>
Thanks!

        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://drools.46999.n3.nabble.com/Drools-Planner-Solving-a-job-schedule-problem-tp4021192.html">Drools Planner: Solving a job schedule problem</a><br/>
Sent from the <a href="http://drools.46999.n3.nabble.com/Drools-User-forum-f47000.html">Drools: User forum mailing list archive</a> at Nabble.com.<br/>