予約時の動的な移動の最適化

Oracle Fusion Field Service 25A udpateから、findMatchingResources APIでは、予約機能の動的移動最適化が強化されています。 更新により、Oracle Fusion Field Serviceは、予測アクティビティ・フローと移動の最小化とのバランスをとり、移動効率と顧客満足度の両方を向上させることで、スケジューリングを動的に最適化できます。

商用顧客にサービスを提供する設備修理メンテナンス会社について考えてみます。 フィールド・リソースは、多くの場合、オフィス・コンプレックス内のプリンタ、エレベータまたはその他の重要な機械を維持するために派遣されます。 以前は、合意されたSLA内の即時利用可能状況に基づいて割当がスケジュールされていました。 これにより、モバイル・ワーカーは1日または1週間で複数回市内を往復できます。 新機能により、特にメンテナンスのピーク・シーズン中は、アポイントメントが特定のエリア内のロケーション間の移動を最小限に抑えるようにスケジュールされていることを確認できます。 これにより、モバイル・ワーカーは、他の場所に移動する前に集中地域のタスクを完了できるため、出張コストが削減され、定期的なメンテナンス・タスクのレスポンス時間が短縮されます。

ほとんどのフィールド・サービス会社では、モバイル従業員は、スケジュールされたアポイントメントとともに緊急リクエストを管理することがよくあります。 「出張の最適化」目標を有効にすると、会社は出張の効率に大きな混乱を引き起こすことなく緊急予約を挿入できます。 たとえば、モバイル・ワーカーが複数の付近のアポイントメントにスケジュールされており、緊急の修理リクエストが同じエリアから発生した場合、findMatchingResources APIは、大規模な出張を追加せずに緊急タスクに対応するようにスケジュールを調整できます。 この柔軟性により、1日のスケジュール全体を最小限の出張用に最適化しながら、緊急の顧客ニーズを満たすことができます。

新規UIパラメータ

「割当て構成」ページの「予約」セクションで、「直接割当を使用」が選択されている場合は、findMatchingResources APIに次の追加パラメータを構成できるようになりました:

  • 最適化目標: デフォルト(早期スケジュール)または移動の最適化のいずれかを選択します。
  • 予約時に予測アクティビティを使用: 予約時に予測アクティビティ・フローを考慮するオプション(「有効オン」 / 「有効オフ」)。
  • 次の日数範囲内のアクティビティ・フローを予測: 予測範囲を日数で定義します(0から31までの最小値と最大値)。
    • 範囲より前の日付の場合、予約に近いアクティビティがすでに含まれているルートのみが推奨されます。
    • 範囲内の日付の場合、アクティビティ・フロー予測は、提案されたルートの追加移動がバケットごとの平均に近い方法で適用されます。
    • 範囲終了後の日付については、実行可能なすべてのルート位置が返されます。

新規UIパラメータ

一致するリソースの検索API操作の変更

リクエスト・パラメータ追加

findMatchingResourcesリクエストに新しいforecastDuringBookingオブジェクトが追加され、予約最適化オプションおよび予測アクティビティ・フローに基づくスケジューリングが有効になります。

予約中の予測

{

"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

}

}

}

このオブジェクト"forecastDuringBooking"の例:

"forecastDuringBooking": {       

"useForecastDuringBooking": true,

"optimizationGoal": "minimizeAdditionalTravel",

"minForecastRangeDay": 3,

"maxForecastRangeDay": 7,

"explainRemovedOptions": true}

新しいオプションを指定したこのオブジェクト"schedulesFields"の例:

"schedulesFields": [

"fitness",

"arrivalTimeOptions",

"freeTimeWindows",

"forecastDuringBookingDetails"    ]

レスポンス変更

「予約時に予測アクティビティを使用」が選択されている(またはAPIパラメータを使用してアクティブ化されている)場合、返されるスケジューリング・オプションはデフォルト設定とは異なります。 返されたスケジュール・オプションの動作は、日付範囲によって異なります:

  • 範囲の最小日より前の日付:

    • 返されるオプションには、次のルートが含まれます:

      • アクティビティは、ルート上の既存のアクティビティに隣接しています。

      • ルートへのアクティビティの追加による追加の移動は、バケット当たりの平均移動の120%未満であり、ルート上の既存のアクティビティに近接していることを示唆しています。

    • 追加移動は、新規アクティビティの有無にかかわらず、ルートの移動合計の差異として計算されます。

    • 指定されたアクティビティとの間の追加の移動は、航空会社の距離メソッドを使用して推定されます。

  • 範囲内の日付(最小から最大日):

    • 返されるオプションには、次のルートが含まれます:

      • アクティビティは、同じ移動キーを持つ既存のアクティビティに隣接しています。

      • ルートへのアクティビティの追加による追加の移動は、バケット当たりの平均移動の120%未満であり、ルート上の「既存」アクティビティに近接していることを示唆しています。

      • 平均追加移動が、ルート上の「予測」アクティビティに近いことを示唆する、バケット当たりの平均移動の120%未満であるオプション。

    • 将来のアクティビティの予定数は、特定の移動キーの1日当たりの平均予約済アクティビティ数に、予定オプション日までの本日から日数を乗算して決定されます。

    • 所定のアクティビティからの追加移動は、航空会社の距離メソッドを使用して推定されます。 同じ移動キー内のアクティビティ間の移動を見積るために、移動キー当たりの平均移動が使用されます。

    • 予測アクティビティの追加移動は、統計データを使用して推定されます。 十分なデータが使用できない場合、範囲内の日付は「範囲の最小日より前の日付」と同じロジックを使用して処理されます。つまり、予測アクティビティは考慮されません。

    • 追加出張は次のように計算されます:

      • 最初に、ルート内の提案されたロケーションでの指定アクティビティと、指定の移動キーの後の同じ移動キーの予想アクティビティ数を含めて、ルート内の合計移動距離を計算します。

      • 次に、指定されたアクティビティが除外されている場合、ルート内の移動距離合計を計算します。

      • 2番目の値(指定アクティビティなし)を最初の値(指定アクティビティあり)から減算します。

      • 最後に、この差異を予想アクティビティ数+1で除算します(追加されたアクティビティを考慮するため)。

  • 範囲の最大日より後の日付:アクティビティ・フロー予測なしの標準のfindMatchingResources API動作に従って、可能なすべてのルート・オプションが返されます。

例: アクティビティ・フロー予測の仕組み

次の例では、キャパシティ・エリア・レベルでデフォルトで有効になっている場合のアクティビティ・フロー予測の動作を説明します。 日間範囲、移動距離、モバイル・ワーカーの空き状況などのファクタを考慮して、アクティビティのスケジュールが時間の経過とともに表示されます。

初期設定

条件:

  • 機能有効: アクティビティ・フロー予測はデフォルトでオンになっています
  • 日付範囲: 2-7日数
  • フィールド・リソース可用性: 必要なスキルを持つ1人のモバイル・ワーカーを使用できます。
  • アクティビティ:
    • 同じ移動キーで、すでに2つのアクティビティが月曜日と木曜日にスケジュールされています。
  • 履歴データ:
    • 移動キーの平均アクティビティ作成率: 1日当たりの0.75アクティビティ (直近30日).
    • 移動キー: 遠方、移動時間「バケット平均の1.5倍」
  • 移動統計:移動キー当たりの平均移動: 0.33 バケット平均.

日別結果内訳

  • 月曜日(1日目)
    • アクティビティは、「次へ」または同じ移動キー内の既存のアクティビティの前に計画されます。
  • 火曜日
    • オプションは返されません。 同じ移動キーを持つアクティビティがルート内にありません。
  • 水曜日
    • オプションは返されません。 水曜日までに、2つのアクティビティが予約されると予想されます。 平均的な追加移動は、バケットごとの平均移動の122%を超えます。
    • 計算:

追加出張計算

値の置換

値の置換

  • 木曜日

    • アクティビティは、同じ移動キー内の既存のアクティビティの横または前に計画されます。

  • 金曜日

    • 行に4つのアクティビティに適合するオプションが返されます。

    • 3つのアクティビティが予約される予定です。 この予測により移動効率が向上し、追加移動はバケット移動平均より少なくなります。

    • 計算

金曜日追加移動

  • 土曜日と日曜日

    • 1行に4つのアクティビティに適合するオプションが返されます。これは、この量のアクティビティが許容可能な移動効率を提供するためです。

  • 次の月曜日とそれ以降

    • 少なくとも1つのアクティビティに適合するすべてのオプションが返されます

    • 構成された日付範囲を超える予測は適用されません。

新規オブジェクトを使用したFMRレスポンスの品目部分の例

"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

}

]

}

}

}

]

予約詳細中の予測

「一致するリソースの検索」>「リソースの一致」>「リソースの一致」>「リソース・スケジュールのリスト」>「リソース・スケジュール情報」の下のfindMatchingResourcesレスポンス構造に新しいforecastDuringBookingDetailsオブジェクトが追加されました:

{

"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."

}

}

}

「追加出張」フィールド

「一致するリソースの検索」>「リソースの一致」>「リソースの一致」>「リソース・スケジュールのリスト」>「リソース・スケジュール情報」>「到着時間オプション」>リクエストされたアクティビティを提案された位置で予約するために必要な追加の移動を含むアイテムに、新しいadditionalTravel整数フィールドが追加されました。

到着時間オプション

{

"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."

},

...

}

}

「一致するリソースの検索」>「リソース一致」>「リソース一致」>「リソース・スケジュールのリスト」>「リソース・スケジュール情報」>「到着時間オプション」>「ルート内のアクティビティの次または前が同じ移動キーに属する場合、true」となる新しいtravelKeyMatchブール・フィールドが追加されました。

到着時間オプション

{

"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."

}

}

}

ビジネス上の利点

すべてのフィールド・サービス会社は、コストを合理的なレベルに保ちながら、リソース使用率を最大化するよう努めています。 完全に最適化されたルートを実現するには、真の最適化を先に開始する必要があります - 理想的には予約段階。 この新機能は、findMatchingResources APIによる直接予約アプローチを使用して予約の最適化を実装するためのオプションのセットを提供し、企業がKPI目標を達成するのに役立ちます。

有効化のステップ

Oracle Fusion Field Serviceサブスクリプションに割当ておよび容量管理が含まれている場合は、GUIを使用して機能を有効にできます。それ以外の場合は、findMatchingResource APIを使用します。

GUIによる機能の有効化(すべてのAPIコールのデフォルト)

特定のバケット内のすべてのモバイル就業者に対してUIを介して機能を有効にするには:

  1. モバイル就業者を含むバケットと作成するアクティビティが、指定されたキャパシティ・エリアに追加されていることを確認します。
  2. 「割当」>「構成」ページにナビゲートします。
  3. 「予約」の下の「直接割当を使用」を選択します。
  4. 結果内の追加の移動によってスケジュール・オプションをオーダーする最適化目標として「出張の最適化」を選択します。
  5. 「予約時に予測アクティビティ・フローを使用」を選択します。
  6. 「日数範囲内のアクティビティ・フローの予測」スライダでアクティビティ・フローを予測する範囲を設定します。
  7. 「保存」をクリックします。

APIを使用した機能の有効化(リクエストごとのレベル)

  1. APIリクエストの変更:
    • findMatchingResources APIリクエストで、forecastDuringBookingオブジェクトの下に次のフィールドを含めます:
    • useForecastDuringBooking: true
    • optimizationGoal: minimizeAdditionalTravel
    • 0から31の範囲内の値を持つminForecastRangeDayおよびmaxForecastRangeDay。
  2. 必須レスポンス・フィールドを含める:
    • schedulesToReturnコレクションに、レスポンスの新しいフィールドを取得するためのforecastDuringBookingDetailsオブジェクトが含まれていることを確認します。
    • schedulesToReturnminForecastRangeDayからmaxForecastRangeDayの範囲内の日付をカバーしていることを確認します。

ヒントと考慮事項

  • Oracle Fusion UIベースの有効化には、割当およびキャパシティ管理機能を備えたOracle Fusion Field Serviceサブスクリプションが必要です。 使用できない場合は、APIベースの構成を使用します。
  • 業務上のニーズに基づいて、予測範囲を慎重に選択します。 より広い範囲では最適化が改善されますが、処理時間が長くなる可能性があります。
  • 緊急予約の柔軟性と出張の最小化のバランスを取り、業務の応答性を維持します。