Dynamic travel optimization in booking
Starting with the Oracle Fusion Field Service 25A udpate, the findMatchingResources API introduces enhanced dynamic travel optimization for booking functions. The update enables Oracle Fusion Field Service to dynamically optimize scheduling by balancing forecasted activity flow with travel minimization, improving both travel efficiency and customer satisfaction.
Consider an equipment repair and maintenance company servicing commercial customers. Field resources are frequently dispatched to maintain printers, elevators, or other essential machinery in office complexes. Previously, assignments were scheduled based on immediate availability within the agreed SLA. This could cause mobile workers to travel back and forth across the city multiple times in a single day or week. With the new capability, the company can ensure that appointments are scheduled to minimize travel between locations within a specific area, particularly during peak maintenance seasons. This allows mobile workers to complete tasks in concentrated areas before moving elsewhere, reducing travel costs and improving response times for routine maintenance tasks.
In most field service companies, mobile workers often manage urgent requests alongside scheduled appointments. With the "Optimize Travel" goal enabled, the company can insert emergency bookings without causing significant disruptions to travel efficiency. For example, if a mobile worker is scheduled for several nearby appointments and an urgent repair request arises from the same area, the findMatchingResources API can adjust the schedule to accommodate the urgent task without adding extensive travel. This flexibility ensures urgent customer needs are met while keeping the overall day’s schedule optimized for minimal travel.
New UI parameters
On the Quota configuration page, under the Booking section, if Use Direct Assignment is selected, you can now configure the following additional parameters for the findMatchingResources API:
- Optimization goal: Choose between Default (early scheduling) or Optimize Travel.
- Use forecasted activities during booking: Option to consider forecasted activity flows during booking (Enabled On / Enabled Off).
- Forecast the activity flow within the days range: Defines the forecast range in days (Min and Max values between 0 and 31).
- For dates before the range, only routes that already contain activities close to the booking are suggested.
- For dates within the range, the activity flow forecast is applied in a way that additional travel in the proposed routes is close to the per-bucket average.
- For dates after the range ends, all feasible route positions are returned.
Find Matching Resources API Operation Changes
Request Parameter Addition
A new forecastDuringBooking object is added to findMatchingResources request to enable the booking optimization option and the scheduling based on forecasted activity flow.
Forecast During Booking
{ "type":"object", "title":"Forecast During Booking", "description":"The criteria used to sort and filter the results by means of forecasting the future activity flow to calculate the average additional travel per activity. p>Results with travel more then an average per bucket are filtered out before the end of forecasting period. If a particular parameter is not present or not specified in request, then the default values are applied.</p>", "properties":{ "useForecastDuringBooking":{ "title":"Enable Forecast During Booking", "description":"Turn on to sort and filter the results by means of forecasting the future activity flow to calculate the average additional travel per activity.", "type":"boolean" }, "optimizationGoal":{ "title":"Optimization Goal", "description":"Choose minimizeAdditionalTravel to sort the results by increasing of additional travel added. Default option sorts the results by ETA from minimal to maximal.", "type":"string", "enum":[ "default", "minimizeAdditionalTravel" ] }, "minForecastRangeDay":{ "title":"Minimum Forecast Range Day", "description":"Number of days, counted from current day, where current day is 0. before which only results that has an existing activity within the close proximity are returned. No activity flow forecasting is done before Minimum Forecast Range Day.", "type":"integer", "minimum":0, "maximum":90 }, "maxForecastRangeDay":{ "title":"Maximum Forecast Range Day", "description":"Number of days, counted from current day, where current day is 0. Should be greater then Minimum Forecast Range Day. System does the activity flow forecasting between Minimum Forecast Range Day and Maximum Forecast Range Day. During this period the average additional travel is calculated based on the number of the forecasted activities within the close proximity of the activity being booked and only results having the additional travel lesser then the average per-bucket travel are returned. After the Maximum Forecast Range Day all the available results are returned, despite the additional travel. No activity flow forecasting is done after Maximum Forecast Range Day.", "type":"integer", "minimum":0, "maximum":90 } } }
The example of this object "forecastDuringBooking":
"forecastDuringBooking": {
"useForecastDuringBooking": true,
"optimizationGoal": "minimizeAdditionalTravel",
"minForecastRangeDay": 3,
"maxForecastRangeDay": 7,
"explainRemovedOptions": true}
The example of this object "schedulesFields" with new option:
"schedulesFields": [
"fitness",
"arrivalTimeOptions",
"freeTimeWindows",
"forecastDuringBookingDetails" ]
Response Changes
If Use forecasted activities during booking is selected (or activated using API parameters), the scheduling options returned would be different from the default settings. The behavior for returned schedule options varies based on the date range:
-
Dates Before the Minimum Day of the Range:
-
Returned options include routes where:
-
The activity is adjacent to an existing activity on the route.
-
The additional travel caused by adding the activity to the route is under 120% of the average per-bucket travel, suggesting close proximity to existing activities on the route.
-
-
Additional travel is calculated as the difference in total travel on the route with and without the new activity.
-
Additional travel to and from the given activity is estimated using the airline distance method.
-
-
Dates Within the Range (from Minimum to Maximum Day):
-
Returned options include routes where:
-
The activity is adjacent to an existing activity with the same travel key.
-
The additional travel caused by adding the activity to the route is under 120% of the average per-bucket travel, suggesting close proximity to existing activities on the route.
-
Options where the average additional travel is less than 120% of the average per-bucket travel suggesting close proximity to forecasted activities on the route.
-
-
The expected number of activities in the future is determined by multiplying the average number of activities booked per day for the specific travel key by the number of days from today until the scheduled option date.
-
Additional travel To and From the given activity is estimated using airline distance method. To estimate travels between activities in the same travel key, the average travel per travel key is used.
-
Additional travel for forecasted activities is estimated using statistical data. If sufficient data is unavailable, the dates within the range are processed using the same logic as 'Dates Before the Minimum Day of the Range,' meaning no forecasted activities are considered.
-
Additional travel is calculated as follows:
-
First, calculate the total travel distance in the route, including the given activity at the proposed location in the route along with the expected number of activities for the same travel key after the given one.
-
Then, calculate the total travel distance in the route if the given activity is excluded.
-
Subtract the second value (without the given activity) from the first value (with the given activity).
-
Finally, divide this difference by the expected number of activities + 1 (to account for the added activity).
-
-
-
Dates After the Maximum Day of the Range: All possible route options are returned, following the standard findMatchingResources API behavior without activity flow forecasting.
Example: How Activity Flow Forecast Works
This example illustrates how activity flow forecast operates when enabled by default at the Capacity Area level. It shows how activities are scheduled over time, considering factors like day range, travel distances, and mobile worker availability.
Initial Setup
Conditions:
- Feature Enabled: Activity flow forecast is turned on by default
- Day Range: 2–7 days
- Field Resource Availability: One mobile worker with the required skills is available.
- Activities:
- Two activities are already scheduled for Monday and Thursday in the same travel key.
- Historical Data:
- Average activity creation rate for the travel key: 0.75 activities per day (last 30 days).
- Travel key: Distant, with travel times 1.5 times the bucket average.
- Travel Statistics: Average travel per travel key: 0.33 of the bucket average.
Day-by-Day Outcome Breakdown
- Monday (Day 1)
- The activity is planned either next to or before the existing activity in the same travel key.
- Tuesday
- No options are returned. There are no activities in the route with the same travel key.
- Wednesday
- No options are returned. By Wednesday, the system expects two (2) activities to be booked. The average additional travel would exceed by 122% the average per-bucket travel.
- Calculation:
Substituting values
-
Thursday
-
The activity is planned either next to or before the existing activity in the same travel key.
-
-
Friday
-
Options fitting 4 activities in a row are returned.
-
The system expects 3 activities to be booked. Travel efficiency improves with this forecast, the Additional travel is less than the bucket travel average.
-
Calculation
-
-
Saturday and Sunday
-
Options fitting 4 activities in a row are returned, since this amount of activities provides acceptable travel efficiency.
-
-
Next Monday and Beyond
-
All options fitting at least one activity are returned
-
No forecast is applied beyond the configured day range.
-
The example of Items part of FMR response with new objects
"items": [
{
"resource": {
"resourceId": "fmr_tech",
"status": "active",
"language": "en",
"languageISO": "en-US"
},
"fitness": {
"workTime": 180,
"workZone": 100,
"workSkill": 100,
"resourcePreference": 1
},
"schedules": {
"2020-05-20": {
"fitness": {
"workTime": 180,
"workSkill": 100,
"workZone": 100,
"resourcePreference": 1
},
"freeTimeWindows": [
[
"00:05",
"12:00"
],
[
"12:40",
"23:55"
]
],
"forecastDuringBookingDetails": {
"hasNearbyActivities": true,
"hasForecastedActivities": false,
"averageBucketTravel" : 30,
"averageTravelKeyTravel" : 30,
"removedOptions" : [ {
"minStartTime" : "12:40",
"maxStartTime" : "22:49",
"additionalTravel" : 42
} ]
},
"arrivalTimeOptions": [
{
"minStartTime": "09:00",
"maxStartTime": "12:00",
"workZoneMatch": false,
"setPositionInRoute": {
"position": "first"
},
"additionalTravel": 30,
"travelKeyMatch": true
}
]
}
}
}
]
Forecast during booking details
New forecastDuringBookingDetails object has been added to the findMatchingResources response structure under the Find Matching Resources > Resource Matches > Resource Match > List of Resource Schedules > Resource Schedule Information:
{
"type":"object",
"title":"Forecast During Booking Details",
"description":"Provides list of possible options how the activity can be assigned in the resource's route for the case when forecasting activity flow was used. This information is not useful for buckets.",
"properties":{
"hasNearbyActivities":{
"type":"boolean",
"title":"Contains Nearby Activities",
"description":"Contains one of the following values: true or false. If true, either the previous or the following activity is in close proximity of the activity specified in request. If false, then the previous or the following activity is not in close proximity of the activity specified in request."
},
"hasForecastedActivities":{
"type":"boolean",
"title":"Contains Forecasted Activities",
"description":"Contains one of the following values: true or false. If true, the activity flow forecast was used to calculate the additional travel. If false, then only activities already present in the route were used to calculate the additional travel."
}
}
}
Additional Travel field
New additionalTravel integer field has been added to Find Matching Resources > Resource Matches > Resource Match > List of Resource Schedules > Resource Schedule Information > Arrival Time Options > items containing additional travel that is needed if to book the requested activity at the proposed positions.
Arrival Time Options
{
"type":"object",
"properties":{
...
"additionalTravel":{
"type":"integer",
"title":"Additional Travel",
"description":"The difference in minutes between total travel in the current route and travel in the proposed route where the booking activity added."
},
...
}
}
New travelKeyMatch boolean field has been added to Find Matching Resources > Resource Matches > Resource Match > List of Resource Schedules > Resource Schedule Information > Arrival Time Options > items being true if the next or the previous of the activities in the route belongs to the same travel key.
Arrival Time Options
{
"type":"object",
"properties":{
...
"travelKeyMatch":{
"type":"boolean",
"title":"Travel Key Match",
"description":"Contains one of the following values: true or false. If true, either the previous or the following activity has the same travel key value as the activity specified in request. If false, then the previous or the following activity has the different travel key values as the activity specified in request."
}
}
}
Business Benefit
All field service companies strive to maximize resource utilization while keeping costs at a reasonable level. To achieve fully optimized routes, true optimization should begin earlier - ideally during the booking stage. This new feature offers a set of options to implement booking optimization using the direct booking approach through the findMatchingResources API, helping companies achieve their KPI goals.
Steps to Enable
If your Oracle Fusion Field Service subscription includes Quota and Capacity Management, you can enable the feature through the GUI; otherwise, use the findMatchingResource API.
Enabling feature through GUI (Default for all API calls)
In order to enable the feature through UI for all mobile workers in the particular buckets:
- Ensure that the buckets containing the mobile workers and the activity to be created are added to the disignated capacity areas.
- Navigate to Quota > Configuration page.
- Select Use Direct Assignment under Booking.
- Choose Optimize Travel as the Optimization Goal to order schedule options by means of additional travel within the results.
- Select Use forecasted activities flow during booking.
- Set the range to forecast activity flow on the Forecast the activity flow within the days range slider.
- Click Save.
Enabling feature using API (Per-Request level)
- Modify API Request:
- In the findMatchingResources API request, include the following fields under the forecastDuringBooking object:
- useForecastDuringBooking: true
- optimizationGoal: minimizeAdditionalTravel
- minForecastRangeDay and maxForecastRangeDay with values within the range of 0 to 31.
- Include Required Response Fields:
- Ensure the schedulesToReturn collection includes the forecastDuringBookingDetails object to retrieve the new fields in the response.
- Verify the schedulesToReturn covers dates within the minForecastRangeDay to maxForecastRangeDay range.
Tips And Considerations
- Oracle Fusion Field Service subscription with Quota and Capacity Management functionality is required for UI-based enablement. If unavailable, use API-based configuration.
- Choose the forecast range carefully based on operational needs. A broader range improves optimization but may increase processing time.
- Balance flexibility for emergency bookings with travel minimization to maintain operational responsiveness.