يمكن أن يتحلل مسار المركبة، على طول المحور الزمني، على النحو التالي (نفترض أن هناك عدد 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 التي يتم الإبلاغ عنها بطريقة مجمّعة فقط اعتبارًا من 2022/2022. |
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 |
تمثيل الخطوط المتعددة المشفر للمسار الذي تم اتباعه أثناء الانتقال. تتم تعبئة هذا الحقل فقط عند ضبط |
routeToken |
النتائج فقط. رمز تعريف غير شفاف يمكن تمريره إلى حزمة تطوير البرامج (SDK) للتنقّل لإعادة إنشاء المسار أثناء التنقّل، وفي حال إعادة التوجيه، يتم الالتزام بالنية الأصلية عند إنشاء المسار. تعامل مع هذا الرمز على أنه كائن ثنائي كبير مبهم. لا تقارِن قيمته في جميع الطلبات لأنّ قيمته قد تتغيّر حتى إذا كانت الخدمة تعرض المسار نفسه بالضبط. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط |
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 |
تمثّل هذه السمة مدة الاستراحة. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |