يمكن أن يتحلل مسار المركبة، على طول المحور الزمني، على النحو التالي (نفترض أن هناك عدد n من الزيارات):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
يُرجى العِلم أنّنا نفرق بين:
- "الأحداث الدقيقة"، مثل بدء تشغيل المركبة وانتهائها وبدء كل زيارة وانتهائها (المعروفة أيضًا باسم الوصول والمغادرة) تحدث في ثانية معيّنة.
- "الفواصل الزمنية"، مثل الزيارات نفسها والانتقال بين الزيارات رغم أن الفواصل الزمنية قد تكون لها مدة صفرية في بعض الأحيان، أي أنها تبدأ وتنتهي في الثانية نفسها، فإنها غالبًا ما تكون مدّتها موجبة.
القيم الثابتة:
- وإذا كان هناك عدد n من الزيارات، فهناك انتقالات n+1.
- تكون الزيارة محاطة دائمًا بانتقال قبلها (الفهرس نفسه) وانتقال بعدها (الفهرس + 1).
- يتبع بدء تشغيل المركبة دائمًا الانتقال رقم 0.
- يسبق نهاية المركبة دائمًا الانتقال رقم n.
عند التكبير، إليك ما يحدث أثناء Transition وVisit:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
أخيرًا، إليك كيفية ترتيب TRAVEL وBREAKS وDELAY وWAIT أثناء عملية النقل.
- ولا تتداخل هذه المجموعات.
- يكون DELAY فريدًا ويجب أن يكون فترة زمنية متصلة مباشرةً قبل الزيارة التالية (أو نهاية المركبة). وبالتالي، يكفي معرفة مدة التأخير لمعرفة وقت البدء والانتهاء.
- الفواصل هي فترات زمنية متصلة وغير متداخلة. تحدّد الاستجابة وقت بدء كل فاصل ومدّته.
- TRAVEL وWAIT "قابلة للاستبدال": يمكن مقاطعتهما عدة مرات أثناء هذا الانتقال. يمكن للعملاء افتراض أنّ الرحلة تتم "في أقرب وقت ممكن" وأنّ "الانتظار" يملؤون الوقت المتبقّي.
مثال (معقد):
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
| تمثيل JSON |
|---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
| الحقول | |
|---|---|
vehicleIndex |
المركبة التي تسير للمسار، والتي تم تحديدها من خلال الفهرس في المصدر |
vehicleLabel |
تصنيف المركبة التي تنفّذ هذا المسار، يساوي |
vehicleStartTime |
الوقت الذي تبدأ فيه المركبة مسارها طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
vehicleEndTime |
الوقت الذي تنتهي فيه المركبة من مسارها. يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
visits[] |
تسلسل منتظم للزيارات يمثّل مسارًا. وvisits[i] هي الزيارة رقم i في المسار. إذا كان هذا الحقل فارغًا، سيُعتبَر المركبة غير مستخدَمة. |
transitions[] |
قائمة بحالات النقل للمسار مرتبة حسب الترتيب |
hasTrafficInfeasibilities |
عند ضبط من المحتمل أن تحدث الوصول في وقت Next_visit بعد الفترة الزمنية الحالية، وذلك بسبب الزيادة المقدّرة في وقت السفر بمقدار |
routePolyline |
تمثيل الخطوط المتعددة المشفر للمسار. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط |
breaks[] |
فترات الاستراحة المُجدوَلة للمركبة التي تنفّذ هذا المسار يمثّل تسلسل |
metrics |
مقاييس المدة والمسافة والحمولة لهذا المسار يتم تجميع حقول |
routeCosts |
تكلفة المسار، مقسَّمة حسب حقول الطلب المتعلقة بالتكلفة. وتتمثّل القيم الرئيسية في مسارات النماذج الأوّلية، مقارنةً بنموذج OptimizeToursRequest المُدخل، على سبيل المثال "model.shipments.pickups.cost"، والقيم هي إجمالي التكلفة الناتجة عن حقل التكلفة ذي الصلة، والتي تم تجميعها على مستوى المسار بالكامل. بمعنى آخر، تكون التكاليف ["model.shipments.pickups.cost"] هي مجموع كل تكاليف الاستلام من مسار الرحلة. يتمّ إدراج جميع التكاليف المحدّدة في النموذج بالتفصيل هنا باستثناء التكاليف المرتبطة بعناصر TransitionAttributes التي يتمّ إدراجها فقط بطريقة مجمّعة اعتبارًا من 01/2022. عنصر يحتوي على قائمة بأزواج |
routeTotalCost |
التكلفة الإجمالية للمسار مجموع كل التكاليف في خريطة التكلفة. |
انتقال
زيارة تم إجراؤها خلال مسار معيّن تتوافق هذه الزيارة مع طلب استلام أو توصيل من Shipment.
| تمثيل JSON |
|---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
| الحقول | |
|---|---|
shipmentIndex |
فهرس الحقل |
isPickup |
في حال كانت القيمة true، تتجاوب الزيارة مع طلب استلام |
visitRequestIndex |
مؤشر |
startTime |
وقت بدء الزيارة. يُرجى العِلم أنّه قد تصل المركبة إلى موقع الزيارة قبل هذا الموعد. تتوافق الأوقات مع طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
loadDemands |
إجمالي طلب تحميل الزيارات كحاصل جمع الشحنة وطلب الزيارة عنصر يحتوي على قائمة بأزواج |
detour |
وقت الانحراف الإضافي بسبب الشحنات التي تمت زيارتها على المسار قبل الزيارة وفترة الانتظار المحتملة الناتجة عن الفترات الزمنية. إذا كانت الزيارة عبارة عن عملية تسليم، يتم احتساب المسار غير المباشر من زيارة الاستلام المقابلة لها، وهو يساوي: وبخلاف ذلك، يتم احتسابه من المركبة مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
shipmentLabel |
نسخة من |
visitLabel |
نسخة من |
انتقالات
الانتقال بين حدثين على المسار. اطّلِع على وصف ShipmentRoute.
إذا لم تكن المركبة مزوّدة برمز startLocation و/أو endLocation، تكون مقاييس التنقّل المقابلة لها 0.
| تمثيل JSON |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| الحقول | |
|---|---|
travelDuration |
مدة السفر أثناء هذه الفترة الانتقالية. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
travelDistanceMeters |
المسافة المقطوعة أثناء عملية النقل |
trafficInfoUnavailable |
عندما يتم طلب حركة المرور من خلال " |
delayDuration |
مجموع مُدد التأخير السارية على عملية النقل هذه. يبدأ التأخير، إن وجد، قبل المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
breakDuration |
مجموع مدّة الفواصل التي تحدث أثناء هذا الانتقال، إن توفّرت يتم تخزين التفاصيل حول وقت بدء كل استراحة ومدتها في مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
waitDuration |
الوقت الذي تم قضاؤه في الانتظار أثناء عملية النقل هذه. تتوافق مدة الانتظار مع وقت التوقف ولا تشمل وقت الاستراحة. تجدر الإشارة أيضًا إلى أنّ وقت الانتظار هذا قد ينقسم إلى عدة فواصل غير متجاورة. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
totalDuration |
إجمالي مدة الانتقال، مقدَّمة لتسهيل الاستخدام وهي تساوي:
مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
startTime |
وقت بدء عملية النقل هذه يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
routePolyline |
تمثيل الخطوط المتعددة المشفر للمسار الذي تم اتباعه أثناء الانتقال. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط |
vehicleLoads |
أحمال المركبات أثناء عملية النقل هذه، لكل نوع يظهر في الأحمال التي يتم تشغيلها خلال المرحلة الانتقالية الأولى هي الأحمال الأولية لمسار المركبة. وبعد ذلك، بعد كل زيارة، يتم إما إضافة أو طرح عنصر يحتوي على قائمة بأزواج |
EncodedPolyline
تمثّل هذه السمة التمثيل المشفر للخطوط المتعددة. يمكنك العثور على مزيد من المعلومات حول ترميز الخطوط المتعددة هنا: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
| تمثيل JSON |
|---|
{ "points": string } |
| الحقول | |
|---|---|
points |
سلسلة تمثّل النقاط المشفرة للخطوط المتعددة. |
استراحة
يشير ذلك المصطلح إلى البيانات التي تمثّل تنفيذ الاستراحة.
| تمثيل JSON |
|---|
{ "startTime": string, "duration": string } |
| الحقول | |
|---|---|
startTime |
وقت بدء الاستراحة. يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
duration |
تمثّل هذه السمة مدة الاستراحة. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |