Problems
Problemsエンティティは、配車ルートのProblemsを表しています。 プランと運行管理の 2 つの主要な部分で構成されています。
プラン
プランには、処理するジョブのリスト、これらのジョブと車両の関係のリスト、および類似するジョブをグループ化するための設定を含むオプションのクラスタリングオブジェクトが含まれています。
ジョブ
このエンティティは、基本的に、特定のプロパティを考慮して任意の車両がサービスを提供するジョブを表します。
-
location (必須) : 緯度および経度で表される場所 :
"location": {"lat": 52.5622847, "lng": 13.4023099}
-
duration (必須) : 秒単位の期間 ( サービス時間 ) : 指定した場所での所要時間 :
"duration": 120
-
demand (必須):需要は、体積、質量、サイズなどの多次元の測定単位で表されます。
"demand": [1]
-
times (任意):車両が特定の場所を訪問できる時間帯のリスト。 日付は RFC3339 形式で表されます。
"times": [["2020-07-04T06:00:05.000Z","2020-07-04T12:05:05.000Z"]]
-
skills (任意):ジョブを処理する車両タイプで定義する必要があるスキルのリスト。
"skills": ["fridge"]
-
tag (任意):特定の場所に関連付けられているユーザー定義のタグ。 ソリューション内に伝播されます。 ジョブの場所を区別するために使用します。
"tag": "pickup_1"
-
territoryIds (任意) : 作業場所が属するテリトリ識別子を表します。 これは車両タイプの territories
プロパティと併せて使用され、車両が特定の地域で作業を行うことを制限 / 奨励します。 このプロパティは、複数のタスクがある複雑なジョブには使用できません。
"territoryIds": ["territory1"]
-
priority (任意) : 優先度の高いジョブには 1 、通常のジョブには 2 のジョブの優先度 ( デフォルトは 2) :
"priority": 1
-
customerId (任意) : 顧客の一意の識別子を指定します。 同じ顧客 ID を持つジョブは、可能であれば 1 つ以上のクラスタにグループ化されます。「クラスタ化」を参照してください。
注 : tag
の一部として、機密情報や個人情報を参照しない でください。
tasks
プロパティの指定方法に応じて、ジョブは次の 3 つのタイプのいずれかになります。
- pickup:ルートに沿って何かを集荷し、ルートの最終位置に持って行くためのジョブです。 1 つのジョブタスクを持つ集荷タスクのみが指定されている場合に使用されます。 集荷ジョブの例 :
{
"id": "pickup1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"duration": 180,
"territoryIds": ["territory1"]
}
],
"demand": [1]
}
]
}
}
- delivery : ルートの開始時に積み込まれた荷物を配達するジョブです。1 つの作業場所を持つ配達の場所のみが指定されている場合に使用されます。 配達ジョブの例 :
{
"id": "delivery1",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5252832,
"lng": 13.41884
},
"duration": 180
}
],
"demand": [1]
}
]
}
}
- pickup and delivery ジョブ : 配達ルートで集荷と配達を行うジョブです。 集荷場所と配達場所の両方を指定する場合に使用されます。 ジョブには複数の集荷と配達を設定できます。 すべてまたはいずれのサービスも提供する必要はありません。 また、集荷場所と配達場所に対するリクエストの合計も同じにする必要があります。 その基本的なシナリオとしては、複数の集荷の後に 1 つの配達が続く場合があります。複数の作業場所があるジョブの例 :
{
"id": "myMultiJob",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"duration": 180,
"tag": "p1"
}
],
"demand": [1]
},
{
"places": [
{
"location": {
"lat": 52.5330881,
"lng": 13.3973059
},
"duration": 180,
"tag": "p2"
}
],
"demand": [1]
}
],
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5252832,
"lng": 13.41884
},
"duration": 180,
"tag": "d1"
}
],
"demand": [2]
}
]
}
}
優先度の高いジョブの例 ( すべてのジョブタイプに適用可能 ) :
{
"id": "delivery1",
"priority": 1,
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5252832,
"lng": 13.41884
},
"duration": 180
}
],
"demand": [1]
}
]
}
}
ジョブ数の上限
ジョブの合計量は、ジョブに含まれているすべての集荷と配達の合計として計算されます。
関係
オプションの relations
パラメーターを使用して、ジョブと車両の間のさまざまな関係を定義できます。
type
で指定されているリレーションには、次の 3 つのタイプ があります
- シーケンス: この関連で指定されたジョブの順序は変更されない可能性があり、この特定の車両でサービスを提供する必要があります。 この関係で指定されているジョブの間には、追加のジョブを挿入できません
- 柔軟性 : この関連で指定された作業は、この特定の車両によって提供される必要があります。 この関係で定義されているジョブの順序は変更できません。 この関係または別の関係で指定されていないジョブは、この関連で定義されているジョブの間であっても、この車両のツアーの任意の場所に挿入できます
- tour : この関連で指定された作業は、この特定の車両によって実行される必要があります。 この関係で指定されたジョブの順序を変更してもかまいません。
それぞれの関係は、jobs
プロパティを伴って、特定の車両で実行されるべきアクティビティのリストを指定します。 ジョブには、次の 4 つのタイプがあります。
- JobID:通常のジョブ ID (注意 :
jobId
の一部として、機密情報や個人情報を参照しない でください。) - departure: 出発アクティビティ
- arrival: 到着アクティビティ
- break: 車両の休憩アクティビティ
vehicleId
プロパティは、ジョブを、指定した ID の特定の車両に紐づけるために使用されます。 車両 ID の詳細については、次のセクションを参照してください
車両および作業に関係を使用することで、再計画プロセスのアルゴリズムの動作およびその結果に影響を与えることができます。
{
"relations": [
{
"type": "sequence",
"jobs": ["departure", "job1", "job2"],
"vehicleId": "myVehicleType_1"
}
]
}
sequence
または flexible
リレーションに追加されたジョブは、時間帯、スキル要件、積載量違反、集荷 / 配達の割り当て、経路割り当て可能かなどの、いっさいの制約違反のチェックがされないことに注意してください。これにより、実現不可能な解決策や望ましくない解決策が生じる可能性があります。 sequence
リレーションおよび flexible
リレーションと同様に、 tour
リレーションに追加されたジョブは、一般に制約違反がないかチェックされませんが、tour
リレーションのすべてのジョブが割り当てられない場合があります。 また、複数の集荷または配達を行うジョブでは、関係を使用できません。
クラスタリング
オプションのクラスタリングプロパティを使用すると、類似したジョブを 1 つ以上のジョブクラスタにグループ化して、可能であれば同じ停止位置に割り当てて、一緒に処理することができます。
以下のすべての条件を満たすジョブは、類似していると見なされます。
- 1つの作業場所で行う1つのジョブタスクのみを持つ
- タスクのタイプが
pickup
かまたは delivery
のいずれかで同じ - 場所が同じ
- 時間帯が同じ
- スキルが同じ
- demandの次元が同じです
- テリトリーが同じ
次のプロパティを持つジョブは、クラスタリングでは考慮されません。
- 複数のタスクがあるジョブ
- 複数の作業場所があるジョブ ( 代替場所 )
- 集荷と配達の両方のタスクを持つジョブ
- 優先度プロパティを持つジョブ
- 関連で参照されているジョブ
または、単純に言えば、複数の場所を含むすべてのジョブ、優先度を使用するジョブ、または関係で使用されるジョブは、クラスタリングの候補とは見なされません。
クラスタが一部の制約に違反すると、複数の小さなクラスタに分割されます。 この場合、可能であれば、ジョブの customerId
プロパティを使用して、同じ顧客のジョブを同じクラスタ(もしくはクラスタ群)にグループ化できます。
オプションの clustering
オブジェクトには、次のプロパティがあります。
- serviceTimeStrategy( 必須 ): ジョブクラスタの期間またはサービス時間を制御するために使用されます。
- MaxDurationStrategy : ジョブクラスタの合計時間は、最長のジョブの期間、より正確には、ジョブタスクの場所オブジェクトで定義された期間と同じでなければなりません。
- FixedDurationStrategy : ジョブクラスターの合計期間は、戦略オブジェクトで定義された
duration
値と同じでなければなりません。
{
"clustering": {
"serviceTimeStrategy": {
"type": "fixedDurationStrategy",
"duration": 300
}
}
}
フリート
運行管理は、交通状況の考慮オプションのほかに、車両タイプおよびそのルーティングプロファイルのリストを指定します。
VehicleType
各車両タイプは、次のプロパティによって定義されます。
-
ID:車両タイプの一意の ID 。 解決策では、パターン ${vehicleTypeId}_${sequenceIndex}
を使用して特定の車両 ID を生成するために使用されます。
"id": "myVehicleType"
sequenceIndex
は車両のインデックスです。 たとえば、あるvehicleTypeId
に対し、amount
が2と指定されている場合、指定可能な車両 ID は $ { vehicleTypeId } _1 および $ { vehicleTypeId } _2 です。
注 : 車両Id
の一部として機密情報や個人情報を参照しないでください。
注 :車両のナンバープレート番号のような、実世界のIDを、ルーティングプロファイルの profileName
として割り当てることは避けてください。
- costs: さまざまな車両コストを定義します。
- fixed 車両の使用を開始するための固定費
- distance メートルあたりの距離コスト
- time 1 秒あたりの時間コスト
{
"costs": {
"distance": 0.0002,
"time": 0.004806,
"fixed": 22
}
}
distance
、time
および fixed
の使用は任意で、デフォルト値は0です。 時間と距離のコストが指定されていない場合は、 0.00000000001 という小さな時間コストが代わりに使用されます。 時間コストと距離コストの両方の値をゼロに設定することはできません。
-
shifts: この特定のタイプの車両を開始および終了するデポの場所の配列を指定します。
{
"shifts": [{
"start": {
"time": "2020-07-04T09:00:00Z",
"location": {"lat": 52.46642, "lng": 13.28124}
},
"end": {
"time": "2020-07-04T18:00:00Z",
"location": [52.46642, 13.28124]
},
"breaks": [
{
"times": [["2020-07-04T12:00:05.000Z","2020-07-04T14:05:05.000Z"]],
"location": {"lat": 52.46642, "lng": 13.28124},
"duration": 3600
}
]
}]
}
各場所は time
、およびで指定 location
します。 Start time
最も早い出発時刻、 end time
最も遅い到着時刻を意味します。 オプションのパラメータ breaks
では、配達中の車両休憩のリストを指定します ( 現時点では複数の車両ではありません ) 。 休憩にはオプションの位置指定プロパティがあります。このプロパティを省略すると、最後に配達された作業場所で休憩がとられます。
end location
の指定は任意です。省略すると、車両のルートは最後の作業場所で終了します。
-
積載量: 多次元単位 ( 容積、質量、サイズなど ) で表される車両積載量 :
"capacity": [10]
-
skills: 作業に使用できる車両スキルのリスト
"skills": ["fridge"]
-
limits: 車両タイプに適用される制約を指定します
- maxDistance: 車両の最大距離の制限をメートル単位で指定します
- shiftTime:車両のシフト時間を秒単位で定義します
{
"limits": {
"maxDistance": 30000,
"shiftTime": 28800
}
}
テリトリーのデモを行うシナリオの例については、テリトリーのチュートリアルを参照してください。
ルーティングプロファイル
profiles
コレクション内の要素として、いくつかのルーティングプロファイルが指定されています。 次の 5 つのプロファイルタイプを指定可能です:car
、truck
、scooter
、bicycle
および pedestrian
。 これらのプロファイルタイプには、次の共通のプロパティがあります。
-
name: ルーティングプロファイルの一意の名前。 車両タイプの定義で使用されます "name": "normal_car"
-
type:ルーティングプロファイルタイプを指定します。可能な値は次のとおりです:car
、truck
、scooter
、bicycle
、pedestrian
、"type": "car"
-
departureTime: 車両の出発時間を指定します。 省略すると、同じ車両プロファイルを共有するすべての車両タイプの最も早いシフト開始時間が使用されます。
-
avoid: 回避するルーティング機能のリストを指定します。 このプロパティは、問題で定義されているすべての場所の最小境界円の半径が 190 km 以下の場合にのみ使用できます
-
exclude: ツアーの計画から除外する国を指定します。 国コードは、 ISO 3166-1 alpha-3 形式で提供する必要があります。 このような除外の結果を意味のあるものにするには、最終的にすべての場所の最小境界円の半径を増やす必要があります。 この機能を使用する場合、問題で定義されているすべての場所の最小境界円の半径が 190 km を超えてはなりません。超えると、検証エラーが返されます。
{
"exclude": {
"countries": [
"AUT",
"CHE"
]
}
}
車両プロファイル
現在、車両プロファイルには追加のプロパティがありません。
トラックプロファイル
トラックの制限は、problemsリクエストのトラックプロファイルの options
フィールドを使用して定義されます。
このオプションshippedHazardousGoods
では、爆発物、ガス、水に有害な物質など、トラックによって出荷される危険物質のリストを設定します。 すべてのオプションのリストについては 、『 API リファレンス』を参照してください。
その他のオプションでは、トラックの物理的な特性(重量制限、車軸重量、車高、車幅、車長)について説明します。 tunnel category オプションを使用すると、ルートがより制約の少ないカテゴリのトンネルのみを通過するように制限されます。
スクータープロファイル
スクーターオプション allowHighway
は、problemsリクエストのスクータープロファイルの options
フィールドを使用して定義できます。 allowHighway
は、ルート探索の計算で高速道路を考慮するかどうかを指定します。 このパラメータが指定されていない場合、デフォルトでは高速道路は使用されません。 フィーチャーの回避 motorway
が提供されている場合は、allowHighway
が true
に設定されている場合でも、高速道路は回避されます。
scooter
プロファイルは、problemsで定義されているすべての場所の最小境界円の半径が 190km 以下の場合にのみサポートされます。
自転車プロファイル
現在、自転車プロファイルには追加のプロパティがありません。
歩行者プロファイル
現時点では、歩行者プロファイルには追加のプロパティはありません。
Traffic
traffic
この設定では、ルーティングで考慮するトラフィック情報の種類を設定します。
-
liveOrHistorical
: 将来の出発時間については、将来の出発時間がどれだけ先かによって、ライブまたは履歴のトラフィックデータが適用されます。 過去の出発時間には、過去の交通データのみが適用されます。 車両タイプの出発時間は、車両プロファイルの任意の departureTime プロパティを使用して設定できます。 車両プロファイルの定義時にこのプロパティが省略された場合、同じ車両プロファイルを共有するすべての車両タイプの最も早いシフト開始時間が、そのプロファイルの出発時間として使用されます。 すべての場所が半径 190 km 以内にあり、可能な限りリアルタイムの交通データを使用する場合は、この設定を選択します。 -
historicalOnly
: 過去のトラフィックデータに基づいたフリーフロー速度のみが適用されます。 ライブトラフィックのデータ使用量を回避する場合は、この設定を選択します。 -
automatic
: すべての座標が半径 190 km 以内の場合、liveOrHistorical
と同じで、そうでなければ historicalOnly
と同じです。最適なオプションをサービスが自動的に決定するようにする場合は、この設定を選択します。
デフォルト値は automatic
です 。
Configuration
設定を使用 して、アルゴリズムのデフォルトの動作を調整できます。この ドキュメント を参照してください。 次の例では、ソルバはproblemsを解決するのに最大 2 秒 (maxTime) を費やし、 その 2 秒のうち 1 秒間(stagnationTime)、解決策を十分に改善しない期間がある場合、アルゴリズムは終了します。
例
Problemsの例:
{
"plan": {
"jobs": [
{
"id": "myJob",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {"lat": 52.46642, "lng": 13.28124},
"times": [["2020-07-04T10:00:00.000Z","2020-07-04T12:00:00.000Z"]],
"duration": 180
}
],
"demand": [1]
}
]
}
}
]
},
"fleet": {
"types": [
{
"id": "myVehicleType",
"profile": "normal_car",
"costs": {
"distance": 0.0002,
"time": 0.005,
"fixed": 22
},
"shifts": [{
"start": {
"time": "2020-07-04T09:00:00Z",
"location": {"lat": 52.52568, "lng": 13.45345}
},
"end": {
"time": "2020-07-04T18:00:00Z",
"location": {"lat": 52.52568, "lng": 13.45345}
}
}],
"limits": {
"maxDistance": 300000,
"shiftTime": 28800
},
"capacity": [10],
"amount": 1
}
],
"profiles": [{
"name": "normal_car",
"type": "car",
"departureTime": "2020-07-04T09:15:00Z"
}]
},
"configuration": {
"termination": {
"maxTime": 2,
"stagnationTime": 1
}
}
}