- تمثيل 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[] |
مجموعة من المركبات التي يمكن استخدامها لإجراء الزيارات |
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 هو أقصر وقت يستغرقه الانتقال من خيار الاستلام المحدّد إلى خيار التسليم المحدّد. بعد ذلك، يفرض الإعداد إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من 10/2017، لا تتوفّر الطرق الفرعية إلا عندما لا تعتمد مدة الرحلة على المركبات. |
pickupToDeliveryTimeLimit |
تحدّد هذه السمة الحد الأقصى للمدة الزمنية من بداية الاستلام إلى بداية تسليم الشحنة. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وتسليم واحدة على الأقل. ولا يعتمد ذلك على البدائل المحدّدة للاستلام والتسليم، ولا على سرعة المركبة. يمكن تحديد ذلك إلى جانب قيود الحد الأقصى للانحراف عن المسار: سيلتزم الحلّ بكلتا المواصفات. |
shipmentType |
سلسلة غير فارغة تحدّد "نوع" الشحنة. يمكن استخدام هذه الميزة لتحديد حالات عدم التوافق أو المتطلبات بين يختلف عن |
label |
تحدّد هذه السمة تصنيفًا لهذه الشحنة. يتم عرض هذا التصنيف في الردّ في |
ignore |
إذا كانت القيمة صحيحة، تخطَّ هذه الشحنة، ولكن لا تطبِّق سيؤدي تجاهل شحنة إلى حدوث خطأ في التحقّق عند توفّر أي يُسمح بتجاهل شحنة يتم تنفيذها في |
penaltyCost |
في حال عدم إكمال الشحنة، تتم إضافة هذه الغرامة إلى التكلفة الإجمالية للمسارات. يُعدّ الشحن مكتملاً إذا تم الانتقال إلى أحد بدائل الاستلام والتسليم. يمكن التعبير عن التكلفة بالوحدة نفسها المستخدَمة في جميع الحقول الأخرى ذات الصلة بالتكلفة في النموذج، ويجب أن تكون موجبة. ملاحظة مهمة: إذا لم يتم تحديد هذه الغرامة، سيتم اعتبارها غير محدودة، أي يجب إكمال الشحنة. |
pickupToDeliveryRelativeDetourLimit |
تحدّد هذه السمة الحد الأقصى لوقت الانحراف النسبي مقارنةً بأقصر مسار من موقع الاستلام إلى موقع التسليم. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وتسليم واحدة على الأقل. على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من خيار الاستلام المحدّد إلى خيار التسليم المحدّد. بعد ذلك، يفرض الإعداد إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من 10/2017، لا تتوفّر الطرق الفرعية إلا عندما لا تعتمد مدة الرحلة على المركبات. |
VisitRequest
طلب زيارة يمكن إجراؤها بواسطة مركبة: يتضمّن الموقع الجغرافي (أو موقعَين جغرافيَين، كما هو موضّح أدناه) وأوقات الفتح والإغلاق ممثّلة بنطاقات زمنية، ومدة الخدمة (الوقت الذي تستغرقه المركبة بعد وصولها لاستلام السلع أو تسليمها).
| تمثيل JSON |
|---|
{ "arrivalLocation": { object ( |
| الحقول | |
|---|---|
arrivalLocation |
الموقع الجغرافي الذي تصل إليه المركبة عند تنفيذ |
arrivalWaypoint |
نقطة الطريق التي تصل إليها المركبة عند تنفيذ هذا |
departureLocation |
الموقع الجغرافي الذي تغادر منه المركبة بعد إكمال هذه |
departureWaypoint |
نقطة المرور التي تغادرها المركبة بعد إكمال هذه |
tags[] |
تحدّد هذه السمة العلامات المرفقة بطلب الزيارة. لا يُسمح باستخدام سلاسل فارغة أو مكرّرة. |
timeWindows[] |
فترات زمنية تقيّد وقت الوصول إلى موقع جغرافي. يُرجى العِلم أنّه يمكن أن تغادر المركبة خارج نطاق وقت الوصول، أي أنّ وقت الوصول + المدة لا يجب أن يكونا ضمن نطاق زمني. قد يؤدي ذلك إلى وقت انتظار إذا وصلت المركبة قبل يشير عدم توفّر يجب أن تكون الفترات الزمنية منفصلة، أي يجب ألا تتداخل أي فترة زمنية مع فترة أخرى أو تكون مجاورة لها، ويجب أن تكون بالترتيب التصاعدي. لا يمكن ضبط |
duration |
مدة الزيارة، أي الوقت الذي تقضيه المركبة بين الوصول والمغادرة (سيتم إضافته إلى مدة الانتظار المحتملة، راجِع |
cost |
تكلفة تقديم خدمة طلب الزيارة هذا على مسار مركبة يمكن استخدام هذه السمة لدفع تكاليف مختلفة لكل خيار بديل لاستلام الشحنة أو تسليمها. يجب أن تكون هذه التكلفة بالوحدة نفسها التي تستخدمها السمة |
loadDemands |
حمِّل طلبات زيارة هذا الموقع. هذا الحقل يشبه الحقل |
visitTypes[] |
تحدّد هذه السمة أنواع الزيارات. يمكن استخدام هذه السمة لتخصيص وقت إضافي يحتاج إليه أحد المركبات لإكمال هذه الزيارة (راجِع لا يمكن أن يظهر النوع إلا مرة واحدة. |
label |
تحدّد هذه السمة تصنيفًا لـ |
avoidUTurns |
تحدّد هذه السمة ما إذا كان يجب تجنُّب المنعطفات على شكل حرف U في مسارات القيادة في هذا الموقع الجغرافي. يتم بذل أقصى جهد لتجنُّب المنعطفات على شكل حرف 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]. |
النقطة الوسيطة
تغليف نقطة طريق تشير نقاط الطريق إلى مواقع الوصول والمغادرة الخاصة بـ VisitRequests، ومواقع البدء والانتهاء الخاصة بـ Vehicles.
| تمثيل 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 |
اختيارية: تشير إلى أنّ الموقع الجغرافي لنقطة على المسار هذه يهدف إلى أن تفضّل المركبة التوقف على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمر المسار بالموقع الجغرافي لكي تتمكّن المركبة من التوقف على جانب الطريق الذي يميل إليه الموقع الجغرافي من وسط الطريق. لا يعمل هذا الخيار مع وسيلة النقل "سيرًا على الأقدام". |
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 |
وسيلة النقل التي تتوافق مع اتجاهات المشي |
RouteModifiers
تتضمّن هذه السمة مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند احتساب مسارات المركبات. هذا مشابه لـ RouteModifiers في Google Maps Platform Routes Preferred API. يمكنك الاطّلاع على: 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 |
تكلفة نقل وحدة واحدة من الحمولة لمسافة كيلومتر واحد لهذه المركبة ويمكن استخدام ذلك كبديل لاستهلاك الوقود: إذا كان الحمل عبارة عن وزن (بالنيوتن)، فإنّ الحمل*الكيلومتر يكون له بُعد الطاقة. تجريبي: يُرجى الاطّلاع على 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/06، لا يمكن استخدام سوى الحدود المرنة. |
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 |
فهرس الشحنة للحدث "الثاني" يجب تحديد هذا الحقل. |