TS Scheduling FAQ
Common questions from new and experienced users.
- 1 What is a Schedule?
- 2 What is an Agent?
- 3 What is a Fleet?
- 4 Why can I add or edit Agents?
- 5 How many Agents?
- 6 What is Destination Logic?
- 7 What is Steps Logic?
- 8 What are Constraints?
- 9 What are Product Specifications?
- 10 What is Overflow?
- 11 Why did mining stop?
- 12 Why are my diggers under-utilised?
- 13 Why is my crusher empty?
- 14 Why isn't my stockpile reclaiming?
- 15 Why do I have underground mining?
- 16 How to resolve "Scheduling Fault" error message?
- 17 Why do Agent and Loader have different time usage numbers?
- 18 What determines the size of the transaction that an Agent mines?
- 19 When would I use "Finger Parcels"?
- 20 When would I use "Finger Pile Type"?
- 21 Why would I tick "Process Optimised Stockpiles Last"?
- 22 Why would I tick "Use Serial Blasting Delays"?
- 23 Why would I tick "Aggressive Drilling"?
- 24 What is the purpose of "Ignore Digs"?
- 25 Why is my constraint being violated?
What is a Schedule?
A schedule is a list of transactions.
A schedule is a list of transactions. Each transactions has a Source, Destination, Loader, Truck, and Material. It also contains quantities such as equipment hours, material tonnes, product grades, and haulage distances.
All the outputs that we interact with (the tables, charts, depletion surfaces, stockpile inventories) are all being generated from the underlying list of transactions.
What is an Agent?
An Agent generates schedule transactions.
An Agent appends new transactions to the schedule. It interprets the schedule logic to select the Source, Destination, Loader, Truck, and Material for each new transaction, and calculates the reportable numbers.
Also see TS. Agent Rates.
What is a Fleet?
A Fleet is a bucket of loader hours and truck hours.
A Fleet is a bucket of equipment hours. The Agent dips into this bucket every time it schedules a block, depleting the hours proportionally to the production rate.
A single Fleet may reference multiple diggers. In this case, the user specifies the order in which the diggers are depleted (if any).
A single Agent may reference multiple fleets. In this case, the user specifies which fleet to use in different situations (such as Ore/Waste, Crewed/Autonomous).
For example, some sites have a crusher bin that is too narrow for the largest trucks. They use a Crusher Fleet and an Earth Moving fleet; the Agent selects the fleet appropriate to the destination in each schedule transaction.
Why can I add or edit Agents?
Depending on the mine site, there may be one Agent or many Agents.
Each Agent can be set up to interpret different scheduling logic when it generates transactions.
Destination Logic can filter Agents by location (such as crewed or autonomous).
Steps Logic can filter Agents by different fleets (such as owner or contractor).
Constraints can filter Agents by different movements (such as ore or waste mined).
Dynamic Haulage can filter Agents by different haul routes (such as ex-pit or rehandle).
Depending on the mine site, there may be one Agent or many Agents.
How many Agents?
The user can only assign the fleet, not the individual diggers within the fleet.
Many projects only have a single “Miner” Agent, which generates every single transaction in the schedule. There might be a Waste Fleet, a South Pit Fleet, an Autonomous Fleet, and a Contractor Fleet, but they all report to the single Miner Agent that is executing the schedule transactions.
In this example, for any given pit, the user can only assign the fleet, not the individual diggers within the fleet. Although the targeted tonnes may amount to "one digger", the actual utilisation may be spread across multiple dig units within the fleet.
If the user is running a long term schedule, or has a restricted mine site where tramming is limited, then this may be a practical way of scheduling with acceptable accuracy.
If the user is running a short term schedule, or has a sprawling mine site, then the solution may be to use Loaders as Agents.
With this setup, when the user assigns "1x SH90" to the South Pit, then only that exact digger type is used:
The user assigns the "SH90 Agent".
The "SH90 Agent" selects the "SH90 Fleet".
The "SH90 Fleet" contains the "SH90 Shovel".
Although these pieces are working together under the same name, they are doing different things.
The Agent is generating schedule transactions.
The Fleet is a bucket of truck and loader hours.
The Shovel expends hours to move tonnes (it has a dig rate and a utilisation).
By chaining one digger type to one Agent, the user has much more granular control over the dig sequence of individual diggers.
What is Destination Logic?
Destination Logic describes the final resting place of material at the end of a period.
See Destination Logic.
What is Steps Logic?
Steps Logic describes all haulage between the Original Source and the Final Destination in a period.
See Steps Logic.
What are Constraints?
Constraints tell an Agent when to stop mining. The properties of the constraint are specified in the Setup; the limiting values of the constraint are specified in the Calendar.
See Constraints.
What are Product Specifications?
Product specifications tell the optimiser what tonnes and grades to send to each destination. The properties of the rules are specified in the Setup; the values of the rule are specified in the Calendar.
See TS. Product Specifications.
What is Overflow?
See TS. Overflow Warning.
Why did mining stop?
See TS. Trace Report.
Why are my diggers under-utilised?
Why is my crusher empty?
Why isn't my stockpile reclaiming?
See TS. Stockpile Not Reclaiming.
Why do I have underground mining?
How to resolve "Scheduling Fault" error message?
Why do Agent and Loader have different time usage numbers?
This applies where loaders are ticked Use as Agent in Setup > Loader Types.
Agent and loader utilisation are calculated differently.
Loader utilisation is a target instantaneous utilisation while working.
Agent utilisation includes non-working time.
If a loader only works 70% of the time, then the Agent utilisation will be 70% of the loader utilisation.
Loader target utilisation = 60%
Loader units active = 0.7
Agent utilisation = Loader Utilisation * Number of Loaders
= 42%
Agent hours = Agent utilisation * Calendar time
In addition, it is possible for the Agent and the loader to have different dig rates (if the Agent is higher, it under-utilises the loader, and vice versa). This also effects the Agent utilisation.
Loader target utilisation = 60%
Loader units active = 0.7
Loader rate = 4203
Agent rate = 4210
Agent utilisation = Loader Utilisation * Number of Loaders * (Loader rate / Agent rate)
= 42.1%
Agent hours = Agent utilisation * Calendar time
For more on loader rates vs. agent rates, see TS. Production Rates.
What determines the size of the transaction that an Agent mines?
The amount of material mined in a transaction is wholly depended on the number of Agents being used. Consider one Agent and one record containing one parcel. The Agent would mine the entire amount of material in the record in one pass, resulting in a single transaction.
If the same record now contains three parcel types, the Agent would mine the record in three passes, generating three separate transactions..
If two or more Agents are in use, when an Agent finishes a pass, all other Agents are triggered to commence a new pass, regardless of how much material is remaining in its current pass. As seen from the image below, Agent 2 has completed its current pass (Parcel 1), triggering Agent 1 to start a new pass on the same parcel it was previously mining.
How to target stockpile reclaim in Optimise Products mode?
As product quality and quantity are targeted automatically when using Optimise Products, the ability to enter a reclaim target under the Stockpiles node of the Calendar is removed. However, by using a CrusherCashFlow in conjunction with a Standard constraint, the functionality can be mimicked.
By having a standard constraint for material mined from the stockpile to the crusher, we can limit how much material is mined off the stockpile. This standard constraint will be how the reclaim target is set and managed, any value higher than 0 will get reclaimed.
By adding a CrusherCashFlow with the stockpile(s) as the source, we are adding a decision variable to the objective function of the linear program which is used in determining what material to send to the crusher. The Cash Flow value required will be dependent on how other CrusherCashFlows have been configured. If two rules satisfy the same condition, then the cash flow is the sum of values in each rule.
In the below image, it can be seen when the StockpileReclaim Cash Flow value is positive, the reclaim target, represented by the StockpileReclaimTarget constraint, is met.
As the CrusherCashFlow value IncentiviseDry already contains ROM1_1 as a source, there is already 100 $/t incentive to feed this material. Setting the StockpileReclaim Cash Flow to 1 increases this incentive to 101 $/t, more than any other material.
As seen in period 3, if the reclaim target is uncapped, the entire crusher feed will consist of material from ROM1_1 as this is going to yield the biggest return for the optimiser (optimum solution).
When would I use "Finger Parcels"?
Setup > Stockpiles
See Parcel Fingers.
When would I use "Finger Pile Type"?
Setup > Stockpiles
See Finger Piles.
Why would I tick "Process Optimised Stockpiles Last"?
Setup > Haulage Configurations
Processing the rehandle transactions last will concentrate truck overflow in the rehandle fleets, instead of spreading it across multiple production fleets. For example, if a digger is shared between the pit and the ROM, "Process Optimised Stockpiles Last" will cause it to overflow in the rehandle fleet instead of the production fleet.
Why would I tick "Use Serial Blasting Delays"?
Setup > Haulage Configurations
When ticked, the cooldown time between drilling and blasting can only run on one blast at a time. This approximates a bomb crew that cannot be on more than one shot at once.
Why would I tick "Aggressive Drilling"?
Setup > Dependencies > Drilling
This allows drills to begin drilling exposed dig solids, even if the whole blast is not fully mined off yet. This can be useful where (for example) three separate drill patterns are fired as one blast.
What is the purpose of "Ignore Digs"?
Setup > Choose Data Sources
When importing the data, this toggles between importing (Flitches + DigSolids) versus importing (Benches + Blast Solids). This can be used to share reserves between multiple planning horizons, where some plans use flitches and others do not.
Why is my constraint being violated?
In some situations, it's possible that constraints included as part of the optimisation may be violated. Due to numeric imprecision and floating point error, the optimisation solver allows a tolerance of 0.0001 for mined blocks so as not to be too precise to mark feasible solutions as infeasible. In most cases, this would result in small negligible discrepancies and would go undetected. When dealing with large values, the issues become more visible such as shown in the use case below.
Standard Constraint - Long-Term Stockpile to Crusher
Limit: 1,761,749 dt
Actual: 1,761,779
Mined Blocks
Block 1 - 163,348
Block 2 - 219,126
Block 3 - 477,117
Block 4 - 314,729
Block 5 - 587,459
Optimisation Result
Block 1 - 163,348
Block 2 - 219,126
Block 3 - 477,117
Block 4 - 314,699 (-30)
Block 5 - 587,459
As can be seen, the constraint is violated by 30 tonnes and happens with Block 4. The optimiser resulted in only 314,699 tonnes being sent to the crusher, leaving 30 tonnes behind. It is important to note that the crusher is the only destination where material from the stockpile can be sent. Typically, this would result in an infeasible solution; however, as outlined above, there is a .0001 tolerance for infeasible solutions. This means that if the remnant material is below the tolerance level, the block will be assumed fully mined. The tolerance level can be determined by multiplying the quantity mined by 0.0001. Using this logic, we can see that there could be up to 31 tonnes remaining of Block 4, 0.0001 * 314,729, before an infeasible solution is triggered.