- تمثيل JSON
- الشحنة
- VisitRequest
- LatLng
- Waypoint
- الموقع الجغرافي
- TimeWindow
- المركبة
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- الهدف
- النوع
- DurationDistanceMatrix
- الصف
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
يحتوي نموذج الشحن على مجموعة من الشحنات التي يجب أن تنفّذها مجموعة من المركبات، مع تقليل التكلفة الإجمالية، وهي مجموع ما يلي:
- تكلفة توجيه المركبات (مجموع التكلفة لكل إجمالي الوقت، والتكلفة لكل مدة رحلة، والتكلفة الثابتة لجميع المركبات).
- العقوبات المترتبة على عدم تنفيذ الشحنة
- تكلفة المدة الإجمالية للشحنات
| تمثيل JSON |
|---|
{ "shipments": [ { object ( |
| الحقول | |
|---|---|
shipments[] |
مجموعة من الشحنات التي يجب تنفيذها في النموذج |
vehicles[] |
مجموعة من المركبات التي يمكن استخدامها لإجراء الزيارات |
objectives[] |
مجموعة الأهداف لهذا النموذج، والتي سنحوّلها إلى تكاليف. إذا لم يكن النموذج فارغًا، يجب أن يكون نموذج الإدخال مجانيًا. للحصول على الطلب المعدَّل، يُرجى استخدام ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل. |
globalStartTime |
وقت البدء والانتهاء العام للنموذج: لا يمكن اعتبار أي أوقات خارج هذا النطاق صالحة. يجب أن يكون النطاق الزمني للنموذج أقل من عام، أي أنّه يجب أن يكون الفارق بين عند استخدام حقول يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
globalEndTime |
في حال عدم ضبطها، يتم استخدام 00:00:00 بالتوقيت العالمي المنسق، 1 يناير 1971 (أي الثواني: 31536000، النانو ثانية: 0) كقيمة تلقائية. يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
globalDurationCostPerHour |
"المدة الإجمالية" للخطة العامة هي الفرق بين أقرب وقت بدء فعلي وآخر وقت انتهاء فعلي لجميع المركبات. ويمكن للمستخدمين تحديد تكلفة لكل ساعة لهذه الكمية لمحاولة تحسين إكمال المهمة في أقرب وقت، على سبيل المثال. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في |
durationDistanceMatrices[] |
تحدّد مصفوفات المدة والمسافة المستخدَمة في النموذج. إذا كان هذا الحقل فارغًا، سيتم استخدام "خرائط Google" أو المسافات الجيوديسية بدلاً من ذلك، استنادًا إلى قيمة الحقل أمثلة على الاستخدام:
|
durationDistanceMatrixSrcTags[] |
علامات تحدّد مصادر مصفوفات المدة والمسافة، حيث تحدّد تتوافق العلامات مع |
durationDistanceMatrixDstTags[] |
علامات تحدّد وجهات مصفوفات المدة والمسافة، تتوافق العلامات مع |
transitionAttributes[] |
تمت إضافة سمات الانتقال إلى النموذج. |
shipmentTypeIncompatibilities[] |
مجموعات من shipment_types غير المتوافقة (يُرجى الاطّلاع على |
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 |
تحدّد هذه السمة الحد الأقصى المطلق لوقت الانحراف عن المسار مقارنةً بأقصر مسار من نقطة الاستلام إلى نقطة التسليم. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل. على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من بديل الاستلام المحدّد مباشرةً إلى بديل التسليم المحدّد. بعد ذلك، يفرض الإعداد إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، يتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر ميزة "الطرق البديلة" إلا عندما لا تعتمد مدة الرحلة على المركبات. |
pickupToDeliveryTimeLimit |
تحدّد هذه السمة الحد الأقصى للمدة من بداية الاستلام إلى بداية تسليم الشحنة. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل. ولا يعتمد ذلك على البدائل التي تم اختيارها للاستلام والتسليم، ولا على سرعة المركبة. ويمكن تحديد ذلك إلى جانب قيود الحد الأقصى للانحراف، وسيلتزم الحلّ بكلا المواصفتَين. |
shipmentType |
سلسلة غير فارغة تحدّد "نوع" هذه الشحنة. يمكن استخدام هذه الميزة لتحديد حالات عدم التوافق أو المتطلبات بين تختلف هذه السمة عن |
label |
تحدّد هذه السمة تصنيفًا لهذه الشحنة. يتم عرض هذا التصنيف في الردّ في الحقل |
ignore |
إذا كانت القيمة "صحيح"، يتم تخطّي هذه الشحنة، ولكن لا يتم تطبيق يؤدي تجاهل شحنة إلى حدوث خطأ في عملية التحقّق في حال توفّر أي يُسمح بتجاهل شحنة يتم تنفيذها في |
penaltyCost |
إذا لم تكتمل الشحنة، تتم إضافة هذه الغرامة إلى التكلفة الإجمالية للمسارات. تُعتبر الشحنة مكتملة إذا تمت زيارة أحد بدائل الاستلام والتسليم. يمكن التعبير عن التكلفة بالوحدة نفسها المستخدَمة لجميع الحقول الأخرى المتعلّقة بالتكلفة في النموذج، ويجب أن تكون موجبة. ملاحظة مهمة: إذا لم يتم تحديد هذه الغرامة، تُعتبر غير محدودة، أي يجب إكمال الشحنة. |
pickupToDeliveryRelativeDetourLimit |
تحدّد هذه السمة الحد الأقصى للوقت النسبي للانعطاف مقارنةً بأقصر مسار من نقطة الاستلام إلى نقطة التسليم. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل. على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من بديل الاستلام المحدّد مباشرةً إلى بديل التسليم المحدّد. بعد ذلك، يفرض الإعداد إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، يتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر ميزة "الطرق البديلة" إلا عندما لا تعتمد مدة الرحلة على المركبات. |
VisitRequest
طلب زيارة يمكن إجراؤها بواسطة مركبة: يتضمّن موقعًا جغرافيًا (أو موقعَين، انظر أدناه)، وأوقات فتح وإغلاق ممثَّلة بنوافذ زمنية، ومدة خدمة (الوقت الذي تقضيه المركبة بعد وصولها لاستلام السلع أو تسليمها).
| تمثيل JSON |
|---|
{ "arrivalLocation": { object ( |
| الحقول | |
|---|---|
arrivalLocation |
الموقع الجغرافي الذي تصل إليه المركبة عند تنفيذ |
arrivalWaypoint |
النقطة على المسار التي تصل إليها المركبة عند تنفيذ |
departureLocation |
الموقع الجغرافي الذي تغادر منه المركبة بعد إكمال |
departureWaypoint |
النقطة على المسار التي تغادر منها المركبة بعد إكمال هذه |
tags[] |
تحدّد هذه المَعلمة العلامات المرفقة بطلب الزيارة. لا يُسمح بالسلاسل الفارغة أو المكرّرة. |
timeWindows[] |
النوافذ الزمنية التي تقيّد وقت الوصول إلى الزيارة يُرجى العِلم أنّ المركبة قد تغادر خارج الإطار الزمني للوصول، أي أنّ وقت الوصول والمدة لا يلزم أن يكونا ضمن إطار زمني. قد يؤدي ذلك إلى الانتظار إذا وصلت المركبة قبل يعني عدم توفّر يجب أن تكون النوافذ الزمنية منفصلة، أي يجب ألا تتداخل أي نافذة زمنية مع نافذة أخرى أو تكون مجاورة لها، ويجب أن تكون بترتيب تصاعدي. لا يمكن ضبط |
duration |
مدة الزيارة، أي الوقت الذي تقضيه المركبة بين الوصول والمغادرة (تتم إضافته إلى وقت الانتظار المحتمل، راجِع |
cost |
تكلفة خدمة طلب الزيارة هذا على مسار مركبة معيّن يمكن استخدام هذه السمة لدفع تكاليف مختلفة لكل عملية استلام أو تسليم بديلة لشحنة معيّنة. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في |
loadDemands |
تحميل متطلبات طلب الزيارة هذا يشبه هذا الحقل حقل |
visitTypes[] |
تحدّد هذه السمة أنواع الزيارة. ويمكن استخدام هذه السمة لتخصيص وقت إضافي مطلوب لمركبة لإكمال هذه الزيارة (راجِع يمكن أن يظهر النوع مرة واحدة فقط. |
label |
يحدّد تصنيفًا لـ |
avoidUTurns |
يحدّد ما إذا كان يجب تجنُّب الانعطافات على شكل حرف U في مسارات القيادة في هذا الموقع الجغرافي. يتم تجنُّب الانعطاف للخلف قدر الإمكان، ولكن لا يمكن ضمان تجنُّبه بالكامل. هذه ميزة تجريبية وقد يتغيّر سلوكها. ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request لمزيد من التفاصيل. |
LatLng
عنصر يمثّل زوجًا من خطوط العرض/الطول ويتم التعبير عن ذلك كزوج من القيم العشرية المزدوجة لتمثيل درجات خط العرض ودرجات خط الطول. ما لم يُذكر خلاف ذلك، يجب أن يتوافق هذا العنصر مع معيار WGS84. يجب أن تكون القيم ضمن النطاقات التي تمّت تسويتها.
| تمثيل JSON |
|---|
{ "latitude": number, "longitude": number } |
| الحقول | |
|---|---|
latitude |
خط العرض بالدرجات يجب أن يكون في النطاق [-90.0, +90.0]. |
longitude |
خط الطول بالدرجات يجب أن يكون في النطاق [-180.0, +180.0]. |
النقطة الوسيطة
يغلّف نقطة على المسار. تحدّد النقاط على المسار مواقع الوصول والمغادرة لطلبات الزيارة، ومواقع البدء والانتهاء للمركبات.
| تمثيل JSON |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| الحقول | |
|---|---|
sideOfRoad |
اختيارية: تشير إلى أنّ الموقع الجغرافي لهذه النقطة على المسار يهدف إلى تفضيل توقّف المركبة على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمرّ المسار عبر الموقع الجغرافي لكي تتمكّن المركبة من التوقّف على جانب الطريق الذي يميل إليه الموقع الجغرافي من وسط الطريق. لا يعمل هذا الخيار مع وضع السفر "WALKING". |
vehicleStopover |
يشير هذا الخيار إلى أنّ النقطة على المسار مخصّصة لتوقّف المركبات، حيث يكون الهدف إمّا الركوب أو النزول. لا يعمل هذا الخيار إلا مع وضع السفر "القيادة"، وعندما يكون "locationType" هو "location". تجريبي: قد يتغيّر سلوك هذا الحقل أو وجوده في المستقبل. |
| طرق مختلفة لتمثيل موقع جغرافي في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد: | |
location |
نقطة محدّدة باستخدام الإحداثيات الجغرافية، بما في ذلك عنوان اختياري |
placeId |
رقم تعريف المكان المرتبط بنقطة المسار عند استخدام رقم تعريف مكان لتحديد موقع الوصول أو المغادرة في VisitRequest، استخدِم رقم تعريف مكان محدّدًا بما يكفي لتحديد موقع LatLng للانتقال إلى المكان. على سبيل المثال، يُعدّ رقم تعريف المكان الذي يمثّل مبنى مناسبًا، ولكن لا يُنصح باستخدام رقم تعريف المكان الذي يمثّل طريقًا. |
| نهاية الحقول التي يستبعد كلّ منها الآخر | |
الموقع الجغرافي
تتضمّن موقعًا جغرافيًا (نقطة جغرافية وعنوانًا اختياريًا).
| تمثيل JSON |
|---|
{
"latLng": {
object ( |
| الحقول | |
|---|---|
latLng |
الإحداثيات الجغرافية للنقطة على المسار |
heading |
اتجاه البوصلة المرتبط باتجاه تدفق حركة المرور تُستخدَم هذه القيمة لتحديد جانب الطريق الذي يجب استخدامه للركوب والنزول. يمكن أن تتراوح قيم الاتجاه من 0 إلى 360، حيث يشير الرقم 0 إلى اتجاه الشمال، ويشير الرقم 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 |
وقت بدء الفترة الزمنية الصارمة في حال عدم تحديدها، سيتم ضبطها على يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
endTime |
وقت انتهاء الفترة الزمنية الصارمة في حال عدم تحديدها، سيتم ضبطها على يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
softStartTime |
وقت البدء المرن للفترة الزمنية يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
softEndTime |
وقت الانتهاء المرن للنافذة الزمنية يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
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
أنماط السفر التي يمكن للمركبات استخدامها
يجب أن تكون هذه مجموعة فرعية من أوضاع السفر في Routes API ضمن "منصة خرائط Google". يُرجى الاطّلاع على: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
ملاحظة: مسارات WALKING في مرحلة تجريبية، وقد لا تتوفّر أحيانًا أرصفة أو مسارات واضحة للمشاة. يجب عرض هذا التحذير للمستخدم لجميع مسارات المشي التي تعرضها في تطبيقك.
| عمليات التعداد | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
وسيلة نقل غير محدّدة، تعادل DRIVING. |
DRIVING |
وضع السفر المقابل لاتجاهات القيادة (سيارة، ...). |
WALKING |
وسيلة النقل المقابلة لاتجاهات المشي |
TWO_WHEELER |
مركبة آلية ذات عجلتين على سبيل المثال، دراجة نارية. يُرجى العِلم أنّ هذا يختلف عن وسيلة النقل "ركوب الدراجات" التي تشمل وسيلة النقل التي تعمل بالطاقة البشرية. لا تتوفّر وسيلة النقل هذه إلا في البلدان المدرَجة في البلدان والمناطق التي تتوفّر فيها ميزة المركبات ذات العجلتين. |
RouteModifiers
تتضمّن مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند احتساب مسارات المركبات. يشبه هذا الحقل RouteModifiers في Routes Preferred API ضمن "منصة خرائط 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
تحدّد هذه السمة الحدّ الأقصى للحمولة المسموح بها في مركبة معيّنة، مثل "لا يمكن لهذه الشاحنة أن تحمل أكثر من 3, 500 كغم". يمكنك الاطّلاع على loadLimits.
| تمثيل JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| الحقول | |
|---|---|
softMaxLoad |
الحدّ الأقصى المرن للحِمل يمكنك الاطّلاع على |
costPerUnitAboveSoftMax |
إذا تجاوزت الحمولة في أي وقت |
startLoadInterval |
تمثّل هذه السمة الفاصل الزمني المقبول للحمولة في المركبة في بداية المسار. |
endLoadInterval |
تمثّل هذه السمة الفاصل الزمني المقبول للحمولة في المركبة في نهاية المسار. |
maxLoad |
الحد الأقصى المقبول للحِمل |
costPerKilometer |
تكلفة نقل وحدة واحدة من الحمولة لمسافة كيلومتر واحد لهذه المركبة يمكن استخدام ذلك كمؤشر لاستهلاك الوقود: إذا كان الحِمل عبارة عن وزن (بالنيوتن)، فإنّ الحِمل*كيلومتر له بُعد الطاقة. ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل. |
costPerTraveledHour |
تكلفة السفر بوحدة حمولة خلال ساعة واحدة لهذه المركبة. ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل. |
الفاصل الزمني
الفاصل الزمني لمقادير الحمل المقبولة
| تمثيل 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
}
}
}
ومسارها هو: البداية، الاستلام، الاستلام، التسليم، التسليم، النهاية مع عمليات النقل:
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.
ومع ذلك، إذا كان المسار هو "البداية"، و"الاستلام"، و"التسليم"، و"الاستلام"، و"التسليم"، و"النهاية" مع عمليات الانتقال:
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 هي
- الانتقال 0: 0.0
- الانتقال 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- الانتقال 2: 0.0
- الانتقال 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- الانتقال 4: 0.0
في هذه الحالة، تكون قيمة LoadCost على المسار 40.0.
LoadCost يجعل الحلول التي تتضمّن عمليات نقل ثقيلة أكثر تكلفة.
ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.
| تمثيل 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 |
الحقل مطلوب. الحدّ الأدنى (شامل) لبداية الاستراحة يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
latestStartTime |
الحقل مطلوب. الحدّ الأقصى (شاملاً) لبداية الاستراحة يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
minDuration |
الحقل مطلوب. الحدّ الأدنى لمدة الفاصل الإعلاني يجب أن تكون القيمة موجبة. |
FrequencyConstraint
يمكن فرض قيود إضافية على معدّل تكرار الاستراحات ومدتها المحدّدة أعلاه، وذلك من خلال فرض حدّ أدنى لمعدّل تكرار الاستراحات، مثل "يجب أن تكون هناك استراحة لمدة ساعة واحدة على الأقل كل 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 |
الحقل مطلوب. الحد الأقصى المسموح به لأي فاصل زمني في المسار لا يتضمّن استراحة لمدة |
الهدف
تحلّ الأهداف محلّ نموذج التكلفة بالكامل، وبالتالي فهي غير متوافقة مع التكاليف الحالية. يتم ربط كل هدف بعدد من التكاليف المحدّدة مسبقًا، مثل المركبات أو الشحنات أو سمات الانتقال.
ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.
| تمثيل JSON |
|---|
{
"type": enum ( |
| الحقول | |
|---|---|
type |
نوع الهدف |
weight |
مدى أهمية هذا الهدف مقارنةً بالأهداف الأخرى يمكن أن تكون هذه القيمة أي رقم غير سالب، ولا يجب أن يكون مجموع الأوزان 1. تكون القيم التلقائية للأوزان 1.0. |
النوع
نوع الهدف الذي سيتم ربطه بمجموعة من التكاليف
| عمليات التعداد | |
|---|---|
DEFAULT |
سيتم استخدام مجموعة تلقائية من التكاليف لضمان الحصول على حلّ معقول. ملاحظة: يمكن استخدام هذا الهدف بمفرده، ولكن ستتم إضافته دائمًا مع الوزن 1.0، كمرجع، إلى الأهداف التي يحدّدها المستخدم، إذا لم تكن متوفّرة من قبل. |
MIN_DISTANCE |
"الحد الأدنى". تقليل إجمالي المسافة المقطوعة إلى أدنى حدّ |
MIN_WORKING_TIME |
تقليل إجمالي وقت العمل، الذي يتم جمعه على جميع المركبات. |
MIN_TRAVEL_TIME |
ينطبق ذلك على ما سبق، ولكن مع التركيز على مدة الرحلة فقط. |
MIN_NUM_VEHICLES |
تقليل عدد المركبات المستخدَمة |
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 |
علامات تحدّد مجموعة عمليات الانتقال (من المصدر إلى الوجهة) التي تنطبق عليها هذه السمات تتطابق زيارة المصدر أو بداية المركبة إذا كان |
excludedSrcTag |
يمكنك الاطّلاع على |
dstTag |
تتطابق زيارة الوجهة أو نهاية الرحلة بالمركبة إذا كان |
excludedDstTag |
يمكنك الاطّلاع على |
cost |
يحدّد تكلفة تنفيذ هذا الانتقال. يجب أن تكون هذه القيمة بالوحدة نفسها التي تستخدمها جميع التكاليف الأخرى في النموذج، ويجب ألا تكون سالبة. ويتم تطبيقها بالإضافة إلى جميع التكاليف الحالية الأخرى. |
costPerKilometer |
تحدّد هذه السمة التكلفة لكل كيلومتر يتم تطبيقها على المسافة المقطوعة أثناء تنفيذ هذه الرحلة. تتم إضافة هذه السمة إلى أيّ سمة |
distanceLimit |
تحدّد هذه السمة حدًا أقصى للمسافة المقطوعة أثناء إجراء هذا الانتقال. اعتبارًا من حزيران (يونيو) 2021، لا تتوفّر سوى الحدود غير الصارمة. |
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 على الأقل من بدء الحدث "الأول".
يمكن أن تشير عدة أسبقيات إلى الأحداث نفسها (أو ذات الصلة)، على سبيل المثال، "يتم استلام B بعد تسليم A" و "يتم استلام C بعد استلام B".
علاوةً على ذلك، لا تنطبق الأسبقية إلا عند تنفيذ كلتا الشحنتَين، ويتم تجاهلها في الحالات الأخرى.
| تمثيل JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| الحقول | |
|---|---|
firstIsDelivery |
تشير إلى ما إذا كان الحدث "الأول" هو تسليم. |
secondIsDelivery |
يشير إلى ما إذا كان الحدث "الثاني" هو عملية تسليم. |
offsetDuration |
الإزاحة بين الحدث "الأول" و "الثاني". ويمكن أن تكون سلبية. |
firstIndex |
فهرس الشحنة للحدث "الأول". يجب تحديد هذا الحقل. |
secondIndex |
فهرس شحنة الحدث "الثاني". يجب تحديد هذا الحقل. |