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