How To: Advanced Scheduling Techniques using APS

The STRG (Scheduling Technical Reference Guide) is your friend, if you have not read it, you should. I am not going to get too in depth with my explanations, so if you are confused, go read the guide first.

Also @mbilodeau has a great post on scheduling blocks that you should read before diving into mine.

Scheduling Blocks
Basically, this is how many blocks of load can be placed against an operation. This tells the system the number of Resources that one operation runs on at a time. There are two places this needs to be set. First is the Resource Group and this basically just sets the default on a method operation when the RG is selected. The second place where SBs are set is on the Method/Job Operation. You can set this value higher than the SBs on the RG. This does not make much sense until you factor in Capabilities and Split Operations.

Concurrent Capacity
This is where things start to get confusing. The intent behind Concurrent Capacity is for operations that use a resource like an oven. You define what the resource can hold, in the case of the oven it may be 12 trays. Then you define how many trays the operation consumes of the 12 trays, let’s say 4. Because that operation only consumes 4 trays, there are still 8 more trays that could be scheduled. That is the defined intent of the field in the STRG, but I have concocted a way to use it to shrink operation run times. There are two places where this needs to be set. The first is the Resource (not the Resource Group). I set all of my Resources where that I want the scheduled time to be dynamic to 1. Setting it on the Resource is the limiting factor, if the load that an operation will place against a Resource makes the CC greater than the Resource, the scheduling engine will not schedule the operation. The second place where this needs to be set is on the Method/Job Operation Detail Scheduling Resource. This is where you have to do a little math to figure out what to enter here. I will explain that a little further down as I think it will make more sense in context.

Split Operations
Another level of confusion. From the STRG: Use the Splitting Operations modifier to indicate that Production Time on a resource can be divided evenly between multiple scheduling blocks at different points within the schedule. As the engine allocates scheduling blocks against a resource, it can separate these blocks at points wherever capacity is available. Basically, takes the total operation hours and says that it can be split and run on different resources anywhere the engine can find time. If you do not select this option, it will schedule a contiguous SB on a resource. This allows the engine to break down operations into the smallest chunks to try and find time to schedule them.

My Example Settings
Employee Resource Group - all employees were added to a single RG.

  • Finite horizon: 365
  • Scheduling Blocks: 1
  • Split Operations = true

Employee Resources

  • Finite = true
  • Finite horizon: 365
  • Use Resource Group Values = true

Bays (“workspace”) Resource Group - 1 Resource per RG

  • Finite horizon: 365
  • Scheduling Blocks: 1
  • Split Operations = true

Bay Resources

  • Finite = true
  • Finite horizon: 365
  • Use Resource Group Values = true
  • Concurrent Capacity = 8

The method I created was real simple. Only 1 material. Only 1 Operation. Prod Qty of 1

Operation

  • Est time is 16 hours
  • SBs 2
  • 2 Scheduling Resources (I used Capabilities for both the employee and bay)
  • The Employee Scheduling Resource does not need to be altered
  • The Bay Scheduling Resource needs to have a Concurrent Capacity value set. Remember, this is the amount of load will be placed against the Resource in each scheduling block. I use the following formula to figure out the CC to put on the Scheduling resource

If( Total Operation Time / Operation Scheduling Blocks >= Resource Concurrent Capacity, Resource Concurrent Capacity, Total operation Time / Operation Scheduling Blocks)

So in my example here is what the Concurrent Capacity should be based on Op SB

16 hrs / 1 SB = 16, Concurrent Capacity should be 8
16 hrs / 2 SB = 8, Concurrent Capacity should be 8
16 hrs / 3 SB = 5.33, Concurrent Capacity should be 5.33
16 hrs / 4 SB = 4, concurrent Capacity should be 4

Now you can run Generate Shop Capacity, Calculate Global Scheduling Order, and Global Scheduling (Finite)

1 Like