リレーションを使用したツアーの再計算

ツアー計画の 概念により、オプション relations のパラメータを使用して、特定の車両のジョブの実行ルールおよび実行順序を定義できます。 リレーションを使用すると、再計画プロセスと最終ソリューションのアルゴリズムの動作に影響を与えることができます。リレーションには、次の 3 つのタイプがあります。

  • sequence - この関連で指定された作業は、この特定の車両によって指定された順序で提供される必要があります。 実行順序は変更できません。また、このリレーションで指定されたジョブの間に追加のジョブを挿入することはできません。
"relations": [
            {
                "type": "sequence",
                "jobs": [
                     "job_1",
                     "job_2"
                     "job_4"
                ],
                "vehicleId": "Vehicle_1_1"
  • flexible - このリレーションで指定された作業は、この特定の車両によって指定された順序で提供される必要があります。 ジョブの実行順序は変更されませんが、このリレーションまたは別のリレーションで指定されていないジョブは、このリレーションで定義されているジョブの間であっても、この車両のツアーの任意の場所に挿入できます。
"relations": [
            {
                "type": "flexible",
                "jobs": [
                     "job_1",
                     "job_2"
                     "job_4"
                ],
                "vehicleId": "Vehicle_1_1"
  • tour - このリレーションで指定されたジョブは、この特定の車両が処理する必要がありますが、ジョブの順序は変更される可能性があります。
"relations": [
            {
                "type": "tour",
                "jobs": [
                     "job_1",
                     "job_2"
                     "job_4"
                ],
                "vehicleId": "Vehicle_1_1"

sequenceまたは flexible リレーションに追加されたジョブには、時間帯、スキル要件、キャパシティ違反、集荷 / 配達の割り当てなどの制約違反がないことに注意してください。 ルーティングの可用性など これにより、実現不可能な解決策や望ましくない解決策が生じる可能性があります。 sequence AND flexible の関係と同様 tour に、関係に追加されたジョブは一般に制約違反がないかチェックされませんが、ツアーの関係にあるすべてのジョブが割り当てられない場合があります。 また、マルチ ジョブでは関係を使用できません。

車両の関係で設定された作業数に制限はありません。また、同じツアーの運行管理 で、異なる車両の複数の関係を結合することにも制限はありません。

また、vehicleIdは 車両 typeid の +_INDEX であることに注意してください。 この場合、車両 typeidVehicle_1で あり、車両の量は 3 であるため 、例の vehicleIds は 、Vehicle_1_1Vehicle_1_2およびVehicle_1_3になり ます。

ツアーを再計画するときに「リレーション」が問題解決にどのような影響を与えるかを確認するために、いくつかの簡単な例を試してみましょう。

Sequence

4 つのジョブを実行するのに十分な容量とそれぞれのシフト時間を備えた車両があるとします。 これら 4 つのジョブのうち 2 つは、配達または集荷の場所があまり近くないにもかかわらず、何らかの方法で接続されているため、次々に実行する必要があります。通常、これらのジョブはツアー内でより有利に最適化されますが、リレーション タイプ sequence をそれらに設定しているため、次々に実行することしかできません。簡単なproblemの例は次のとおりです。

{
    "fleet": {
        "types": [
            {
                "id": "Vehicle_1",
                "profile": "car_1",
                "costs": {
                    "fixed": 9.0,
                    "distance": 0.004,
                    "time": 0.005
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-08-27T08:03:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "end": {
                            "time": "2021-08-27T18:03:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        }
                    }
                ],
                "capacity": [
                    10
                ],
                "limits": {
                    "maxDistance": 300000,
                    "shiftTime": 43200
                },
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car_1"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "job_1",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T09:03:00Z",
                                            "2021-08-27T18:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.59175589353722,
                                        "lng": 13.350747750372257
                                    },
                                    "duration": 360
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_2",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T11:03:00Z",
                                            "2021-08-27T20:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.43363386232821,
                                        "lng": 13.403232562191313
                                    },
                                    "duration": 540
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_3",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T10:03:00Z",
                                            "2021-08-27T16:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.473321658918245,
                                        "lng": 13.28972099097991
                                    },
                                    "duration": 660
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_4",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T09:03:00Z",
                                            "2021-08-27T17:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.54165532725351,
                                        "lng": 13.365047170290309
                                    },
                                    "duration": 1140
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ],
        "relations": [
            {
                "type": "sequence",
                "jobs": [
                     "job_1",
                     "job_4"
                ],
                "vehicleId": "Vehicle_1_1"
            }
        ]
    }
}

このProblemの最初の解決策を分析 すると、車両が最初にjob_2job_3の後にjob_1が実行され、その後リレーションで指定されたjob_4になる場合があります。 このようにして、ツアー中に何らかの制約が変更され、ツアーが再計算された場合、順序関係のあるジョブが指定された順序で実行されます。

{
    "statistic": {
        "cost": 269.051,
        "distance": 55254,
        "duration": 7807,
        "times": {
            "driving": 5107,
            "serving": 2700,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T08:03:00Z",
                        "departure": "2021-08-27T10:38:23Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.43363386232821,
                        "lng": 13.403232562191311
                    },
                    "time": {
                        "arrival": "2021-08-27T11:03:00Z",
                        "departure": "2021-08-27T11:12:00Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_2",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.473321658918245,
                        "lng": 13.28972099097991
                    },
                    "time": {
                        "arrival": "2021-08-27T11:30:55Z",
                        "departure": "2021-08-27T11:41:55Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_3",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.59175589353722,
                        "lng": 13.350747750372255
                    },
                    "time": {
                        "arrival": "2021-08-27T12:03:55Z",
                        "departure": "2021-08-27T12:09:55Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.54165532725351,
                        "lng": 13.365047170290309
                    },
                    "time": {
                        "arrival": "2021-08-27T12:24:34Z",
                        "departure": "2021-08-27T12:43:34Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T12:48:30Z",
                        "departure": "2021-08-27T12:48:30Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 269.051,
                "distance": 55254,
                "duration": 7807,
                "times": {
                    "driving": 5107,
                    "serving": 2700,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

実行後 job_3、近くの場所にあるツアーに 1 つ以上のジョブが追加されたとします。 通常、この job_5 処理はjob_1後で実行 されますが 、sequence関係を考慮 すると、job_1job_4の間にジョブを追加することはできません。このため、再プラン後、リレーションの 2 つのジョブの前にjob_5ジョブが実行され、その後にjob_1job_4順番に実行されます。

{
    "statistic": {
        "cost": 147.98,
        "distance": 28900,
        "duration": 4676,
        "times": {
            "driving": 2816,
            "serving": 1860,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 52.473321658918245,
                        "lng": 13.28972099097991
                    },
                    "time": {
                        "arrival": "2021-08-27T11:41:55Z",
                        "departure": "2021-08-27T11:41:55Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.57175589353722,
                        "lng": 13.360747750372257
                    },
                    "time": {
                        "arrival": "2021-08-27T12:02:47Z",
                        "departure": "2021-08-27T12:08:47Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_5",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.59175589353722,
                        "lng": 13.350747750372255
                    },
                    "time": {
                        "arrival": "2021-08-27T12:15:16Z",
                        "departure": "2021-08-27T12:21:16Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.54165532725351,
                        "lng": 13.365047170290309
                    },
                    "time": {
                        "arrival": "2021-08-27T12:35:55Z",
                        "departure": "2021-08-27T12:54:55Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T12:59:51Z",
                        "departure": "2021-08-27T12:59:51Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 147.98,
                "distance": 28900,
                "duration": 4676,
                "times": {
                    "driving": 2816,
                    "serving": 1860,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

Flexible

4 つの作業を実行するのに十分な積載量とそれぞれのシフト時間を備えた車両がある状況をモデル化しましょう。 これら 4 つのジョブのうち 2 つ ( job_1およびjob_4 ) は、論理的には別の順序で解決されますが、配達または集荷が何らかの形で接続されているため、順番に実行する必要があります。 また、これら 2 つの作業のエリアでは、ツアー中に新しい作業がいくつか発生する可能性があるので、車両でもそれらの作業を実行できるようにする必要があります。

この状況で flexible は、これらのジョブのリレーションを設定する必要があります。そのため、関連するジョブを実行すると、他のジョブがツアーに追加されることがあります。 このような制約の簡単なProblemの例は、次のとおりです。

{
    "fleet": {
        "types": [
            {
                "id": "Vehicle_1",
                "profile": "car_1",
                "costs": {
                    "fixed": 9.0,
                    "distance": 0.004,
                    "time": 0.005
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-08-27T08:03:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "end": {
                            "time": "2021-08-27T18:03:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        }
                    }
                ],
                "capacity": [
                    10
                ],
                "limits": {
                    "maxDistance": 300000,
                    "shiftTime": 43200
                },
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car_1"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "job_1",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T09:03:00Z",
                                            "2021-08-27T18:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.59175589353722,
                                        "lng": 13.350747750372257
                                    },
                                    "duration": 360
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_2",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T11:03:00Z",
                                            "2021-08-27T20:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.43363386232821,
                                        "lng": 13.403232562191313
                                    },
                                    "duration": 540
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_3",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T10:03:00Z",
                                            "2021-08-27T16:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.473321658918245,
                                        "lng": 13.28972099097991
                                    },
                                    "duration": 660
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_4",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-08-27T09:03:00Z",
                                            "2021-08-27T17:03:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.54165532725351,
                                        "lng": 13.365047170290309
                                    },
                                    "duration": 1140
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ],
        "relations": [
            {
                "type": "flexible",
                "jobs": [
                     "job_1",
                     "job_4"
                ],
                "vehicleId": "Vehicle_1_1"
            }
        ]
    }
}

当初の解決策からわかるように、ツアーではjob_4job_1の後に解決され、これら 2 つのジョブがリレーション外のジョブの後に解決されるようにツアーが最適化されました。

{
    "statistic": {
        "cost": 269.116,
        "distance": 55254,
        "duration": 7820,
        "times": {
            "driving": 5120,
            "serving": 2700,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T08:03:00Z",
                        "departure": "2021-08-27T10:38:23Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.43363386232821,
                        "lng": 13.403232562191311
                    },
                    "time": {
                        "arrival": "2021-08-27T11:03:00Z",
                        "departure": "2021-08-27T11:12:00Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_2",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.473321658918245,
                        "lng": 13.28972099097991
                    },
                    "time": {
                        "arrival": "2021-08-27T11:30:55Z",
                        "departure": "2021-08-27T11:41:55Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_3",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.59175589353722,
                        "lng": 13.350747750372255
                    },
                    "time": {
                        "arrival": "2021-08-27T12:04:08Z",
                        "departure": "2021-08-27T12:10:08Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.54165532725351,
                        "lng": 13.365047170290309
                    },
                    "time": {
                        "arrival": "2021-08-27T12:24:47Z",
                        "departure": "2021-08-27T12:43:47Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T12:48:43Z",
                        "departure": "2021-08-27T12:48:43Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 269.116,
                "distance": 55254,
                "duration": 7820,
                "times": {
                    "driving": 5120,
                    "serving": 2700,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

job_3の実行後、近くの場所あるツアーに 2 つのジョブ job_5job_6 が追加されたとし ます。 通常、リレーション sequence を使用すると、新しく追加された job_5job_6job_4の後で実行されます。 ただし 、 job_1job_4の間にジョブを追加できるリレーションflexible では、ツアーjob_6job_1の前に実行されjob_5は、job_1job_4の間に挿入されるように最適化され、ツアー内で次々に解決されます。

{{
    "statistic": {
        "cost": 158.063,
        "distance": 29782,
        "duration": 5987,
        "times": {
            "driving": 3767,
            "serving": 2220,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 52.473321658918245,
                        "lng": 13.28972099097991
                    },
                    "time": {
                        "arrival": "2021-08-27T11:41:55Z",
                        "departure": "2021-08-27T11:41:55Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.52175589353722,
                        "lng": 13.357747750372257
                    },
                    "time": {
                        "arrival": "2021-08-27T12:00:23Z",
                        "departure": "2021-08-27T12:06:23Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_6",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.59175589353722,
                        "lng": 13.350747750372255
                    },
                    "time": {
                        "arrival": "2021-08-27T12:28:05Z",
                        "departure": "2021-08-27T12:34:05Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.55175589353722,
                        "lng": 13.357747750372257
                    },
                    "time": {
                        "arrival": "2021-08-27T12:46:57Z",
                        "departure": "2021-08-27T12:52:57Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_5",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.54165532725351,
                        "lng": 13.365047170290309
                    },
                    "time": {
                        "arrival": "2021-08-27T12:57:46Z",
                        "departure": "2021-08-27T13:16:46Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T13:21:42Z",
                        "departure": "2021-08-27T13:21:42Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 158.063,
                "distance": 29782,
                "duration": 5987,
                "times": {
                    "driving": 3767,
                    "serving": 2220,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

Tour

運行管理 に複数の車両があり、特定の車両によって一部の作業を実行する必要があり、実行順序が重要ではない場合 tour は、リレーションを使用する必要があります。 たとえば、 2 台の車両の運行管理 と、実行する 6 つのジョブがあります。 当社の計画によれば、このリストの特定の作業を行うには、いずれかの車両が必要です。 他の 3 つの作業を実行する車両はどれですか? この例ではtour関係を、job_1job_2、およびjob_3Vehicle_1_1に設定し ます。 Vehicle_1_1が これらのジョブのみを実行し、他のジョブの実行のみに制限されることを意味するわけ ではありませんが、Vehicle_1_1はそれらのジョブのみを実行でき、Vehicle_1_2実行できません。 このような制約の問題は、次のようになります。

{
    "fleet": {
        "types": [
            {
                "id": "Vehicle_1",
                "profile": "car",
                "costs": {
                    "fixed": 10.0,
                    "distance": 0.002,
                    "time": 0.003
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-10-23T10:16:40Z",
                            "location": {
                                "lat": 51.08511,
                                "lng": 13.76875
                            }
                        },
                        "end": {
                            "time": "2021-10-23T17:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    }
                ],
                "capacity": [
                    5
                ],
                "amount": 1
            },
            {
                "id": "Vehicle_2",
                "profile": "car",
                "costs": {
                    "fixed": 12.0,
                    "distance": 0.002,
                    "time": 0.002
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-10-23T08:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-23T19:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    }
                ],
                "capacity": [
                    5
                ],
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "Job_1",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T12:30:00Z",
                                            "2021-10-23T14:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.05238,
                                        "lng": 13.74114
                                    },
                                    "duration": 1800
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_2",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T12:05:00Z",
                                            "2021-10-23T17:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.06099,
                                        "lng": 13.75245
                                    },
                                    "duration": 2000
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_3",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T13:35:00Z",
                                            "2021-10-23T17:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.08511,
                                        "lng": 13.76875
                                    },
                                    "duration": 1800
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_4",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T10:05:00Z",
                                            "2021-10-23T10:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.1323847,
                                        "lng": 13.7779515
                                    },
                                    "duration": 2000
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_5",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T16:35:00Z",
                                            "2021-10-23T17:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.11716,
                                        "lng": 13.73054
                                    },
                                    "duration": 1800
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_6",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T11:05:00Z",
                                            "2021-10-23T11:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.12308,
                                        "lng": 13.76406
                                    },
                                    "duration": 2000
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ],
    "relations": [
      {
        "type": "tour",
        "jobs": [
          "Job_1",
          "Job_2",
          "Job_3"
        ],
        "vehicleId": "Vehicle_1_1"
      }
    ]
  }
}

最初の解決策からわかるよう に、Vehicle_1_1は、リレーションtourで指定されたjob_1job_2job_3だけでなく、job_4およびjob_6も実行します。 さらに、実行順序によって、リレーション内 job_2job_1 のジョブのシーケンスが保持されず、その後 job_3にも保持されません。 その結果、Vehicle_2_1は、 job_5のみが実行されます。

{
    "statistic": {
        "cost": 251.099,
        "distance": 88444,
        "duration": 18630,
        "times": {
            "driving": 6068,
            "serving": 11400,
            "waiting": 1162,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-23T10:16:40Z",
                        "departure": "2021-10-23T10:19:10Z"
                    },
                    "load": [
                        5
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.1323847,
                        "lng": 13.7779515
                    },
                    "time": {
                        "arrival": "2021-10-23T10:30:00Z",
                        "departure": "2021-10-23T11:03:20Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "Job_4",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.12308,
                        "lng": 13.76406
                    },
                    "time": {
                        "arrival": "2021-10-23T11:07:30Z",
                        "departure": "2021-10-23T11:40:50Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_6",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06099,
                        "lng": 13.75245
                    },
                    "time": {
                        "arrival": "2021-10-23T11:54:33Z",
                        "departure": "2021-10-23T12:38:20Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_2",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.05238,
                        "lng": 13.74114
                    },
                    "time": {
                        "arrival": "2021-10-23T12:44:20Z",
                        "departure": "2021-10-23T13:14:20Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-23T13:26:05Z",
                        "departure": "2021-10-23T14:05:00Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_3",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T14:28:21Z",
                        "departure": "2021-10-23T14:28:21Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 152.46499999999997,
                "distance": 48806,
                "duration": 14951,
                "times": {
                    "driving": 4189,
                    "serving": 9600,
                    "waiting": 1162,
                    "break": 0
                }
            },
            "shiftIndex": 0
        },
        {
            "vehicleId": "Vehicle_2_1",
            "typeId": "Vehicle_2",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T08:00:00Z",
                        "departure": "2021-10-23T16:18:57Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.11716,
                        "lng": 13.73054
                    },
                    "time": {
                        "arrival": "2021-10-23T16:35:00Z",
                        "departure": "2021-10-23T17:05:00Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_5",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T17:20:16Z",
                        "departure": "2021-10-23T17:20:16Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 98.63400000000001,
                "distance": 39638,
                "duration": 3679,
                "times": {
                    "driving": 1879,
                    "serving": 1800,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

Vehicle_1_1が 最初の 2 つのジョブjob_4job_6を実行し、 さらに 3 つのジョブjob_7job_8job_9がツアーに追加さ れたとし ます。 再計算後、ソリューションは変更さ れましたが、リレーションtourのジョブはVehicle_1_1によって実行されます。 次に Vehicle_1_1は 、 job_1job_3job_2、およびjob_7を実行してツアーを続行します 。 今回Vehicle_1_2 は、次に job_9job_5job_8に進みます。

{
    "statistic": {
        "cost": 288.165,
        "distance": 106927,
        "duration": 20372,
        "times": {
            "driving": 6972,
            "serving": 13400,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-23T12:38:20Z",
                        "departure": "2021-10-23T12:41:08Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.05238,
                        "lng": 13.74114
                    },
                    "time": {
                        "arrival": "2021-10-23T12:53:15Z",
                        "departure": "2021-10-23T13:23:15Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_1",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-23T13:35:00Z",
                        "departure": "2021-10-23T14:05:00Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_3",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06099,
                        "lng": 13.75245
                    },
                    "time": {
                        "arrival": "2021-10-23T14:13:04Z",
                        "departure": "2021-10-23T14:46:24Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_2",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.09099,
                        "lng": 13.65245
                    },
                    "time": {
                        "arrival": "2021-10-23T15:04:39Z",
                        "departure": "2021-10-23T15:37:59Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_7",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T15:53:55Z",
                        "departure": "2021-10-23T15:53:55Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 126.51100000000001,
                "distance": 40905,
                "duration": 11567,
                "times": {
                    "driving": 3967,
                    "serving": 7600,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        },
        {
            "vehicleId": "Vehicle_2_1",
            "typeId": "Vehicle_2",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T08:00:00Z",
                        "departure": "2021-10-23T15:41:33Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.16099,
                        "lng": 13.75245
                    },
                    "time": {
                        "arrival": "2021-10-23T15:58:41Z",
                        "departure": "2021-10-23T16:32:01Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_9",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.11716,
                        "lng": 13.73054
                    },
                    "time": {
                        "arrival": "2021-10-23T16:45:55Z",
                        "departure": "2021-10-23T17:15:55Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_5",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.11099,
                        "lng": 13.70245
                    },
                    "time": {
                        "arrival": "2021-10-23T17:20:46Z",
                        "departure": "2021-10-23T17:54:06Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_8",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T18:08:18Z",
                        "departure": "2021-10-23T18:08:18Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 161.654,
                "distance": 66022,
                "duration": 8805,
                "times": {
                    "driving": 3005,
                    "serving": 5800,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

」に一致する結果は 件です

    」に一致する結果はありません