PS Truck Hour Calculation
Truck hours are based on the cycle time of the truck (when being loaded by the specific digger), the truck’s payload, the quantity and type of material moved, and the time usage model (TUM) which applies to the truck.
Cycle Time
Haul Infinity, integrated into APS, determines the cycle time. Therefore, in order for useful cycle times to come through, the haul network must be updated and accurately reflect the roads being used.
The truck’s cycle time consists of:
Spot Time at Loader
Loading Time
Loaded Travel Time
Spot at Dump
Dumping Time
Unloaded Travel Time
TKPH Delay (if TKPH constrains the truck cycle time)
Queue Time
The cycle time of a truck calculated by Haul Infinity depends on the truck, loader, source, destination, and operating condition. The payload of the truck is entered into Haul Infinity but can be overridden by the operating condition.
The operating condition used in APS is not one of the ones specified in Haul Infinity. Instead, the operating condition is either a default which does not alter any haulage parameters, or it’s specified by a script based on your site-specific requirements. A few examples of what is possible with the operating condition are:
Change the dig rates by location, blast type, etc.
Alter the truck payload based on time or pit.
Factor the truck travel time based on a variety of factors.
Specify the temperature for TKPH calculations.
And many more.
Material Type and Truck Payload
The material type is specified in Haul Infinity and is used to determine the swell factor from BCM into the tray and the dry tonnes from the wet tonnes based on the moisture. How the material types in Haul Infinity are mapped to into APS is specified in the Final Configuration step, Haulage Materials field. The truck’s payload/capacity is specified in Haul Infinity in terms of wet tonnes (not dry tonnes) or volume.
Based on the material type, and payload/capacity, Haul Infinity knows what the maximum dig rate in BCM/h, Dry Tonnes/h, and Wet Tonnes/h, as well as the truck’s limiting payload in wet tonnes (which could be less than it’s stated payload if the truck’s capacity is limited by volume).
Quantity Moved
The quantity moved is automatically calculated by the scheduling engine - the user has no control over this, other than through Rapid Reserver, the Preschedule, and the Database Corruptor steps.
Time Usage Model (TUM)
The TUM applies to both diggers and trucks. An explanation of the loader TUM can be found on the PS. Agent TUM Calculation page. The Trucks' TUM operates in the same way as the diggers, except that an additional default availability type Planned Availability (PA) is provided, which is unique to Trucks as it is not possible to specify planned maintenance windows for individual trucks.
The TUM affects diggers by establishing a difference between the Nominal Rate, and the Productive Rate (factored by the TUM). For haulage calculations, the Nominal rate is used. The effect the dig rate has is limited to how Haul Infinity chooses a number of “instantaneous trucks” to match onto a Haul, which affects queue time if the truck matching method (specified in Haul Infinity) is set to “OverTruck” or “Round”. See Haul Infinity > Parameters (here).
The user in the Calendar specifies the TUM for the trucks, and for each truck, there is a calculated "Hours / Unit" field.
Calculation of Truck Hours and Number of Trucks
Now that the scheduling engine knows the:
Truck
Loader
Source (Dig Block or Stockpile)
Destination (Stockpile, Crusher, Dump Block, or Point Dump)
Operation Condition (Site-specific - specified by script)
Quantity Moved
Material Type / Limiting Payload
Hours per Truck per Period
It can calculate the number of truck hours, and the number of trucks required:
//Pseudocode:
var loader = Agent.Name;
var truck = Haulage.Truck;
var source = Source.FullName;
var destination = Destination.FullName;
var parcel = Source.Parcel;
var qty = Mining.WetTonnes;
var hoursInPeriod = GetFromCalendar();
var overrideLoaderRate = GetFromCalendarOrScript(loader);
var material = Haulage Result.Material
= GetFromHaulInfinity(parcel);
var payload = Haulage Result.Truck Payload
= GetFromHaulInfinity(truck);
var cycleTime = Haulage Result.Times.Total
= SpotAtLoader + TruckLoadTime + LoadedTravelTime + SpotAtDump + DumpTime + UnloadedTravelTime + TKPHDelay + Queue
= GetCycleTimeFromHaulInfinity(loader, truck, material, payload, source, destination, overrideLoaderRate, ... other factors by script)
var numTrips = Haulage Result.Number of Trips
= qty / payload;
var truckHours = Haulage.Truck Productive Hours
= numTrips * cycleTime (in minutes) / 60;
var engineFactor = GetAvailabilitiesFromCalendarWhereEngineIsOn(truck)
var calendarFactor = GetAvailabilitiesFromCalendar(truck);
var truckEngineHours = Haulage.Truck Engine Hours = truckHours / engineFactor;
var truckCalendarHours = Haulage.Truck Calendar Hours = truckHours / calendarFactor;
var numberOfTrucks = truckCalendarHours / hoursInPeriod;
The number of trucks is based on the productive hours of the truck and the Time Usage Model (TUM). Therefore, to APS each truck represents a number of hours in a period.
Note that there are many equivalent methods to calculate the number of trucks. For example, dividing the number of productive truck hours by the number of available hours per period for each truck will yield the same result.
Note that regardless of what’s set in Haul Infinity, APS will always use “TheoreticalNoMaximum” as the truck matching mode. This means that the number of trucks assigned to an individual route is not fixed to an integer, and can be less than 1. This is a requirement for the algorithm as it means trucks become a linear variable instead of an integer variable - which means the solve time for a single instant is a fraction of a second instead of more than a minute (and consider that there are usually 2000+ individual solutions calculated in a two-week schedule run).