ツアーごとの超過コストを計算する
効率的な物流業務を実現するには、業務コストの管理が必要不可欠です。一部のシナリオでは、車両の運行管理に関連する追加コストが発生することがあります。たとえば、ツアー中に車両が契約で指定された最大数よりも多くの停車地に止まる場合、車両に設定された制限を超えた停車地ごとに追加の支払いが発生することがあります。
こうした超過費用や超過費用の計算手段の欠如は、収益性や競争力に悪影響を与える可能性があるため、このことからも効果的なコスト管理がいかに重要かがわかります。HERE Tour Planning APIは、excessCosts機能を通じて、コストに影響を与える可能性のある主要な領域 (停止回数、ツアーの所要時間、待ち時間、距離) を最適化することで、超過コストの管理をサポートします。
注
- これはベータ機能であり、開発の最終段階にあります。ベータ機能には後方互換性があり、削除されることはありません。重大なバグはないものの、カバレージ、品質、パフォーマンス、テストカバレージは最終的なものではありません。このような制約と動作が改善される可能性に同意された場合、アプリケーションでベータ機能を安全にご利用いただけます。
- この機能を有効にするには、問題仕様で
excessCostsをexperimentalFeatures配列に追加します。
超過コスト機能の概要
超過コスト機能は、商品の集荷または配達の時間枠にソフトリミットを課すソフト時間枠と同様に機能します。時間枠に違反すると抽象的なペナルティが適用され、ペナルティを最小限に抑えるソリューションを見つけるよう最適化アルゴリズムに促します。超過コスト機能は同じ原則に従いますが、コストの最適化に重点を置いた旅程計画エリアに適用されます。このケースでは、ツアーの距離、ツアーの所要時間、ツアー中の停車地の数、車両の累積待ち時間など、超過コストを最小限に抑えるために必要な1つまたは複数のカテゴリーに特定のソフトリミットを課すことができます。
車両がこれらの制限のいずれかを超えると、1回限りの固定費ペナルティを発生させ、該当する測定単位でステップ間隔を定義できます。たとえば、1時間の制限を超えて開始された10分ごとに、車両に特定のコストペナルティが適用されます。その結果、最適化アルゴリズムは、主にペナルティなしでソリューションの提供を試みます。ただし、問題のJSONで指定されているツアーの制約 (利用可能な車両の数や止まる停車地の数など) を考慮すると、ある程度の追加費用は避けられない場合があります。
超過コストを定義する
問題のJSONファイルのcostsオブジェクト内では、excessCostsオブジェクトに次のオブジェクトを含めることができます。各オブジェクトは最小限に抑える超過コストのカテゴリーを表しています。
distance:追加コストが発生するまでの車両の最大走行距離を指定します。duration:追加コストを発生させずに車両を走行できる最大所要時間を定義します。stops:ツアー中に追加コストを発生させずに車両が停車できる最大停車地数を表します。waitingTime:ツアー中に車両に許可される最大累積待ち時間を定義します。車両がコストペナルティを発生させずに待機できる時間を示します。
必要に応じて、任意の数の超過コストタイプを指定できます。excessCosts内の各オブジェクトでは、次のプロパティを通じて、それぞれの制限を超えた場合に関連付けられたコストペナルティを指定します。
-
limit:ソリューションが超えてはならない最大値です。この制限を超えると、ソリューションのコストにペナルティが追加されます。 -
fixedCost:制限を超過した場合に発生する固定費ペナルティです。このコストは一度だけ発生します。 -
stepSize:1つのペナルティ単位に対応する固定超過金額です。ペナルティは次のように計算されます。ペナルティ=(excess / step_size)
たとえば、ステップサイズ=
12、超過=14の場合、ペナルティ=2になります。注
As the previous example demonstrates, any fraction of a step still counts as a full penalty.
-
stepCost:超過のステップあたりのコスト。
ヒント
このモデルを使用すると、さまざまなユースケースに対応できます。たとえば、
fixedCost("fixedCost": 0) を指定せず、stepSizeとstepCostのみを設定できます。逆に、コストペナルティをfixedCostのみで構成し、stepSizeとstepCostの両方を0に設定することもできます。
excessCost機能の詳細と、使用可能な超過コストタイプの計算でサポートされている測定単位については、APIリファレンスを参照してください。
例:ツアーの所要時間
次のスニペットは、車両のツアーの所要時間にソフト制限を設定し、この制限を超えた場合のコストペナルティを定義するサンプルexcessCostオブジェクトを示しています。
"excessCosts": {
"duration": {
"limit": 28800,
"fixedCost": 200,
"stepSize": 3600,
"stepCost": 100,
}
}この例の内容は以下のとおりです。
limit値は8時間 (28800秒に相当) のソフト所要時間制限を表しています。fixedCost値は、ツアー中に車両が8時間を超えて移動すると、200の1回限りのコストペナルティが発生することを示しています。stepSize値は、limitを過ぎてから1時間 (3600秒) ごとに、stepCost値によって決定される追加コストが車両に発生することを指定します。stepCost値はステップあたりの増分コストを表しています。これはペナルティが発生するたびにトリガーされ、1時間 (または3600秒) ごとに100ずつ増加します。
次の図は、前の例で指定したexcessCosts構成を使用して、車両のツアーが所要時間制限を超えた場合のサンプルユースケースに基づいて計算された超過コストを示しています。
注
前の例で示したように、ステップの所要時間に関係なく、超過の各ステップの開始時に
stepCostのペナルティが適用されます。
超過コストを管理する
この例では、完全な問題のJSONにおけるexcessCosts機能の使用方法を示しており、この機能によってツアーの所要時間が最適化され、業務コストが削減される仕組みをわかりやすく説明しています。以降のセクションでは、同じコア問題構成を共有する2つのソリューションを比較しています。主な違いはexcessCosts機能の有無です。
開始問題 - 超過コストの計算なし
開始問題ではexcessCosts機能が利用されません。このシナリオでは、5台の車両が8時間以内に49のジョブを完了するよう割り当てられています。
ツアー内の潜在的な追加コストを計算するためのexcessCosts機能がないため、厳格な経費管理策の一環として、車両は8時間のハードシフト制限によって制約を受けます。このデモでは、各車両の運行に関連する固定費は600に設定されており、時間と距離のコストは0.0001で最小化されます。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"profile": "car",
"amount": 5,
"capacity": [
50
],
"costs": {
"time": 0.0001,
"distance": 0.0001,
"fixed": 600
},
"id": "vehicle_1",
"shifts": [
{
"start": {
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": "2024-06-24T08:00:00+02:00"
},
"end": {
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": "2024-06-24T16:00:00+02:00"
}
}
]
}
],
"profiles": [
{
"name": "car",
"type": "car"
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679571
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.45810373923444,
"lng": 13.331808942475499
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879769
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671735
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.580380893737356,
"lng": 13.304479222218161
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.444597854004236,
"lng": 13.42729037972278
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_16",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_17",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_18",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_19",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_20",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_21",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_22",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_23",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_24",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_25",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_26",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_27",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_28",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4745,
"lng": 13.42
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_29",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_30",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_31",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_32",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681837
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_33",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_34",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_35",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.482203294624796,
"lng": 13.391214601891551
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_36",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_37",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_38",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_39",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_40",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_41",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_42",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_43",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.459450803409204,
"lng": 13.396015195980405
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_44",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_45",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_46",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_47",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_48",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_49",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
}
]
},
"objectives": [
{
"type": "minimizeUnassigned"
},
{
"type": "minimizeCost"
}
]
}ソリューション
問題の制約を考慮すると、最も効率的なソリューションは2つのツアーで構成され、それぞれが8時間のシフト制約に適合します。両方の車両を合わせたツアーコストは1223です。ツアーのハイライトについては、次の図を参照してください。
次のセクションでは、前述の問題の完全なソリューションをJSON形式で示しています。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 1222.7158,
"distance": 189478,
"duration": 37680,
"times": {
"driving": 22980,
"serving": 14700,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "vehicle_1_3",
"typeId": "vehicle_1",
"stops": [
{
"time": {
"arrival": "2024-06-24T06:00:00Z",
"departure": "2024-06-24T06:00:00Z"
},
"load": [
34
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T06:00:00Z",
"end": "2024-06-24T06:00:00Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 0
},
{
"time": {
"arrival": "2024-06-24T06:01:15Z",
"departure": "2024-06-24T06:06:15Z"
},
"load": [
33
],
"activities": [
{
"jobId": "Job_24",
"type": "delivery",
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"time": {
"start": "2024-06-24T06:01:15Z",
"end": "2024-06-24T06:06:15Z"
}
}
],
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"distance": 485
},
{
"time": {
"arrival": "2024-06-24T06:12:08Z",
"departure": "2024-06-24T06:17:08Z"
},
"load": [
32
],
"activities": [
{
"jobId": "Job_41",
"type": "delivery",
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"time": {
"start": "2024-06-24T06:12:08Z",
"end": "2024-06-24T06:17:08Z"
}
}
],
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"distance": 2709
},
{
"time": {
"arrival": "2024-06-24T06:24:11Z",
"departure": "2024-06-24T06:29:11Z"
},
"load": [
31
],
"activities": [
{
"jobId": "Job_3",
"type": "delivery",
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679573
},
"time": {
"start": "2024-06-24T06:24:11Z",
"end": "2024-06-24T06:29:11Z"
}
}
],
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679573
},
"distance": 6478
},
{
"time": {
"arrival": "2024-06-24T06:34:20Z",
"departure": "2024-06-24T06:39:20Z"
},
"load": [
30
],
"activities": [
{
"jobId": "Job_16",
"type": "delivery",
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"time": {
"start": "2024-06-24T06:34:20Z",
"end": "2024-06-24T06:39:20Z"
}
}
],
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"distance": 8769
},
{
"time": {
"arrival": "2024-06-24T06:43:27Z",
"departure": "2024-06-24T06:48:27Z"
},
"load": [
29
],
"activities": [
{
"jobId": "Job_38",
"type": "delivery",
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"time": {
"start": "2024-06-24T06:43:27Z",
"end": "2024-06-24T06:48:27Z"
}
}
],
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"distance": 10209
},
{
"time": {
"arrival": "2024-06-24T06:56:00Z",
"departure": "2024-06-24T07:01:00Z"
},
"load": [
28
],
"activities": [
{
"jobId": "Job_21",
"type": "delivery",
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"time": {
"start": "2024-06-24T06:56:00Z",
"end": "2024-06-24T07:01:00Z"
}
}
],
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"distance": 14694
},
{
"time": {
"arrival": "2024-06-24T07:08:27Z",
"departure": "2024-06-24T07:13:27Z"
},
"load": [
27
],
"activities": [
{
"jobId": "Job_27",
"type": "delivery",
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"time": {
"start": "2024-06-24T07:08:27Z",
"end": "2024-06-24T07:13:27Z"
}
}
],
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"distance": 18078
},
{
"time": {
"arrival": "2024-06-24T07:17:28Z",
"departure": "2024-06-24T07:22:28Z"
},
"load": [
26
],
"activities": [
{
"jobId": "Job_45",
"type": "delivery",
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"time": {
"start": "2024-06-24T07:17:28Z",
"end": "2024-06-24T07:22:28Z"
}
}
],
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"distance": 19290
},
{
"time": {
"arrival": "2024-06-24T07:26:39Z",
"departure": "2024-06-24T07:31:39Z"
},
"load": [
25
],
"activities": [
{
"jobId": "Job_34",
"type": "delivery",
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"time": {
"start": "2024-06-24T07:26:39Z",
"end": "2024-06-24T07:31:39Z"
}
}
],
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"distance": 20440
},
{
"time": {
"arrival": "2024-06-24T07:36:02Z",
"departure": "2024-06-24T07:41:02Z"
},
"load": [
24
],
"activities": [
{
"jobId": "Job_35",
"type": "delivery",
"location": {
"lat": 52.4822032946248,
"lng": 13.391214601891551
},
"time": {
"start": "2024-06-24T07:36:02Z",
"end": "2024-06-24T07:41:02Z"
}
}
],
"location": {
"lat": 52.4822032946248,
"lng": 13.391214601891551
},
"distance": 22068
},
{
"time": {
"arrival": "2024-06-24T07:48:22Z",
"departure": "2024-06-24T07:53:22Z"
},
"load": [
23
],
"activities": [
{
"jobId": "Job_28",
"type": "delivery",
"location": {
"lat": 52.4745,
"lng": 13.42
},
"time": {
"start": "2024-06-24T07:48:22Z",
"end": "2024-06-24T07:53:22Z"
}
}
],
"location": {
"lat": 52.4745,
"lng": 13.42
},
"distance": 25275
},
{
"time": {
"arrival": "2024-06-24T08:02:07Z",
"departure": "2024-06-24T08:07:07Z"
},
"load": [
22
],
"activities": [
{
"jobId": "Job_4",
"type": "delivery",
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"time": {
"start": "2024-06-24T08:02:07Z",
"end": "2024-06-24T08:07:07Z"
}
}
],
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"distance": 29437
},
{
"time": {
"arrival": "2024-06-24T08:09:15Z",
"departure": "2024-06-24T08:14:15Z"
},
"load": [
21
],
"activities": [
{
"jobId": "Job_43",
"type": "delivery",
"location": {
"lat": 52.4594508034092,
"lng": 13.396015195980404
},
"time": {
"start": "2024-06-24T08:09:15Z",
"end": "2024-06-24T08:14:15Z"
}
}
],
"location": {
"lat": 52.4594508034092,
"lng": 13.396015195980404
},
"distance": 30339
},
{
"time": {
"arrival": "2024-06-24T08:24:05Z",
"departure": "2024-06-24T08:29:05Z"
},
"load": [
20
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery",
"location": {
"lat": 52.45810373923444,
"lng": 13.3318089424755
},
"time": {
"start": "2024-06-24T08:24:05Z",
"end": "2024-06-24T08:29:05Z"
}
}
],
"location": {
"lat": 52.45810373923444,
"lng": 13.3318089424755
},
"distance": 35443
},
{
"time": {
"arrival": "2024-06-24T08:32:20Z",
"departure": "2024-06-24T08:37:20Z"
},
"load": [
19
],
"activities": [
{
"jobId": "Job_11",
"type": "delivery",
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671736
},
"time": {
"start": "2024-06-24T08:32:20Z",
"end": "2024-06-24T08:37:20Z"
}
}
],
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671736
},
"distance": 37037
},
{
"time": {
"arrival": "2024-06-24T08:45:57Z",
"departure": "2024-06-24T08:50:57Z"
},
"load": [
18
],
"activities": [
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"time": {
"start": "2024-06-24T08:45:57Z",
"end": "2024-06-24T08:50:57Z"
}
}
],
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"distance": 41040
},
{
"time": {
"arrival": "2024-06-24T08:58:42Z",
"departure": "2024-06-24T09:03:42Z"
},
"load": [
17
],
"activities": [
{
"jobId": "Job_12",
"type": "delivery",
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"time": {
"start": "2024-06-24T08:58:42Z",
"end": "2024-06-24T09:03:42Z"
}
}
],
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"distance": 45325
},
{
"time": {
"arrival": "2024-06-24T09:12:46Z",
"departure": "2024-06-24T09:17:46Z"
},
"load": [
16
],
"activities": [
{
"jobId": "Job_15",
"type": "delivery",
"location": {
"lat": 52.44459785400424,
"lng": 13.42729037972278
},
"time": {
"start": "2024-06-24T09:12:46Z",
"end": "2024-06-24T09:17:46Z"
}
}
],
"location": {
"lat": 52.44459785400424,
"lng": 13.42729037972278
},
"distance": 50346
},
{
"time": {
"arrival": "2024-06-24T09:25:44Z",
"departure": "2024-06-24T09:30:44Z"
},
"load": [
15
],
"activities": [
{
"jobId": "Job_23",
"type": "delivery",
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"time": {
"start": "2024-06-24T09:25:44Z",
"end": "2024-06-24T09:30:44Z"
}
}
],
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"distance": 54657
},
{
"time": {
"arrival": "2024-06-24T09:43:15Z",
"departure": "2024-06-24T09:48:15Z"
},
"load": [
14
],
"activities": [
{
"jobId": "Job_37",
"type": "delivery",
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"time": {
"start": "2024-06-24T09:43:15Z",
"end": "2024-06-24T09:48:15Z"
}
}
],
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"distance": 62938
},
{
"time": {
"arrival": "2024-06-24T09:54:21Z",
"departure": "2024-06-24T09:59:21Z"
},
"load": [
13
],
"activities": [
{
"jobId": "Job_9",
"type": "delivery",
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"time": {
"start": "2024-06-24T09:54:21Z",
"end": "2024-06-24T09:59:21Z"
}
}
],
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"distance": 65650
},
{
"time": {
"arrival": "2024-06-24T10:09:34Z",
"departure": "2024-06-24T10:14:34Z"
},
"load": [
12
],
"activities": [
{
"jobId": "Job_13",
"type": "delivery",
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"time": {
"start": "2024-06-24T10:09:34Z",
"end": "2024-06-24T10:14:34Z"
}
}
],
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"distance": 67777
},
{
"time": {
"arrival": "2024-06-24T10:29:09Z",
"departure": "2024-06-24T10:34:09Z"
},
"load": [
11
],
"activities": [
{
"jobId": "Job_22",
"type": "delivery",
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"time": {
"start": "2024-06-24T10:29:09Z",
"end": "2024-06-24T10:34:09Z"
}
}
],
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"distance": 72430
},
{
"time": {
"arrival": "2024-06-24T10:40:58Z",
"departure": "2024-06-24T10:45:58Z"
},
"load": [
10
],
"activities": [
{
"jobId": "Job_31",
"type": "delivery",
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"time": {
"start": "2024-06-24T10:40:58Z",
"end": "2024-06-24T10:45:58Z"
}
}
],
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"distance": 74931
},
{
"time": {
"arrival": "2024-06-24T10:50:51Z",
"departure": "2024-06-24T10:55:51Z"
},
"load": [
9
],
"activities": [
{
"jobId": "Job_17",
"type": "delivery",
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"time": {
"start": "2024-06-24T10:50:51Z",
"end": "2024-06-24T10:55:51Z"
}
}
],
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"distance": 76296
},
{
"time": {
"arrival": "2024-06-24T11:09:46Z",
"departure": "2024-06-24T11:14:46Z"
},
"load": [
8
],
"activities": [
{
"jobId": "Job_44",
"type": "delivery",
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"time": {
"start": "2024-06-24T11:09:46Z",
"end": "2024-06-24T11:14:46Z"
}
}
],
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"distance": 84434
},
{
"time": {
"arrival": "2024-06-24T11:18:57Z",
"departure": "2024-06-24T11:23:57Z"
},
"load": [
7
],
"activities": [
{
"jobId": "Job_33",
"type": "delivery",
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"time": {
"start": "2024-06-24T11:18:57Z",
"end": "2024-06-24T11:23:57Z"
}
}
],
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"distance": 86442
},
{
"time": {
"arrival": "2024-06-24T11:30:29Z",
"departure": "2024-06-24T11:35:29Z"
},
"load": [
6
],
"activities": [
{
"jobId": "Job_48",
"type": "delivery",
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"time": {
"start": "2024-06-24T11:30:29Z",
"end": "2024-06-24T11:35:29Z"
}
}
],
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"distance": 90439
},
{
"time": {
"arrival": "2024-06-24T11:43:20Z",
"departure": "2024-06-24T11:48:20Z"
},
"load": [
5
],
"activities": [
{
"jobId": "Job_32",
"type": "delivery",
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681835
},
"time": {
"start": "2024-06-24T11:43:20Z",
"end": "2024-06-24T11:48:20Z"
}
}
],
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681835
},
"distance": 96104
},
{
"time": {
"arrival": "2024-06-24T12:01:15Z",
"departure": "2024-06-24T12:06:15Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_42",
"type": "delivery",
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"time": {
"start": "2024-06-24T12:01:15Z",
"end": "2024-06-24T12:06:15Z"
}
}
],
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"distance": 104935
},
{
"time": {
"arrival": "2024-06-24T12:10:25Z",
"departure": "2024-06-24T12:15:25Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_25",
"type": "delivery",
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"time": {
"start": "2024-06-24T12:10:25Z",
"end": "2024-06-24T12:15:25Z"
}
}
],
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"distance": 106494
},
{
"time": {
"arrival": "2024-06-24T12:24:22Z",
"departure": "2024-06-24T12:29:22Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_36",
"type": "delivery",
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"time": {
"start": "2024-06-24T12:24:22Z",
"end": "2024-06-24T12:29:22Z"
}
}
],
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"distance": 111730
},
{
"time": {
"arrival": "2024-06-24T12:34:40Z",
"departure": "2024-06-24T12:39:40Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_49",
"type": "delivery",
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"time": {
"start": "2024-06-24T12:34:40Z",
"end": "2024-06-24T12:39:40Z"
}
}
],
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"distance": 114574
},
{
"time": {
"arrival": "2024-06-24T12:51:52Z",
"departure": "2024-06-24T12:56:52Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_46",
"type": "delivery",
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"time": {
"start": "2024-06-24T12:51:52Z",
"end": "2024-06-24T12:56:52Z"
}
}
],
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"distance": 121663
},
{
"time": {
"arrival": "2024-06-24T13:05:35Z",
"departure": "2024-06-24T13:05:35Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T13:05:35Z",
"end": "2024-06-24T13:05:35Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 126208
}
],
"statistic": {
"cost": 615.1743,
"distance": 126208,
"duration": 25535,
"times": {
"driving": 15335,
"serving": 10200,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "vehicle_1_5",
"typeId": "vehicle_1",
"stops": [
{
"time": {
"arrival": "2024-06-24T06:00:00Z",
"departure": "2024-06-24T06:00:00Z"
},
"load": [
15
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T06:00:00Z",
"end": "2024-06-24T06:00:00Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 0
},
{
"time": {
"arrival": "2024-06-24T06:02:25Z",
"departure": "2024-06-24T06:07:25Z"
},
"load": [
14
],
"activities": [
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879767
},
"time": {
"start": "2024-06-24T06:02:25Z",
"end": "2024-06-24T06:07:25Z"
}
}
],
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879767
},
"distance": 1079
},
{
"time": {
"arrival": "2024-06-24T06:25:25Z",
"departure": "2024-06-24T06:30:25Z"
},
"load": [
13
],
"activities": [
{
"jobId": "Job_29",
"type": "delivery",
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"time": {
"start": "2024-06-24T06:25:25Z",
"end": "2024-06-24T06:30:25Z"
}
}
],
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"distance": 9138
},
{
"time": {
"arrival": "2024-06-24T06:47:18Z",
"departure": "2024-06-24T06:52:18Z"
},
"load": [
12
],
"activities": [
{
"jobId": "Job_2",
"type": "delivery",
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"time": {
"start": "2024-06-24T06:47:18Z",
"end": "2024-06-24T06:52:18Z"
}
}
],
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"distance": 16973
},
{
"time": {
"arrival": "2024-06-24T06:59:58Z",
"departure": "2024-06-24T07:04:58Z"
},
"load": [
11
],
"activities": [
{
"jobId": "Job_18",
"type": "delivery",
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"time": {
"start": "2024-06-24T06:59:58Z",
"end": "2024-06-24T07:04:58Z"
}
}
],
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"distance": 19755
},
{
"time": {
"arrival": "2024-06-24T07:07:52Z",
"departure": "2024-06-24T07:12:52Z"
},
"load": [
10
],
"activities": [
{
"jobId": "Job_5",
"type": "delivery",
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"time": {
"start": "2024-06-24T07:07:52Z",
"end": "2024-06-24T07:12:52Z"
}
}
],
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"distance": 20807
},
{
"time": {
"arrival": "2024-06-24T07:22:02Z",
"departure": "2024-06-24T07:27:02Z"
},
"load": [
9
],
"activities": [
{
"jobId": "Job_40",
"type": "delivery",
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"time": {
"start": "2024-06-24T07:22:02Z",
"end": "2024-06-24T07:27:02Z"
}
}
],
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"distance": 25810
},
{
"time": {
"arrival": "2024-06-24T07:32:03Z",
"departure": "2024-06-24T07:37:03Z"
},
"load": [
8
],
"activities": [
{
"jobId": "Job_19",
"type": "delivery",
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"time": {
"start": "2024-06-24T07:32:03Z",
"end": "2024-06-24T07:37:03Z"
}
}
],
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"distance": 28530
},
{
"time": {
"arrival": "2024-06-24T07:43:41Z",
"departure": "2024-06-24T07:48:41Z"
},
"load": [
7
],
"activities": [
{
"jobId": "Job_1",
"type": "delivery",
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"time": {
"start": "2024-06-24T07:43:41Z",
"end": "2024-06-24T07:48:41Z"
}
}
],
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"distance": 33402
},
{
"time": {
"arrival": "2024-06-24T07:54:51Z",
"departure": "2024-06-24T07:59:51Z"
},
"load": [
6
],
"activities": [
{
"jobId": "Job_20",
"type": "delivery",
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"time": {
"start": "2024-06-24T07:54:51Z",
"end": "2024-06-24T07:59:51Z"
}
}
],
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"distance": 36663
},
{
"time": {
"arrival": "2024-06-24T08:08:12Z",
"departure": "2024-06-24T08:13:12Z"
},
"load": [
5
],
"activities": [
{
"jobId": "Job_39",
"type": "delivery",
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"time": {
"start": "2024-06-24T08:08:12Z",
"end": "2024-06-24T08:13:12Z"
}
}
],
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"distance": 41036
},
{
"time": {
"arrival": "2024-06-24T08:18:39Z",
"departure": "2024-06-24T08:23:39Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_30",
"type": "delivery",
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"time": {
"start": "2024-06-24T08:18:39Z",
"end": "2024-06-24T08:23:39Z"
}
}
],
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"distance": 43822
},
{
"time": {
"arrival": "2024-06-24T08:29:21Z",
"departure": "2024-06-24T08:34:21Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_47",
"type": "delivery",
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"time": {
"start": "2024-06-24T08:29:21Z",
"end": "2024-06-24T08:34:21Z"
}
}
],
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"distance": 46074
},
{
"time": {
"arrival": "2024-06-24T08:44:06Z",
"departure": "2024-06-24T08:49:06Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_14",
"type": "delivery",
"location": {
"lat": 52.58038089373736,
"lng": 13.30447922221816
},
"time": {
"start": "2024-06-24T08:44:06Z",
"end": "2024-06-24T08:49:06Z"
}
}
],
"location": {
"lat": 52.58038089373736,
"lng": 13.30447922221816
},
"distance": 50689
},
{
"time": {
"arrival": "2024-06-24T09:01:34Z",
"departure": "2024-06-24T09:06:34Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_26",
"type": "delivery",
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"time": {
"start": "2024-06-24T09:01:34Z",
"end": "2024-06-24T09:06:34Z"
}
}
],
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"distance": 58307
},
{
"time": {
"arrival": "2024-06-24T09:10:48Z",
"departure": "2024-06-24T09:15:48Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery",
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"time": {
"start": "2024-06-24T09:10:48Z",
"end": "2024-06-24T09:15:48Z"
}
}
],
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"distance": 60132
},
{
"time": {
"arrival": "2024-06-24T09:22:25Z",
"departure": "2024-06-24T09:22:25Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T09:22:25Z",
"end": "2024-06-24T09:22:25Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 63270
}
],
"statistic": {
"cost": 607.5415,
"distance": 63270,
"duration": 12145,
"times": {
"driving": 7645,
"serving": 4500,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}超過コストの計算を追加する
次のコードスニペットに示すように、このシナリオではexcessCosts機能を利用して、車両が8時間以上運転された場合にコストペナルティを導入することで、先ほど説明した問題を拡張します。
"excessCosts": {
"duration": {
"limit": 28800,
"fixedCost": 0,
"stepCost": 100,
"stepSize": 3600
}
}前のスニペットによれば、8時間のソフト制限を超えてから1時間ごとに、車両には追加コストとして100が発生しますが、追加の1回限りの固定ペナルティはありません。
さらに、次の問題仕様では、シフト時間を12時間に延長することで超過所要時間コストを計算できる機能を利用しています。これにより、特定のケースで過剰なコストペナルティを発生させる必要がある場合でも、最適化アルゴリズムで最も効率的なツアーソリューションを見つけることができます。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"profile": "car",
"amount": 5,
"capacity": [
50
],
"costs": {
"time": 0.0001,
"distance": 0.0001,
"fixed": 600,
"excessCosts": {
"duration": {
"limit": 28800,
"fixedCost": 0,
"stepCost": 100,
"stepSize": 3600
}
}
},
"id": "vehicle_1",
"shifts": [
{
"start": {
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": "2024-06-24T08:00:00+02:00"
},
"end": {
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": "2024-06-24T20:00:00+02:00"
}
}
]
}
],
"profiles": [
{
"name": "car",
"type": "car"
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679571
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.45810373923444,
"lng": 13.331808942475499
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879769
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671735
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.580380893737356,
"lng": 13.304479222218161
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.444597854004236,
"lng": 13.42729037972278
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_16",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_17",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_18",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_19",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_20",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_21",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_22",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_23",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_24",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_25",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_26",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_27",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_28",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4745,
"lng": 13.42
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_29",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_30",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_31",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_32",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681837
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_33",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_34",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_35",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.482203294624796,
"lng": 13.391214601891551
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_36",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_37",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_38",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_39",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_40",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_41",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_42",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_43",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.459450803409204,
"lng": 13.396015195980405
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_44",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_45",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_46",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_47",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_48",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_49",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
}
]
},
"objectives": [
{
"type": "minimizeUnassigned"
},
{
"type": "minimizeCost"
}
],
"configuration": {
"experimentalFeatures": [
"excessCosts"
]
}
}ソリューション
次の図はソリューションの概要を視覚的に示したものです。
ビジュアル概要に示されているように、このソリューションはいくつかの重要な点が前のソリューションとは異なります。具体的には、ツアーの数が1つのインスタンスに削減されました。さらに、ツアーに参加した車両は8時間の制限を2時間10分超過したため、ツアーで追加コストとして300が発生しました。最も重要な点は、ツアーの総コストが922だったことです。これは前述のソリューション (1223) と比較して大幅な削減 (24.7%) を示しています。
次のセクションに参照用の完全なソリューションJSONを示します。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 921.6154,
"distance": 179553,
"duration": 36601,
"times": {
"driving": 21901,
"serving": 14700,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "vehicle_1_3",
"typeId": "vehicle_1",
"stops": [
{
"time": {
"arrival": "2024-06-24T06:00:00Z",
"departure": "2024-06-24T06:00:00Z"
},
"load": [
49
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T06:00:00Z",
"end": "2024-06-24T06:00:00Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 0
},
{
"time": {
"arrival": "2024-06-24T06:01:15Z",
"departure": "2024-06-24T06:06:15Z"
},
"load": [
48
],
"activities": [
{
"jobId": "Job_24",
"type": "delivery",
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"time": {
"start": "2024-06-24T06:01:15Z",
"end": "2024-06-24T06:06:15Z"
}
}
],
"location": {
"lat": 52.5293,
"lng": 13.38507204916371
},
"distance": 485
},
{
"time": {
"arrival": "2024-06-24T06:09:44Z",
"departure": "2024-06-24T06:14:44Z"
},
"load": [
47
],
"activities": [
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879767
},
"time": {
"start": "2024-06-24T06:09:44Z",
"end": "2024-06-24T06:14:44Z"
}
}
],
"location": {
"lat": 52.53213114000045,
"lng": 13.373517153879767
},
"distance": 1679
},
{
"time": {
"arrival": "2024-06-24T06:20:38Z",
"departure": "2024-06-24T06:25:38Z"
},
"load": [
46
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery",
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"time": {
"start": "2024-06-24T06:20:38Z",
"end": "2024-06-24T06:25:38Z"
}
}
],
"location": {
"lat": 52.5313,
"lng": 13.35356
},
"distance": 4551
},
{
"time": {
"arrival": "2024-06-24T06:29:53Z",
"departure": "2024-06-24T06:34:53Z"
},
"load": [
45
],
"activities": [
{
"jobId": "Job_26",
"type": "delivery",
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"time": {
"start": "2024-06-24T06:29:53Z",
"end": "2024-06-24T06:34:53Z"
}
}
],
"location": {
"lat": 52.53754,
"lng": 13.34152
},
"distance": 6353
},
{
"time": {
"arrival": "2024-06-24T06:41:46Z",
"departure": "2024-06-24T06:46:46Z"
},
"load": [
44
],
"activities": [
{
"jobId": "Job_3",
"type": "delivery",
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679573
},
"time": {
"start": "2024-06-24T06:41:46Z",
"end": "2024-06-24T06:46:46Z"
}
}
],
"location": {
"lat": 52.51635175288175,
"lng": 13.343661020679573
},
"distance": 9645
},
{
"time": {
"arrival": "2024-06-24T06:51:55Z",
"departure": "2024-06-24T06:56:55Z"
},
"load": [
43
],
"activities": [
{
"jobId": "Job_16",
"type": "delivery",
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"time": {
"start": "2024-06-24T06:51:55Z",
"end": "2024-06-24T06:56:55Z"
}
}
],
"location": {
"lat": 52.5102,
"lng": 13.3444
},
"distance": 11936
},
{
"time": {
"arrival": "2024-06-24T07:01:02Z",
"departure": "2024-06-24T07:06:02Z"
},
"load": [
42
],
"activities": [
{
"jobId": "Job_38",
"type": "delivery",
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"time": {
"start": "2024-06-24T07:01:02Z",
"end": "2024-06-24T07:06:02Z"
}
}
],
"location": {
"lat": 52.50488105730338,
"lng": 13.355333507786808
},
"distance": 13376
},
{
"time": {
"arrival": "2024-06-24T07:12:03Z",
"departure": "2024-06-24T07:17:03Z"
},
"load": [
41
],
"activities": [
{
"jobId": "Job_41",
"type": "delivery",
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"time": {
"start": "2024-06-24T07:12:03Z",
"end": "2024-06-24T07:17:03Z"
}
}
],
"location": {
"lat": 52.51508491755749,
"lng": 13.38
},
"distance": 16161
},
{
"time": {
"arrival": "2024-06-24T07:24:39Z",
"departure": "2024-06-24T07:29:39Z"
},
"load": [
40
],
"activities": [
{
"jobId": "Job_21",
"type": "delivery",
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"time": {
"start": "2024-06-24T07:24:39Z",
"end": "2024-06-24T07:29:39Z"
}
}
],
"location": {
"lat": 52.49949154428338,
"lng": 13.40857671284082
},
"distance": 19563
},
{
"time": {
"arrival": "2024-06-24T07:37:06Z",
"departure": "2024-06-24T07:42:06Z"
},
"load": [
39
],
"activities": [
{
"jobId": "Job_27",
"type": "delivery",
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"time": {
"start": "2024-06-24T07:37:06Z",
"end": "2024-06-24T07:42:06Z"
}
}
],
"location": {
"lat": 52.48811100200862,
"lng": 13.376
},
"distance": 22947
},
{
"time": {
"arrival": "2024-06-24T07:46:07Z",
"departure": "2024-06-24T07:51:07Z"
},
"load": [
38
],
"activities": [
{
"jobId": "Job_45",
"type": "delivery",
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"time": {
"start": "2024-06-24T07:46:07Z",
"end": "2024-06-24T07:51:07Z"
}
}
],
"location": {
"lat": 52.486517527979494,
"lng": 13.382057792236846
},
"distance": 24159
},
{
"time": {
"arrival": "2024-06-24T07:55:18Z",
"departure": "2024-06-24T08:00:18Z"
},
"load": [
37
],
"activities": [
{
"jobId": "Job_34",
"type": "delivery",
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"time": {
"start": "2024-06-24T07:55:18Z",
"end": "2024-06-24T08:00:18Z"
}
}
],
"location": {
"lat": 52.48446152479127,
"lng": 13.392004256315916
},
"distance": 25309
},
{
"time": {
"arrival": "2024-06-24T08:04:41Z",
"departure": "2024-06-24T08:09:41Z"
},
"load": [
36
],
"activities": [
{
"jobId": "Job_35",
"type": "delivery",
"location": {
"lat": 52.4822032946248,
"lng": 13.391214601891551
},
"time": {
"start": "2024-06-24T08:04:41Z",
"end": "2024-06-24T08:09:41Z"
}
}
],
"location": {
"lat": 52.4822032946248,
"lng": 13.391214601891551
},
"distance": 26937
},
{
"time": {
"arrival": "2024-06-24T08:17:01Z",
"departure": "2024-06-24T08:22:01Z"
},
"load": [
35
],
"activities": [
{
"jobId": "Job_28",
"type": "delivery",
"location": {
"lat": 52.4745,
"lng": 13.42
},
"time": {
"start": "2024-06-24T08:17:01Z",
"end": "2024-06-24T08:22:01Z"
}
}
],
"location": {
"lat": 52.4745,
"lng": 13.42
},
"distance": 30144
},
{
"time": {
"arrival": "2024-06-24T08:31:38Z",
"departure": "2024-06-24T08:36:38Z"
},
"load": [
34
],
"activities": [
{
"jobId": "Job_15",
"type": "delivery",
"location": {
"lat": 52.44459785400424,
"lng": 13.42729037972278
},
"time": {
"start": "2024-06-24T08:31:38Z",
"end": "2024-06-24T08:36:38Z"
}
}
],
"location": {
"lat": 52.44459785400424,
"lng": 13.42729037972278
},
"distance": 34632
},
{
"time": {
"arrival": "2024-06-24T08:44:36Z",
"departure": "2024-06-24T08:49:36Z"
},
"load": [
33
],
"activities": [
{
"jobId": "Job_23",
"type": "delivery",
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"time": {
"start": "2024-06-24T08:44:36Z",
"end": "2024-06-24T08:49:36Z"
}
}
],
"location": {
"lat": 52.4312,
"lng": 13.45023
},
"distance": 38943
},
{
"time": {
"arrival": "2024-06-24T09:02:47Z",
"departure": "2024-06-24T09:07:47Z"
},
"load": [
32
],
"activities": [
{
"jobId": "Job_12",
"type": "delivery",
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"time": {
"start": "2024-06-24T09:02:47Z",
"end": "2024-06-24T09:07:47Z"
}
}
],
"location": {
"lat": 52.4329271708958,
"lng": 13.376558539227483
},
"distance": 46633
},
{
"time": {
"arrival": "2024-06-24T09:16:09Z",
"departure": "2024-06-24T09:21:09Z"
},
"load": [
31
],
"activities": [
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"time": {
"start": "2024-06-24T09:16:09Z",
"end": "2024-06-24T09:21:09Z"
}
}
],
"location": {
"lat": 52.439442845393685,
"lng": 13.336118100685782
},
"distance": 50941
},
{
"time": {
"arrival": "2024-06-24T09:27:21Z",
"departure": "2024-06-24T09:32:21Z"
},
"load": [
30
],
"activities": [
{
"jobId": "Job_11",
"type": "delivery",
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671736
},
"time": {
"start": "2024-06-24T09:27:21Z",
"end": "2024-06-24T09:32:21Z"
}
}
],
"location": {
"lat": 52.457844833248835,
"lng": 13.322525701671736
},
"distance": 53701
},
{
"time": {
"arrival": "2024-06-24T09:35:18Z",
"departure": "2024-06-24T09:40:18Z"
},
"load": [
29
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery",
"location": {
"lat": 52.45810373923444,
"lng": 13.3318089424755
},
"time": {
"start": "2024-06-24T09:35:18Z",
"end": "2024-06-24T09:40:18Z"
}
}
],
"location": {
"lat": 52.45810373923444,
"lng": 13.3318089424755
},
"distance": 54889
},
{
"time": {
"arrival": "2024-06-24T09:48:57Z",
"departure": "2024-06-24T09:53:57Z"
},
"load": [
28
],
"activities": [
{
"jobId": "Job_43",
"type": "delivery",
"location": {
"lat": 52.4594508034092,
"lng": 13.396015195980404
},
"time": {
"start": "2024-06-24T09:48:57Z",
"end": "2024-06-24T09:53:57Z"
}
}
],
"location": {
"lat": 52.4594508034092,
"lng": 13.396015195980404
},
"distance": 59645
},
{
"time": {
"arrival": "2024-06-24T09:56:01Z",
"departure": "2024-06-24T10:01:01Z"
},
"load": [
27
],
"activities": [
{
"jobId": "Job_4",
"type": "delivery",
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"time": {
"start": "2024-06-24T09:56:01Z",
"end": "2024-06-24T10:01:01Z"
}
}
],
"location": {
"lat": 52.456,
"lng": 13.403260583257188
},
"distance": 60547
},
{
"time": {
"arrival": "2024-06-24T10:10:16Z",
"departure": "2024-06-24T10:15:16Z"
},
"load": [
26
],
"activities": [
{
"jobId": "Job_37",
"type": "delivery",
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"time": {
"start": "2024-06-24T10:10:16Z",
"end": "2024-06-24T10:15:16Z"
}
}
],
"location": {
"lat": 52.47651505101506,
"lng": 13.459944175857151
},
"distance": 67193
},
{
"time": {
"arrival": "2024-06-24T10:21:22Z",
"departure": "2024-06-24T10:26:22Z"
},
"load": [
25
],
"activities": [
{
"jobId": "Job_9",
"type": "delivery",
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"time": {
"start": "2024-06-24T10:21:22Z",
"end": "2024-06-24T10:26:22Z"
}
}
],
"location": {
"lat": 52.4823,
"lng": 13.4703
},
"distance": 69905
},
{
"time": {
"arrival": "2024-06-24T10:36:35Z",
"departure": "2024-06-24T10:41:35Z"
},
"load": [
24
],
"activities": [
{
"jobId": "Job_13",
"type": "delivery",
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"time": {
"start": "2024-06-24T10:36:35Z",
"end": "2024-06-24T10:41:35Z"
}
}
],
"location": {
"lat": 52.48128598928299,
"lng": 13.4944
},
"distance": 72032
},
{
"time": {
"arrival": "2024-06-24T10:56:10Z",
"departure": "2024-06-24T11:01:10Z"
},
"load": [
23
],
"activities": [
{
"jobId": "Job_22",
"type": "delivery",
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"time": {
"start": "2024-06-24T10:56:10Z",
"end": "2024-06-24T11:01:10Z"
}
}
],
"location": {
"lat": 52.465255531970406,
"lng": 13.511537556934355
},
"distance": 76685
},
{
"time": {
"arrival": "2024-06-24T11:07:59Z",
"departure": "2024-06-24T11:12:59Z"
},
"load": [
22
],
"activities": [
{
"jobId": "Job_31",
"type": "delivery",
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"time": {
"start": "2024-06-24T11:07:59Z",
"end": "2024-06-24T11:12:59Z"
}
}
],
"location": {
"lat": 52.4779,
"lng": 13.5012
},
"distance": 79186
},
{
"time": {
"arrival": "2024-06-24T11:17:52Z",
"departure": "2024-06-24T11:22:52Z"
},
"load": [
21
],
"activities": [
{
"jobId": "Job_17",
"type": "delivery",
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"time": {
"start": "2024-06-24T11:17:52Z",
"end": "2024-06-24T11:22:52Z"
}
}
],
"location": {
"lat": 52.48903177127663,
"lng": 13.495944342993262
},
"distance": 80551
},
{
"time": {
"arrival": "2024-06-24T11:36:47Z",
"departure": "2024-06-24T11:41:47Z"
},
"load": [
20
],
"activities": [
{
"jobId": "Job_44",
"type": "delivery",
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"time": {
"start": "2024-06-24T11:36:47Z",
"end": "2024-06-24T11:41:47Z"
}
}
],
"location": {
"lat": 52.54433793446157,
"lng": 13.49579242116612
},
"distance": 88689
},
{
"time": {
"arrival": "2024-06-24T11:45:58Z",
"departure": "2024-06-24T11:50:58Z"
},
"load": [
19
],
"activities": [
{
"jobId": "Job_33",
"type": "delivery",
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"time": {
"start": "2024-06-24T11:45:58Z",
"end": "2024-06-24T11:50:58Z"
}
}
],
"location": {
"lat": 52.55437436208552,
"lng": 13.503142187091647
},
"distance": 90697
},
{
"time": {
"arrival": "2024-06-24T11:57:30Z",
"departure": "2024-06-24T12:02:30Z"
},
"load": [
18
],
"activities": [
{
"jobId": "Job_48",
"type": "delivery",
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"time": {
"start": "2024-06-24T11:57:30Z",
"end": "2024-06-24T12:02:30Z"
}
}
],
"location": {
"lat": 52.56223251898173,
"lng": 13.471999398223556
},
"distance": 94694
},
{
"time": {
"arrival": "2024-06-24T12:10:21Z",
"departure": "2024-06-24T12:15:21Z"
},
"load": [
17
],
"activities": [
{
"jobId": "Job_32",
"type": "delivery",
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681835
},
"time": {
"start": "2024-06-24T12:10:21Z",
"end": "2024-06-24T12:15:21Z"
}
}
],
"location": {
"lat": 52.60066027234286,
"lng": 13.502741838681835
},
"distance": 100359
},
{
"time": {
"arrival": "2024-06-24T12:28:16Z",
"departure": "2024-06-24T12:33:16Z"
},
"load": [
16
],
"activities": [
{
"jobId": "Job_42",
"type": "delivery",
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"time": {
"start": "2024-06-24T12:28:16Z",
"end": "2024-06-24T12:33:16Z"
}
}
],
"location": {
"lat": 52.63313572894435,
"lng": 13.506488581249922
},
"distance": 109190
},
{
"time": {
"arrival": "2024-06-24T12:37:26Z",
"departure": "2024-06-24T12:42:26Z"
},
"load": [
15
],
"activities": [
{
"jobId": "Job_25",
"type": "delivery",
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"time": {
"start": "2024-06-24T12:37:26Z",
"end": "2024-06-24T12:42:26Z"
}
}
],
"location": {
"lat": 52.6378,
"lng": 13.48675
},
"distance": 110749
},
{
"time": {
"arrival": "2024-06-24T12:51:23Z",
"departure": "2024-06-24T12:56:23Z"
},
"load": [
14
],
"activities": [
{
"jobId": "Job_36",
"type": "delivery",
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"time": {
"start": "2024-06-24T12:51:23Z",
"end": "2024-06-24T12:56:23Z"
}
}
],
"location": {
"lat": 52.60842932011795,
"lng": 13.46922174529483
},
"distance": 115985
},
{
"time": {
"arrival": "2024-06-24T13:01:41Z",
"departure": "2024-06-24T13:06:41Z"
},
"load": [
13
],
"activities": [
{
"jobId": "Job_49",
"type": "delivery",
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"time": {
"start": "2024-06-24T13:01:41Z",
"end": "2024-06-24T13:06:41Z"
}
}
],
"location": {
"lat": 52.595251760429065,
"lng": 13.456764166098564
},
"distance": 118829
},
{
"time": {
"arrival": "2024-06-24T13:21:40Z",
"departure": "2024-06-24T13:26:40Z"
},
"load": [
12
],
"activities": [
{
"jobId": "Job_2",
"type": "delivery",
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"time": {
"start": "2024-06-24T13:21:40Z",
"end": "2024-06-24T13:26:40Z"
}
}
],
"location": {
"lat": 52.62738533184079,
"lng": 13.3789
},
"distance": 127959
},
{
"time": {
"arrival": "2024-06-24T13:34:20Z",
"departure": "2024-06-24T13:39:20Z"
},
"load": [
11
],
"activities": [
{
"jobId": "Job_18",
"type": "delivery",
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"time": {
"start": "2024-06-24T13:34:20Z",
"end": "2024-06-24T13:39:20Z"
}
}
],
"location": {
"lat": 52.62863,
"lng": 13.3621182
},
"distance": 130741
},
{
"time": {
"arrival": "2024-06-24T13:42:14Z",
"departure": "2024-06-24T13:47:14Z"
},
"load": [
10
],
"activities": [
{
"jobId": "Job_5",
"type": "delivery",
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"time": {
"start": "2024-06-24T13:42:14Z",
"end": "2024-06-24T13:47:14Z"
}
}
],
"location": {
"lat": 52.63256,
"lng": 13.37322
},
"distance": 131793
},
{
"time": {
"arrival": "2024-06-24T13:56:24Z",
"departure": "2024-06-24T14:01:24Z"
},
"load": [
9
],
"activities": [
{
"jobId": "Job_40",
"type": "delivery",
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"time": {
"start": "2024-06-24T13:56:24Z",
"end": "2024-06-24T14:01:24Z"
}
}
],
"location": {
"lat": 52.6543,
"lng": 13.39278
},
"distance": 136796
},
{
"time": {
"arrival": "2024-06-24T14:06:25Z",
"departure": "2024-06-24T14:11:25Z"
},
"load": [
8
],
"activities": [
{
"jobId": "Job_19",
"type": "delivery",
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"time": {
"start": "2024-06-24T14:06:25Z",
"end": "2024-06-24T14:11:25Z"
}
}
],
"location": {
"lat": 52.65831976801964,
"lng": 13.359646771531477
},
"distance": 139516
},
{
"time": {
"arrival": "2024-06-24T14:18:03Z",
"departure": "2024-06-24T14:23:03Z"
},
"load": [
7
],
"activities": [
{
"jobId": "Job_1",
"type": "delivery",
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"time": {
"start": "2024-06-24T14:18:03Z",
"end": "2024-06-24T14:23:03Z"
}
}
],
"location": {
"lat": 52.63329,
"lng": 13.3138
},
"distance": 144388
},
{
"time": {
"arrival": "2024-06-24T14:29:13Z",
"departure": "2024-06-24T14:34:13Z"
},
"load": [
6
],
"activities": [
{
"jobId": "Job_20",
"type": "delivery",
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"time": {
"start": "2024-06-24T14:29:13Z",
"end": "2024-06-24T14:34:13Z"
}
}
],
"location": {
"lat": 52.61955,
"lng": 13.29845
},
"distance": 147649
},
{
"time": {
"arrival": "2024-06-24T14:42:34Z",
"departure": "2024-06-24T14:47:34Z"
},
"load": [
5
],
"activities": [
{
"jobId": "Job_39",
"type": "delivery",
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"time": {
"start": "2024-06-24T14:42:34Z",
"end": "2024-06-24T14:47:34Z"
}
}
],
"location": {
"lat": 52.6029,
"lng": 13.3113
},
"distance": 152022
},
{
"time": {
"arrival": "2024-06-24T14:55:01Z",
"departure": "2024-06-24T15:00:01Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_14",
"type": "delivery",
"location": {
"lat": 52.58038089373736,
"lng": 13.30447922221816
},
"time": {
"start": "2024-06-24T14:55:01Z",
"end": "2024-06-24T15:00:01Z"
}
}
],
"location": {
"lat": 52.58038089373736,
"lng": 13.30447922221816
},
"distance": 155814
},
{
"time": {
"arrival": "2024-06-24T15:06:58Z",
"departure": "2024-06-24T15:11:58Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_30",
"type": "delivery",
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"time": {
"start": "2024-06-24T15:06:58Z",
"end": "2024-06-24T15:11:58Z"
}
}
],
"location": {
"lat": 52.60079217247425,
"lng": 13.339813254226156
},
"distance": 159862
},
{
"time": {
"arrival": "2024-06-24T15:17:40Z",
"departure": "2024-06-24T15:22:40Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_47",
"type": "delivery",
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"time": {
"start": "2024-06-24T15:17:40Z",
"end": "2024-06-24T15:22:40Z"
}
}
],
"location": {
"lat": 52.591995183321515,
"lng": 13.36000789424169
},
"distance": 162114
},
{
"time": {
"arrival": "2024-06-24T15:34:04Z",
"departure": "2024-06-24T15:39:04Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_29",
"type": "delivery",
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"time": {
"start": "2024-06-24T15:34:04Z",
"end": "2024-06-24T15:39:04Z"
}
}
],
"location": {
"lat": 52.58884270031872,
"lng": 13.352068415230912
},
"distance": 166769
},
{
"time": {
"arrival": "2024-06-24T15:56:18Z",
"departure": "2024-06-24T16:01:18Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_46",
"type": "delivery",
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"time": {
"start": "2024-06-24T15:56:18Z",
"end": "2024-06-24T16:01:18Z"
}
}
],
"location": {
"lat": 52.55606147412602,
"lng": 13.41517487839967
},
"distance": 175008
},
{
"time": {
"arrival": "2024-06-24T16:10:01Z",
"departure": "2024-06-24T16:10:01Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.531,
"lng": 13.38461
},
"time": {
"start": "2024-06-24T16:10:01Z",
"end": "2024-06-24T16:10:01Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.38461
},
"distance": 179553
}
],
"statistic": {
"cost": 921.6154,
"distance": 179553,
"duration": 36601,
"times": {
"driving": 21901,
"serving": 14700,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}結論
このチュートリアルでは、完全な問題のコンテキスト内でexcessCosts機能を使用する方法を示し、excessCosts機能の利点を紹介しました。チュートリアルで示したように、この機能を使用することで、アルゴリズムが合理的な範囲内で確立された制限を超えて動作できるシナリオにおいて、よりコスト効率の高いツアー最適化が可能になりました。アルゴリズムがこれらの制限を超えることを許可することにより、超過コスト計算を含まないシナリオと比較して、最適化により大幅なコスト削減が実現されました。
26 日前の更新