- تمثيل JSON
- الشحن
- VisitRequest
- LatLng
- Waypoint
- الموقع الجغرافي
- TimeWindow
- المركبة
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- الفاصل
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- الصف
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
يحتوي نموذج الشحنة على مجموعة من الشحنات التي يجب تنفيذها بواسطة مجموعة من المركبات، مع تقليل التكلفة الإجمالية إلى أدنى حدّ، وهي مجموع ما يلي:
- تكلفة توجيه المركبات (مجموع التكلفة لكل إجمالي الوقت والتكلفة لكل وقت السفر والتكلفة الثابتة على جميع المركبات)
- عقوبات الشحن غير المُنفَّذة.
- تكلفة المدة العالمية للشحنات
تمثيل JSON |
---|
{ "shipments": [ { object ( |
الحقول | |
---|---|
shipments[] |
مجموعة الشحنات التي يجب تنفيذها في النموذج |
vehicles[] |
مجموعة من المركبات التي يمكن استخدامها لإجراء الزيارات |
globalStartTime |
وقت البدء والانتهاء العام للنموذج: لا يمكن اعتبار الوقت خارج هذا النطاق صالحًا. يجب أن تكون الفترة الزمنية للنموذج أقل من سنة، أي يجب أن تكون الفترة الزمنية بين عند استخدام حقول طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
globalEndTime |
في حال عدم ضبط القيمة، يتم استخدام 00:00:00 بالتوقيت العالمي المنسق، 1 كانون الثاني (يناير) 1971 (أي الثواني: 31536000، النانو ثانية: 0) كقيمة تلقائية. يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
globalDurationCostPerHour |
"المدة العالمية" للخطة الإجمالية هي الفرق بين أقرب وقت بدء فعّال وآخر وقت انتهاء فعلي لجميع المركبات. ويمكن للمستخدمين تحديد تكلفة في الساعة لهذه الكمية لمحاولة تحسين الأداء من أجل إكمال أقرب مهمة مثلاً. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في |
durationDistanceMatrices[] |
تُحدِّد مصفوفات المدة والمسافة المستخدَمة في النموذج. إذا كان هذا الحقل فارغًا، سيتم استخدام "خرائط Google" أو المسافات الجيوديسية بدلاً من ذلك، استنادًا إلى قيمة الحقل أمثلة على استخدام هذه الكلمة في جملة:
|
durationDistanceMatrixSrcTags[] |
علامات تحدّد مصادر مصفوفتَي المدة والمسافة: تتوافق العلامات مع |
durationDistanceMatrixDstTags[] |
العلامات التي تحدّد وجهات مصفوفتَي المدة والمسافة؛ تتطابق العلامات مع |
transitionAttributes[] |
تمت إضافة سمات النقل إلى النموذج. |
shipmentTypeIncompatibilities[] |
مجموعات أنواع الشحن غير المتوافقة (راجِع |
shipmentTypeRequirements[] |
مجموعات متطلبات |
precedenceRules[] |
مجموعة من قواعد الأسبقية التي يجب فرضها في النموذج |
maxActiveVehicles |
تفرض قيودًا على الحد الأقصى لعدد المركبات النشطة. تكون المركبة نشطة إذا كان مسارها ينقل شحنة واحدة على الأقل. ويمكن استخدام ذلك للحد من عدد المسارات في حالة وجود سائقين أقل من المركبات في حالة وجود أسطول من المركبات غير متجانس. سيختار التحسين بعد ذلك أفضل مجموعة فرعية من المركبات لاستخدامها. يجب أن تكون موجبة بالتأكيد. |
الشحن
شحن سلعة واحدة من عملية استلام إلى عملية تسليم ليتم اعتبار الشحنة منفّذة، يجب أن يزور أي مركبة فريدة أحد مواقع الاستلام الخاصة بها (وتقليل السعة الاحتياطية وفقًا لذلك)، ثم زيارة أحد مواقع التسليم في وقت لاحق (وبالتالي إعادة زيادة السعة الاحتياطية وفقًا لذلك).
تمثيل JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
الحقول | |
---|---|
displayName |
تشير هذه السمة إلى الاسم المعروض للشحن الذي يحدّده المستخدم. يمكن أن يصل طوله إلى 63 حرفًا وقد يستخدم أحرف UTF-8. |
pickups[] |
مجموعة بدائل الاستلام المرتبطة بالشحن في حال عدم تحديد قيمة السمة، لن تحتاج المركبة إلى زيارة الموقع الجغرافي المرتبط بعمليات التسليم. |
deliveries[] |
مجموعة من بدائل التسليم المرتبطة بالشحنة في حال عدم تحديده، لن تحتاج المركبة إلا إلى زيارة الموقع الجغرافي حيث سيتم الاستلام. |
loadDemands |
متطلبات تحميل الشحنة (مثل الوزن والحجم وعدد المنصات وما إلى ذلك) يجب أن تكون المفاتيح في الخريطة عبارة عن معرّفات تصف نوع التحميل المقابل، ومن الأفضل أن تشمل أيضًا الوحدات. على سبيل المثال: "weight_kg" و"volume_gallons" و"pallet_count" وما إلى ذلك. إذا لم يظهر مفتاح معيّن في الخريطة، يتم اعتبار الحمولة المقابلة فارغة. |
allowedVehicleIndices[] |
مجموعة المركبات التي يمكنها تنفيذ هذه الشحنة وإذا كانت فارغة، قد تتمكّن جميع المركبات من أدائها. يتم عرض المركبات حسب فهرسها في قائمة |
costsPerVehicle[] |
تُستخدَم لتحديد التكلفة المتكبّدة عند تسليم هذه الشحنة بواسطة كل مركبة. في حال تحديدها، يجب أن تتضمّن أيًا مما يلي:
ويجب أن تكون هذه التكاليف في الوحدة نفسها مثل |
costsPerVehicleIndices[] |
مؤشرات المركبات التي تنطبق عليها السمة |
pickupToDeliveryAbsoluteDetourLimit |
تحدّد هذه السمة الحد الأقصى لوقت الانتقال المطلق مقارنةً بأقصر مسار بدءًا من استلام الطلب إلى التسليم. في حال تحديده، يجب أن يكون موجبًا، ويجب أن تحتوي الشحنة على عملية استلام وتسليم واحدة على الأقل. على سبيل المثال، يجب ألا تكون أقصر وقت ممكن للانتقال مباشرةً من خيار الاستلام المحدّد إلى خيار التسليم المحدَّد. بعد ذلك، يفرض ضبط
في حال تحديد الحدود النسبية والمطلقة على الشحنة نفسها، يتم استخدام الحدّ الأكثر تقييدًا لكل زوج من المنتجات لاستلام الطلب أو توصيله. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر الالتفافات إلا عندما لا تعتمد مدد التنقّل على المركبات. مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
pickupToDeliveryTimeLimit |
تحدّد المدة القصوى للمدة من بداية الاستلام إلى بداية تسليم الشحنة. وفي حال تحديدها، يجب أن تكون قيمة غير سالبة، وأن تحتوي الشحنة على استلام الطلبات وتوصيلها على الأقل. ولا تعتمد هذه الطريقة على البدائل التي يتم اختيارها لاستلام الطلبات وتوصيلها، ولا تعتمد على سرعة المركبة. ويمكن تحديد ذلك إلى جانب قيود الانحراف القصوى: سيراعي الحلّ كلا المواصفات. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
shipmentType |
سلسلة غير فارغة تحدّد "نوعًا" لهذه الشحنة يمكن استخدام هذه الميزة لتحديد حالات عدم التوافق أو المتطلبات بين يختلف عن |
label |
تُحدِّد تصنيفًا لهذه الشحنة. يتم تسجيل هذا التصنيف في الردّ في |
ignore |
إذا كانت القيمة صحيحة، تخطّ هذه الشحنة، ولكن لا تطبِّق يؤدي تجاهل الشحنة إلى حدوث خطأ في عملية التحقّق عند توفّر أي يُسمح بتجاهل شحنة يتم تنفيذها في |
penaltyCost |
وفي حال عدم اكتمال الشحنة، تُضاف هذه العقوبة إلى التكلفة الإجمالية للمسارات. تُعتبر الشحنة مكتملة إذا تم زيارة أحد خيارات الاستلام والتسليم. يمكن التعبير عن التكلفة بنفس الوحدة المستخدمة في جميع الحقول الأخرى المتعلقة بالتكلفة في النموذج ويجب أن تكون موجبة. مهم: إذا لم يتم تحديد هذه العقوبة، فستُعتبر لانهائية، أي يجب أن تكتمل عملية الشحن. |
pickupToDeliveryRelativeDetourLimit |
تُحدِّد الحد الأقصى للوقت النسبي للمسار غير المباشر مقارنةً بالمسار الأقصر من نقطة الاستلام إلى نقطة التسليم. وفي حال تحديدها، يجب أن تكون قيمة غير سالبة، وأن تحتوي الشحنة على استلام الطلبات وتوصيلها على الأقل. على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من خيار استلام الطلب المحدّد مباشرةً إلى خيار التسليم المحدّد. بعد ذلك، يفرض الإعداد
في حال تحديد الحدود النسبية والمطلقة في الشحنة نفسها، يتم استخدام الحد الأكثر تقييدًا لكل زوج من عمليات الاستلام/التسليم المحتملة. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر الالتفافات إلا عندما لا تعتمد مدد التنقّل على المركبات. |
VisitRequest
طلب زيارة يمكن إجراؤها بواسطة مركبة: لها موقع جغرافي (أو موقعان، راجِع المعلومات أدناه)، وأوقات افتتاح وإغلاق ممثّلة بنوافذ زمنية، ومدة الخدمة (الوقت الذي تقضيه المركبة بعد وصولها لجمع السلع أو تسليمها).
تمثيل JSON |
---|
{ "arrivalLocation": { object ( |
الحقول | |
---|---|
arrivalLocation |
الموقع الجغرافي الذي تصل إليه المركبة عند تنفيذ هذا |
arrivalWaypoint |
نقطة الطريق التي تصل إليها المركبة عند إجراء |
departureLocation |
الموقع الجغرافي الذي تغادر منه المركبة بعد إكمال هذا |
departureWaypoint |
تمثّل هذه السمة نقطة الطريق التي تغادر فيها المركبة بعد إكمال |
tags[] |
تحدِّد العلامات المرفقة بطلب الزيارة. لا يُسمح باستخدام سلاسل فارغة أو مكرّرة. |
timeWindows[] |
الفترات الزمنية التي تفرض قيودًا على وقت الوصول في الزيارة يُرجى العِلم أنّه قد تغادر المركبة خارج فترة وقت الوصول، أي أنّ وقت الوصول + المدة لا يجب أن يكونا ضمن فترة زمنية. يمكن أن يؤدي ذلك إلى "وقت الانتظار" إذا وصلت المركبة قبل يعني عدم توفّر يجب أن تكون الفترات الزمنية منفصلة، بمعنى ألا تتداخل أي فترة زمنية مع نافذة أخرى أو تكون بجانبها، ويجب أن تكون بترتيب متزايد. لا يمكن ضبط |
duration |
مدة الزيارة، أي الوقت الذي تقضيه بالمركبة بين الوصول والمغادرة (ستتم إضافتها إلى وقت الانتظار المحتمل، ويمكنك الاطّلاع على مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
cost |
تكلفة خدمة طلب الزيارة هذا على مسار المركبة يمكن استخدام هذه الطريقة لدفع تكاليف مختلفة لكلّ عملية استلام أو تسليم بديلة لشحنة. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في |
loadDemands |
تحميل متطلبات طلب الزيارة هذا هذا الأمر تمامًا مثل حقل |
visitTypes[] |
تحدِّد أنواع الزيارة. ويمكن استخدام هذا الوقت لتحديد الوقت الإضافي المطلوب لمركبة لإكمال هذه الزيارة (راجِع يمكن أن يظهر النوع مرّة واحدة فقط. |
label |
تُحدِّد تصنيفًا لهذا |
LatLng
عنصر يمثّل زوجًا من خطوط العرض/خطوط الطول ويتم التعبير عن ذلك في صورة زوج من الزوجين لتمثيل درجات الطول والعرض والدرجات. يجب أن يتوافق هذا العنصر مع معيار WGS84 ما لم يُذكر خلاف ذلك. يجب أن تكون القيم ضمن النطاقات العادية.
تمثيل JSON |
---|
{ "latitude": number, "longitude": number } |
الحقول | |
---|---|
latitude |
خط العرض بالدرجات يجب أن يكون ضمن النطاق [-90.0, +90.0]. |
longitude |
خط الطول بالدرجات. يجب أن يكون في النطاق [ -180.0، +180.0]. |
النقطة الوسيطة
تُغلِّف نقطة طريق. تشير نقاط الطرق إلى مواقع وصول ومغادرة طلبات الزيارات، ومواقع بدء المركبات ونهايتها.
تمثيل JSON |
---|
{ "sideOfRoad": boolean, // Union field |
الحقول | |
---|---|
sideOfRoad |
اختياريّ. يشير إلى أنّ الموقع الجغرافي لنقطة المرور هذه مخصّص لمنح الأولوية للمركبة للتوقف على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمرّ المسار عبر الموقع الجغرافي لكي تتمكّن المركبة من التوقف على جانب الطريق الذي يميل إليه الموقع الجغرافي من مركز الطريق. لا يعمل هذا الخيار مع وضع السفر "المشي". |
حقل الربط location_type الطرق المختلفة لتمثيل الموقع الجغرافي. يمكن أن يكون location_type واحدًا فقط مما يلي: |
|
location |
نقطة يتم تحديدها باستخدام الإحداثيات الجغرافية، بما في ذلك عنوان اختياري. |
placeId |
رقم تعريف مكان نقطة الاهتمام المرتبط بالنقطة الوسيطة. |
الموقع الجغرافي
يتم تضمين موقع جغرافي (نقطة جغرافية وعنوان اختياري).
تمثيل JSON |
---|
{
"latLng": {
object ( |
الحقول | |
---|---|
latLng |
الإحداثيات الجغرافية لنقطة الطريق |
heading |
عنوان البوصلة المرتبط باتجاه تدفق حركة المرور. تُستخدَم هذه القيمة لتحديد جانب الطريق الذي سيتم استخدامه لعمليات الاستلام والإرجاع. يمكن أن تتراوح قيم الاتجاه بين 0 و360، حيث يحدد الصفر اتجاهًا شماليًا تمامًا، ويحدد 90 اتجاهًا شرقيًا تمامًا، وما إلى ذلك. |
TimeWindow
تفرض الفترات الزمنية قيودًا على وقت الحدث، مثل وقت الوصول في إحدى الزيارات، أو وقت بدء مركبة معيّنة وانتهائها.
تفرض حدود الفترة الزمنية الثابتة، startTime
وendTime
، أقرب وقت وآخر وقت للحدث، على النحو التالي: startTime <= event_time <=
endTime
. يُعرب عن الحد الأدنى لفترة زمنية مبدئية، softStartTime
، عن تفضيله لوقوع الحدث في softStartTime
أو بعده من خلال تحمُّل تكلفة متناسبة مع المدة التي تسبق softStartTime بوقت وقوع الحدث. يُعرِّف الحد الأقصى لفترة زمنية مبدئية، softEndTime
، عن تفضيله لوقوع الحدث في softEndTime
أو قبله من خلال تحمُّل تكلفة متناسبة مع المدة بعد softEndTime
وقوع الحدث. يجب أن تقع الحدود الزمنية startTime
وendTime
وsoftStartTime
وsoftEndTime
ضمن الحدود الزمنية العالمية (يمكنك الاطّلاع على ShipmentModel.global_start_time
وShipmentModel.global_end_time
) ويجب الالتزام بما يلي:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
تمثيل JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
الحقول | |
---|---|
startTime |
وقت بدء الفترة الزمنية الثابتة إذا لم يتم تحديدها، سيتم ضبطها على طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
endTime |
وقت انتهاء نافذة الوقت الصعب. أمّا في حال عدم تحديده، فسيتم ضبطه على يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
softStartTime |
تمثّل هذه السمة وقت البدء البسيط للإطار الزمني. يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
softEndTime |
وقت الانتهاء البسيط للنافذة الزمنية. طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
costPerHourBeforeSoftStartTime |
تكلفة لكل ساعة تُضاف إلى التكاليف الأخرى في النموذج إذا حدث الحدث قبل softStartTime، ويتم احتسابها على النحو التالي:
ويجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا في حال ضبط سمة softStartTime. |
costPerHourAfterSoftEndTime |
تكلفة في الساعة مضافة إلى التكاليف الأخرى في النموذج إذا وقع الحدث بعد
ويجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا في حال ضبط السمة |
مركبة
نماذج مركبة تواجه مشكلة في الشحن سيؤدي حلّ مشكلة الشحن إلى إنشاء مسار لهذه المركبة يبدأ من startLocation
وينتهي في endLocation
. المسار هو تسلسل من الزيارات (راجِع ShipmentRoute
).
تمثيل JSON |
---|
{ "displayName": string, "travelMode": enum ( |
الحقول | |
---|---|
displayName |
الاسم المعروض للمركبة الذي حدّده المستخدم ويمكن أن يصل طوله إلى 63 حرفًا، ويمكن أن يستخدم أحرف UTF-8. |
travelMode |
وضع التنقّل الذي يؤثر في الطرق التي يمكن للمركبة استخدامها وسرعتها يمكنك أيضًا الاطّلاع على |
routeModifiers |
يشير ذلك المصطلح إلى مجموعة من الشروط التي يجب استيفاؤها والتي تؤثر في طريقة احتساب المسارات للمركبة المحدّدة. |
startLocation |
الموقع الجغرافي الذي تبدأ فيه المركبة قبل استلام أي شحنات إذا لم يتم تحديده، تبدأ المركبة في أول عملية استلام. إذا كان نموذج الشحن يتضمّن مصفوفات المدة والمسافة، يجب عدم تحديد |
startWaypoint |
نقطة طريق تمثّل موقعًا جغرافيًا تبدأ منه المركبة قبل استلام أي شحنات. إذا لم يتم تحديد |
endLocation |
الموقع الجغرافي الذي تنتهي فيه المركبة بعد إكمال آخر |
endWaypoint |
نقطة طريق تمثّل موقعًا جغرافيًا تنتهي فيه المركبة بعد إكمال آخر |
startTags[] |
تُحدِّد العلامات المرفقة ببداية مسار المركبة. لا يُسمح باستخدام سلاسل فارغة أو مكرّرة. |
endTags[] |
تحدّد العلامات المرفقة بنهاية مسار المركبة. لا يُسمح بالسلاسل الفارغة أو المكرّرة. |
startTimeWindows[] |
الفترات الزمنية التي قد تغادر خلالها المركبة موقع البدء. ويجب أن تكون ضمن الحدود الزمنية العامة (راجِع حقول يجب أن تكون الفترات الزمنية التي تنتمي إلى الحقل المتكرّر نفسه منفصلة، أي لا يمكن أن تتداخل أي فترة زمنية مع حقل آخر أو تكون مجاورة له، ويجب أن تكون مرتَّبة حسب التسلسل الزمني. لا يمكن ضبط |
endTimeWindows[] |
الفترات الزمنية التي قد تصل خلالها المركبة إلى موقعها النهائي ويجب أن تكون ضمن الحدود الزمنية العالمية (راجِع يجب أن تكون الفترات الزمنية التي تنتمي إلى الحقل المتكرّر نفسه منفصلة، أي لا يمكن أن تتداخل أي فترة زمنية مع حقل آخر أو تكون مجاورة له، ويجب أن تكون مرتَّبة حسب التسلسل الزمني. لا يمكن ضبط |
unloadingPolicy |
يتم فرض سياسة إلغاء التحميل على المركبة. |
loadLimits |
السعة للمركبة (مثل الوزن والحجم وعدد المنصّات النقّالة) المفاتيح في الخريطة هي معرّفات لنوع الحمولة، بما يتوافق مع مفاتيح حقل |
costPerHour |
تكاليف المركبات: تُجمع جميع التكاليف ويجب أن تكون بالوحدة نفسها المستخدَمة في التكلفة لكل ساعة من مسار المركبة ويتم تطبيق هذه التكلفة على إجمالي الوقت الذي يقطعه المسار، وتشمل مدة الرحلة ومدّة الانتظار ووقت الزيارة. قد يؤدي استخدام |
costPerTraveledHour |
التكلفة لكل ساعة من مسار المركبة لا تُطبَّق هذه التكلفة إلا على مدة التنقّل التي يستغرقها المسار (أي المدة المُسجَّلة في |
costPerKilometer |
التكلفة لكل كيلومتر من مسار المركبة. يتم تطبيق هذه التكلفة على المسافة المبلّغ عنها في |
fixedCost |
يتم تطبيق تكلفة ثابتة إذا تم استخدام هذه المركبة لمعالجة شحنة. |
usedIfRouteIsEmpty |
ينطبق هذا الحقل على المركبات فقط عندما لا يوفّر مسارها أي شحنات. يشير ذلك إلى ما إذا كان يجب اعتبار المركبة مستعملة أم لا في هذه الحالة. إذا كانت الحالة صحيحة، تنتقل المركبة من موقع بدايتها إلى موقعها النهائي حتى لو لم تكن تخدم أي شحنات، كما يتم أخذ تكاليف الوقت والمسافة الناتجة من بدايتها إلى موقعها النهائي في الاعتبار. بخلاف ذلك، لن تتنقّل هذه المركبة من نقطة الانطلاق إلى موقعها الجغرافي النهائي، ولم يتم تحديد موعد لأي |
routeDurationLimit |
يتم تطبيق هذا الحدّ على إجمالي مدة مسار المركبة. في رحلة |
travelDurationLimit |
الحدّ المفروض على مدة التنقّل في مسار المركبة في |
routeDistanceLimit |
الحدّ الذي يتم تطبيقه على إجمالي مسافة مسار المركبة في |
extraVisitDurationForVisitType |
تحدِّد خريطة من سلاسل visitTypes إلى المدّات. المدة هي الوقت بالإضافة إلى إذا كان طلب الزيارة عدة أنواع، ستتم إضافة مدة لكل نوع في الخريطة. |
breakRule |
يصف جدول الراحة الذي سيتم فرضه على هذه المركبة. إذا كانت هذه القيمة فارغة، لن يتم ضبط أي فترات استراحة لهذه المركبة. |
label |
تُحدِّد تصنيفًا لهذه المركبة. يتم تسجيل هذا التصنيف في الردّ على أنّه |
ignore |
إذا كانت القيمة صحيحة، يجب أن تكون إذا تم تنفيذ عملية شحن بواسطة مركبة تم تجاهلها في إذا تم تسليم الشحنة من خلال مركبة تم تجاهلها في |
travelDurationMultiple |
تُحدِّد هذه السمة عاملاً مضاعِفًا يمكن استخدامه لزيادة أو تقليل أوقات التنقّل لهذه المركبة. على سبيل المثال، يعني ضبط ذلك على 2.0 أن هذه المركبة أبطأ ولديها مدة تنقّل ضعف الوقت اللازم للمركبات العادية. ولا تؤثر هذه القيمة المتعددة في مُدد الزيارات. ويؤثر ذلك في التكلفة في حال تحديد تحذير: سيتم تقريب أوقات التنقّل إلى أقرب ثانية بعد تطبيق هذا المُضاعِف ولكن قبل إجراء أي عمليات رقمية، وبالتالي قد يؤدي المُضاعِف الصغير إلى فقدان الدقة. يُرجى الاطّلاع أيضًا على |
TravelMode
وسائل النقل التي يمكن للمركبات استخدامها
يجب أن تكون هذه الإعدادات مجموعة فرعية من أوضاع التنقّل في واجهة برمجة التطبيقات "الطرق المفضّلة" في "منصّة خرائط Google"، راجِع: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
عمليات التعداد | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
وضع سفر غير محدّد، ما يعادل DRIVING |
DRIVING |
وضع التنقّل المرتبط باتجاهات القيادة (سيارة، وما إلى ذلك) |
WALKING |
وضع السفر المناسب لاتجاهات المشي |
RouteModifiers
يشير هذا المصطلح إلى مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند حساب مسارات المركبات. وهذا يشبه RouteModifiers
في واجهة برمجة التطبيقات المفضَّلة في "منصة خرائط Google" . اطّلِع على: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
تمثيل JSON |
---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
الحقول | |
---|---|
avoidTolls |
لتحديد ما إذا كنت تريد تجنُّب الطرق ذات الرسوم في الحالات المعقولة سيتم تفضيل المسارات التي لا تحتوي على طرق برسوم عبور. لا ينطبق إلا على وسائل النقل الآلية. |
avoidHighways |
تحدِّد هذه السياسة ما إذا كان يجب تجنّب الطرق السريعة حيثما كان ذلك معقولاً. وسيتم منح الأولوية للمسارات التي لا تحتوي على طرق سريعة. لا يسري هذا الإعداد إلا على أوضاع السفر المزوّدة بمحرّك كهربائي. |
avoidFerries |
تحدِّد هذه السياسة ما إذا كان يجب تجنّب العبّارات حيثما كان ذلك معقولاً. سيتم منح الأولوية للمسارات التي لا تتضمّن السفر عبر العبّارات. لا ينطبق إلا على وسائل النقل الآلية. |
avoidIndoor |
اختياريّ. تحدِّد ما إذا كان يجب تجنُّب التنقّل داخل المباني حيثما أمكن. سيتم منح التفضيل للمسارات التي لا تحتوي على تنقل داخلي. ينطبق هذا الإعداد على وضع السفر |
UnloadingPolicy
سياسة حول كيفية تفريغ حمولة المركبة ولا يسري هذا العرض إلا على الشحنات التي تشمل استلام الطلبات وتوصيلها.
يمكن شحن البضائع الأخرى في أي مكان على المسار بغض النظر عن unloadingPolicy
.
عمليات التعداد | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
إنّ سياسة التفريغ غير محدّدة، ويجب أن تتمّ عمليات التسليم بعد استلام المنتجات مباشرةً. |
LAST_IN_FIRST_OUT |
يجب أن تتم عمليات التسليم بترتيب عكسي لعمليات الاستلام. |
FIRST_IN_FIRST_OUT |
يجب أن تتم عمليات التسليم بالترتيب نفسه الذي تم به استلام الطلبات. |
LoadLimit
تُحدِّد الحد الأقصى للحمولة التي يمكن أن تحملها المركبة، مثلاً "يمكن أن تحمل هذه الشاحنة ما يصل إلى 3500 كيلوغرام فقط". يمكنك الاطّلاع على loadLimits
.
تمثيل JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
الحقول | |
---|---|
softMaxLoad |
حد أدنى بسيط للتحميل. يمكنك الاطّلاع على |
costPerUnitAboveSoftMax |
إذا تجاوز الحمولة |
startLoadInterval |
الفاصل الزمني المقبول لتحميل المركبة في بداية المسار |
endLoadInterval |
الفاصل الزمني المقبول لتحميل المركبة في نهاية المسار |
maxLoad |
الحد الأقصى المسموح به لحجم التحميل. |
costPerKilometer |
تكلفة نقل وحدة حمولة واحدة لأكثر من كيلومتر واحد لهذه المركبة يمكن استخدام ذلك كوكيل لاستهلاك الوقود: إذا كان الحمولة وزنًا (بالنيوتن)، فإن قيمة "الحمولة*كيلومتر" لها بُعد الطاقة. |
costPerTraveledHour |
تكلفة السفر بوحدة حمولة خلال ساعة واحدة لهذه المركبة |
الفاصل
فاصل كميات التحميل المقبولة
تمثيل JSON |
---|
{ "min": string, "max": string } |
الحقول | |
---|---|
min |
الحد الأدنى للحمل المقبول يجب أن تكون القيمة أكبر من أو تساوي 0. في حال تحديدهما، يجب أن تكون قيمة |
max |
الحد الأقصى للحمل المقبول يجب أن تكون القيمة أكبر من أو تساوي 0. في حال عدم تحديد الحد الأقصى للحمل، لا تفرض هذه الرسالة أي قيود عليه. في حال تحديدهما، يجب أن تكون قيمة |
LoadCost
تكلفة نقل وحدة تحميل واحدة خلال Transition
بالنسبة إلى تحميل معيّن، تكون التكلفة هي مجموع جزأين:
- min(load,
loadThreshold
) *costPerUnitBelowThreshold
- max(0, load -
loadThreshold
) *costPerUnitAboveThreshold
وبهذه التكلفة، تفضّل الحلول تقديم الطلبات العالية أولاً، أو ما يعادل ذلك من خلال استلام الطلبات العالية في وقت لاحق. على سبيل المثال، إذا كانت هناك مركبة تحتوي
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
ومسارها هو start,pickup,pickup,delivery,delivery,end مع الانتقالات:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
تكون التكلفة المتكبّدة لهذا LoadCost
هي (cost_below * load_below * kilometers + cost_above * load_above * kms).
- الانتقال 0: 0.0
- الانتقال 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- الانتقال 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- الانتقال 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- الانتقال 4: 0.0
وبالتالي، فإنّ LoadCost
على طول المسار هو 120.0.
ومع ذلك، إذا كان المسار هو start,pickup,delivery,pickup,delivery,end مع الانتقالات:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
فإن التكلفة التي تتكبدها LoadCost
هي
- transition 0: 0.0
- الانتقال 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transition 2: 0.0
- الانتقال 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- الانتقال 4: 0.0
في هذه الحالة، تكون قيمة LoadCost
على طول المسار 40.0.
LoadCost
تزيد من تكلفة الحلول التي تتضمّن انتقالات ذات حمولة ثقيلة.
تمثيل JSON |
---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
الحقول | |
---|---|
loadThreshold |
مقدار الحمولة التي تتجاوزها تكلفة نقل وحدة الحمولة من costPerUnitBelowThreshold إلى costPerUnitAboveThreshold يجب أن تكون القيمة أكبر من أو تساوي 0. |
costPerUnitBelowThreshold |
تكلفة نقل وحدة من الحمل لكل وحدة تتراوح بين 0 والحدّ الأقصى يجب أن تكون قيمة محدودة، وأكبر من أو تساوي 0. |
costPerUnitAboveThreshold |
تكلفة نقل وحدة من الحمولة لكل وحدة تتجاوز الحدّ الأدنى في الحالة الخاصة التي يكون فيها الحدّ الأدنى = 0، تكون هذه تكلفة ثابتة لكل وحدة. يجب أن تكون قيمة محدودة وأكبر من أو تساوي 0. |
DurationLimit
حدّ يحدّد الحدّ الأقصى لمدة مسار مركبة يمكن أن يكون صلبًا أو ناعمًا.
عند تحديد حقل حدّ أدنى، يجب تعريف كلّ من الحدّ الأقصى البسيط والتكلفة المرتبطة به معًا.
تمثيل JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
الحقول | |
---|---|
maxDuration |
حد صارم يقيد المدة لتكون maxDuration على الأكثر. المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
softMaxDuration |
الحدّ المقبول هو حدّ لا يفرض الحدّ الأقصى لمدة الرحلة، ولكن عند مخالفته، يتسبب في تحمّل المسار تكلفة. تضاف هذه التكلفة إلى التكاليف الأخرى المحدّدة في النموذج، باستخدام الوحدة نفسها. يجب أن تكون مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
quadraticSoftMaxDuration |
الحدّ المقبول هو حدّ لا يفرض الحدّ الأقصى لمدة الرحلة، ولكن عند انتهاكه، يتسبب في تحمّل المسار تكلفةً تتناسب طرديًا مع المدة. تضيف هذه التكلفة إلى التكاليف الأخرى المحددة في النموذج بالوحدة نفسها. يجب أن تكون
مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
costPerHourAfterSoftMax |
تكلفة الساعة المفروضة في حال انتهاك الحدّ الأدنى الذي يبلغ
يجب أن تكون التكلفة غير سالبة. |
costPerSquareHourAfterQuadraticSoftMax |
التكلفة لكل ساعة مربّعة يتم تكبدها في حال مخالفة الحدّ الأدنى الذي يبلغ تكون التكلفة الإضافية 0 إذا كانت المدة أقل من الحدّ الأدنى، وإلا تعتمد التكلفة على المدة على النحو التالي:
يجب أن تكون التكلفة قيمة غير سالبة. |
DistanceLimit
حد يحدد أقصى مسافة يمكن قطعها. يمكن أن يكون صلبًا أو لينًا.
إذا تم تحديد حدّ أدنى، يجب تحديد كلّ من softMaxMeters
وcostPerKilometerAboveSoftMax
وعدم استخدام قيم غير سالبة.
تمثيل JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
الحقول | |
---|---|
maxMeters |
حدّ ثابت يفرض ألا تتجاوز المسافة maxMeters يجب أن يكون الحد قيمة غير سالبة. |
softMaxMeters |
عند تطبيق حدّ أدنى للمسافة، لا يفرض الحدّ الأقصى المسموح به للمسافة المقطوعة، ولكن عند مخالفة السياسة، نفرض تكلفة إضافية مقابل تكاليف أخرى محدّدة في النموذج بالوحدة نفسها. إذا تم تحديد softMaxMeters، يجب أن يكون أقل من maxMeters ويجب ألا يكون سالبًا. |
costPerKilometerBelowSoftMax |
التكلفة المتكبّدة لكل كيلومتر، والتي تزيد حتى
لا تتوفّر هذه التكلفة بعملة |
costPerKilometerAboveSoftMax |
التكلفة لكل كيلومتر يتم تكبده إذا كانت المسافة تزيد عن الحد الأقصى
يجب أن تكون التكلفة قيمة غير سالبة. |
BreakRule
قواعد لإنشاء فواصل زمنية لمركبة (مثل فواصل الغداء) الفاصل هو فترة زمنية متصلة تظل خلالها المركبة في وضع السكون في موقعها الحالي ولا يمكنها إجراء أي زيارة. قد يحدث استراحة:
- أثناء السفر بين زيارتين (ويشمل ذلك الوقت قبل الزيارة أو بعدها مباشرة، ولكن ليس في منتصف الزيارة)، وفي هذه الحالة، يمتد وقت النقل المقابل بين الزيارات
- أو قبل بدء تشغيل المركبة (قد لا يتم تشغيل المركبة في منتصف فترة الراحة)، وفي هذه الحالة لا يؤثر ذلك في وقت بدء تشغيل المركبة.
- أو بعد انتهاء المركبة (كما هو الحال، مع وقت انتهاء المركبة).
تمثيل JSON |
---|
{ "breakRequests": [ { object ( |
الحقول | |
---|---|
breakRequests[] |
تسلسل الفواصل اطّلِع على رسالة " |
frequencyConstraints[] |
قد تنطبق عدة |
BreakRequest
يجب معرفة تسلسل الفواصل (أي عددها وترتيبها) التي تنطبق على كل مركبة مسبقًا. وتحدِّد قيم BreakRequest
المتكرّرة هذا التسلسل بالترتيب الذي يجب أن تحدث به. قد تتداخل الفترات الزمنية (earliestStartTime
/ latestStartTime
)، ولكن يجب أن تكون متوافقة مع الطلب (تم وضع علامة في هذا المربّع).
تمثيل JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
الحقول | |
---|---|
earliestStartTime |
مطلوب. الحدّ الأدنى (شاملاً) لبداية الاستراحة يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu" وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: |
latestStartTime |
مطلوب. الحدّ الأقصى (شاملاً) لبداية الاستراحة طابع زمني بتنسيق RFC3339 UTC "Zulu"، بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
minDuration |
مطلوب. تمثّل هذه السمة الحد الأدنى لمدة الفاصل. يجب أن تكون موجبة. مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
قيد_التردد
يمكن فرض قيود إضافية على معدّل تكرار الفواصل الزمنية المحدّدة أعلاه ومدتها، وذلك من خلال فرض حدّ أدنى لمعدّل تكرار الفواصل الزمنية، مثل "يجب أن يكون هناك فاصل زمني لمدة ساعة واحدة على الأقل كل 12 ساعة". بافتراض أنّه يمكن تفسير ذلك على أنّه "خلال أي فترة زمنية متحركة تبلغ 12 ساعة، يجب أن يكون هناك استراحة واحدة على الأقل لمدة ساعة واحدة على الأقل"، سيتم ترجمة هذا المثال إلى FrequencyConstraint
التالي:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
سيراعي توقيت الفواصل في الحلّ ومدّتها جميع هذه القيود، بالإضافة إلى الفترات الزمنية والحد الأدنى للمدد المحدَّدة في السمة BreakRequest
.
في الممارسة العملية، يمكن أن ينطبق FrequencyConstraint
على الفواصل غير المتتالية. على سبيل المثال، يراعي الجدول الزمني التالي مثال "ساعة واحدة كل 12 ساعة":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
تمثيل JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
الحقول | |
---|---|
minBreakDuration |
مطلوب. الحد الأدنى لمدة الفاصل الإعلاني لهذا القيد غير سالب اطّلِع على وصف المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
maxInterBreakDuration |
مطلوب. أقصى مدى مسموح به لأي فاصل زمني في المسار لا يتضمن استراحة جزئية على الأقل لمدة المدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
DurationDistanceMatrix
تحدّد هذه السياسة مصفوفة المدّة والمسافة من المواقع الجغرافية لبدء زيارة المركبات والمواقع الجغرافية للمركبات والمواقع الجغرافية للمركبات والزيارة.
تمثيل JSON |
---|
{
"rows": [
{
object ( |
الحقول | |
---|---|
rows[] |
تُستخدَم لتحديد صفوف مصفوفة المدة والمسافة. يجب أن يحتوي على عدد عناصر يساوي |
vehicleStartTag |
علامة تحدّد المركبات التي تنطبق عليها مصفوفة المدة والمسافة هذه إذا كان هذا الحقل فارغًا، ينطبق ذلك على جميع المركبات، ولا يمكن أن تتوفّر سوى مصفوفة واحدة. يجب أن تتطابق جميع مرات بدء مركبة مع مصفوفة واحدة بالضبط، أي يجب أن يتطابق حقل واحد بالضبط من حقول يجب أن يكون لكل المصفوفات |
الصف
تحدّد صفًا من مصفوفة المدة والمسافة.
تمثيل JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
الحقول | |
---|---|
durations[] |
قيم المدة لصف معيّن يجب أن يحتوي على عدد العناصر نفسه مثل مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
meters[] |
قيم المسافة لصف معيّن إذا لم تكن أي تكاليف أو قيود تشير إلى المسافات في النموذج، يمكن ترك هذا الحقل فارغًا، وإلا يجب أن يحتوي على عدد عناصر يساوي |
TransitionAttributes
تُحدِّد سمات الانتقالات بين زيارتَين متتاليتَين على أحد المسارات. قد يتم تطبيق العديد من TransitionAttributes
على عملية النقل نفسها: في هذه الحالة، تتراكم كل التكاليف الإضافية ويتم تطبيق القيد أو الحد الأكثر صرامة (مع اتّباع دلالات "AND" الطبيعية).
تمثيل JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
الحقول | |
---|---|
srcTag |
علامات تحدّد مجموعة التحولات (src->dst) التي تنطبق عليها هذه السمات تتطابق زيارة مصدر أو بدء مركبة إذا كان حقل |
excludedSrcTag |
يمكنك الاطّلاع على |
dstTag |
تتطابق زيارة الوجهة أو نهاية المركبة إذا كان الحقل |
excludedDstTag |
يمكنك الاطّلاع على |
cost |
تُستخدَم لتحديد تكلفة تنفيذ عملية النقل هذه. ويكون هذا في نفس الوحدة مثل جميع التكاليف الأخرى في النموذج ويجب ألا يكون سالبًا. ويتم تطبيقه على جميع التكاليف الحالية الأخرى. |
costPerKilometer |
تحدّد التكلفة لكل كيلومتر المطبّقة على المسافة التي تم قطعها أثناء إجراء هذا الانتقال. ويضيف ما يصل إلى أي |
distanceLimit |
تحدّد هذه السمة حدًا أقصى للمسافة التي يتم قطعها أثناء تنفيذ هذا الانتقال. اعتبارًا من 2021/6، ستتم إتاحة الحدود القصوى المسموح بها فقط. |
delay |
تُحدِّد هذه السمة تأخّرًا يحدث عند تنفيذ هذا الانتقال. يحدث هذا التأخير دائمًا بعد إنهاء زيارة المصدر وقبل بدء زيارة الوجهة. مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
ShipmentTypeIncompatibility
تُحدِّد حالات عدم التوافق بين الشحنات استنادًا إلى shipmentType. يتم تقييد ظهور الشحنات غير المتوافقة على المسار نفسه استنادًا إلى وضع عدم التوافق.
تمثيل JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
الحقول | |
---|---|
types[] |
قائمة بالأنواع غير المتوافقة. هناك شحنتان تتضمّنان |
incompatibilityMode |
الوضع الذي تم تطبيقه على عدم التوافق |
IncompatibilityMode
الأوضاع التي تحدّد كيفية تقييد ظهور الشحنات غير المتوافقة على المسار نفسه
عمليات التعداد | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
وضع عدم التوافق غير محدّد يجب عدم استخدام هذه القيمة مطلقًا. |
NOT_PERFORMED_BY_SAME_VEHICLE |
في هذا الوضع، لا يمكن مطلقًا أن تشترك شحنتان من أنواع غير متوافقة في المركبة نفسها. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
في عمليتَي شحن بأنواع غير متوافقة مع وضع عدم التوافق "
|
ShipmentTypeRequirement
تُحدِّد المتطلبات بين الشحنات استنادًا إلى shipmentType. يتم تحديد تفاصيل المتطلّب حسب وضع المتطلّب.
تمثيل JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
الحقول | |
---|---|
requiredShipmentTypeAlternatives[] |
تتضمّن هذه السمة قائمة بأنواع الشحن البديلة المطلوبة بموجب سياسة " |
dependentShipmentTypes[] |
يجب الانتقال إلى المسار نفسه للاطّلاع على كل الشحنات من النوع ملاحظة: لا يُسمَح باستخدام سلاسل المتطلبات التي تعتمد عليها |
requirementMode |
تم تطبيق الوضع على الشرط. |
RequirementMode
الأوضاع التي تحدد مظهر الشحنات التابعة على المسار.
عمليات التعداد | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
وضع المتطلبات غير محدَّد. يجب عدم استخدام هذه القيمة مطلقًا. |
PERFORMED_BY_SAME_VEHICLE |
في هذا الوضع، يجب أن تتشارك جميع الشحنات "التابعة" المركبة نفسها مع شحنة واحدة على الأقل من الشحنات "المطلوبة". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
في الوضع " لذلك، يجب أن يتضمّن استلام الشحنة "التابع" أيًا مما يلي:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
كما هو الحال من قبل، باستثناء أنّ الشحنات "التابعة" يجب أن تتضمّن شحنة "مطلوب" على مركبتها في وقت تسليمها. |
PrecedenceRule
قاعدة الأولوية بين حدثَين (كلّ حدث هو استلام الشحنة أو تسليمها): يجب أن يبدأ الحدث "الثاني" على الأقل بعد offsetDuration
من بدء الحدث "الأول".
يمكن أن تشير عدة أولويات إلى الأحداث نفسها (أو ذات الصلة)، على سبيل المثال: "يتم استلام الطلب (ب) بعد تسليم الطلب (أ)" و"يتم استلام الطلب (ج) بعد استلام الطلب (ب)".
بالإضافة إلى ذلك، لا تسري الأولويات إلا عند تنفيذ كلتا الشحنتَين ويتم تجاهلها بخلاف ذلك.
تمثيل JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
الحقول | |
---|---|
firstIsDelivery |
يشير إلى ما إذا كان الحدث "الأول" هو عملية تسليم. |
secondIsDelivery |
يشير إلى ما إذا كان الحدث "الثاني" هو عملية تسليم. |
offsetDuration |
الفاصل الزمني بين الحدث "الأول" والحدث "الثاني". يمكن أن تكون سالبة. مدة بالثواني تضم تسعة أرقام كسور كحد أقصى وتنتهي بـ " |
firstIndex |
فهرس الشحن للحدث "الأول". يجب تحديد هذا الحقل. |
secondIndex |
فهرس الشحن للحدث "الثاني". يجب تحديد هذا الحقل. |