Highlighted
Occasional Contributor

Job scheduling optimiser user case

Hi,

 

Has the Anaplan optimiser been succesfully used for a job scheduling problem?

 

Objective is to minimise the time taken to complete a set of jobs.

 

Constraints are:

1) We have a list of resources who can each supply a maximum amount of time per time period.

i.e. Time spent by resource A in period X <= Time available for resource A in period X

 

2) We have a list of jobs to be completed. Each job requires a fixed level of time from each resource to complete.

i.e. Total time required for job by resource A >= Total time spent on job by resource A across all time periods.

 

3) Some jobs cannot be started until other jobs have completed. 

i.e. If task 2 is dependent on task 1 completing.

Time Spent on task 2 in period X =0, if time spent on task 1 >0 in any period >X.

 

Objective is easy to approximate using linear contraints (peanalising future periods very heavily).

Constraint 1 & 2 are easy to deal with using linear constraints.

While contraint 3 can easily also be modelled in Anaplan, I'm not sure how to model it without using logic which is clearly non-linear and thus not compatible with optimiser.

 

If anyone has come across this before, please advise as to whether this is possible?

 

Thanks,

 

Peter.

3 REPLIES 3
Highlighted
Occasional Contributor

Re: Job scheduling optimiser user case

Peter,

 

Optimizer can be configured to have dependent variables constrained by the value of another value in the preceding time period.

 

I suggest that you separate a given time block into a dynamic time series consisting of hours, blocks, etc. For example, if there are 4 time blocks per day, the variables can be set up like so:

 

Variable 1: Task 1 Scheduled? (1 = True, 0 = False), dimensionalized by Time Block

Variable 2: Task 2 Scheduled? (1 = True, 0 = False) dimensionalized by Time Block

 

List: Time Block with a Previous Property

Block 1 (Previous: BLANK)

Block 2 (Previous: Block 1)

Block 3 (Previous: Block 2)

Block 4 (Previous: Block 3)

 

Constraint 1: Task 1 <=1

Constraint 2: Task 2 <=Task 1[LOOKUP: Previous Time Block]

 

This will constrain Task 2 so that it can only be scheduled if Task 1 was performed in the previous block. We have some example of this logic in action with a workforce scheduling optimizer where shifts must be contiguous.

 

--Sam

Highlighted
Occasional Contributor

Re: Job scheduling optimiser user case

Hi Sam,

 

Thank you for your advise.

Two issues I'm still not sure how to cope with;

 

1) A task may take multiple periods to complete. We need to define when it has completed rather than just scheduled.

It maybe that task 1 completes more than one time period before it is optimal to start task 2.

Thus we cannot just look up the prior time block?

 

2) I think introducing the additional variables below and linking them to the time the resources spend on the task will make the resource constraint non-linear.

 

i.e. (Time spent on task 1 by resource A)*(Task 1 Scheduled?)<= Time available for resource A.

Is of form Variable*Variable<= Constant and thus non-linear.

Contributor

Re: Job scheduling optimiser user case

Hello for your 3rd constraint, could you try creating a variable wich is beggining of job 

You will also create a properties which is ending  of dependant job

for this property, you will add a formula which says that it is equal to the variable beggining of job + time to achieve the job

then in your constraint module, you write beggining of job- the properties >= 0

If you want i can try to do it with you tomorrow, because i don't know if the idea i shared is very clear