يمكن أن يتحلل مسار المركبة، على طول المحور الزمني، على النحو التالي (نفترض أن هناك عدد ن من الزيارات):
| | | | | 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
وأخيرًا، إليك كيفية ترتيب السفر والفواصل والتأخير والانتظار أثناء عملية الانتقال.
- لا تتداخل.
- إنّ مدة التأخير فريدة ويجب أن تكون فترة زمنية متجاورة قبل الزيارة التالية (أو انتهاء المركبة). وبالتالي، يكفي معرفة مدة التأخير لمعرفة وقت البدء ووقت الانتهاء.
- الفواصل الزمنية هي فترات زمنية متجاورة وغير متداخلة. تحدّد الاستجابة وقت البدء ومدّة كل فاصل.
- يعد السفر والانتظار "واضحين": ويمكن أن تتم مقاطعتهما عدة مرات أثناء عملية الانتقال هذه. قد يفترض العملاء أن السفر يحدث "في أقرب وقت ممكن" وأن "الانتظار" يملأ الوقت المتبقي.
مثال (معقد):
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[] |
تسلسل مرتب من الزيارات يمثل مسارًا. الزيارات[i] هي الزيارة الأولى في المسار. إذا كان هذا الحقل فارغًا، تُعتبر المركبة غير مُستخدَمة. |
transitions[] |
قائمة مرتبة من الانتقالات للمسار. |
hasTrafficInfeasibilities |
عندما يتم ضبط
من المحتمل أن يتم الوصول في next_visit بعد الفترة الزمنية الحالية بسبب الزيادة التقديرية لوقت السفر |
routePolyline |
تمثيل الخطوط المتعددة المشفّر للمسار. لا تتم تعبئة هذا الحقل إلّا إذا تم ضبط |
breaks[] |
عدد الفواصل الإعلانية المجدوَلة للمركبة التي تنفّذ هذا المسار. يمثّل تسلسل |
metrics |
مقاييس المدة والمسافة والحمولة لهذا المسار يتم تلخيص حقول |
routeCosts |
تكلفة المسار، مقسَّمة حسب حقول الطلب المتعلّقة بالتكلفة. المفاتيح هي مسارات أولية، بالنسبة إلى الإدخال OptimizeToursRequest، مثل "model.shipments.pickups.cost"، والقيم هي إجمالي التكلفة الناتجة عن حقل التكلفة المطابِق، والتي يتم تجميعها على المسار بأكمله. بمعنى آخر، تمثّل التكاليف ["model.shipments.pickups.cost"] مجموع كل تكاليف الاستلام على المسار. يتم هنا الإبلاغ بالتفصيل عن جميع التكاليف المحدّدة في النموذج، باستثناء التكاليف المتعلّقة بسمات TransitionAttributes التي يتم إعداد تقارير عنها بطريقة مجمّعة اعتبارًا من 2022/2021. عنصر يحتوي على قائمة من أزواج |
routeTotalCost |
التكلفة الإجمالية للمسار. مجموع كل التكاليف في خريطة التكلفة. |
انتقال
زيارة تم إجراؤها أثناء المسار. تتوافق هذه الزيارة مع استلام أو تسليم سيارة Shipment
.
تمثيل JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
الحقول | |
---|---|
shipmentIndex |
فهرس الحقل |
isPickup |
إذا كانت الزيارة صحيحة، تتوافق الزيارة مع عملية استلام |
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 |
تمثّل هذه السمة مدة استراحة. مدة بالثواني يصل عددها إلى تسعة أرقام كسرية وتنتهي بـ " |