- تمثيل 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, // Union field |
| الحقول | |
|---|---|
sideOfRoad |
اختيارية: تشير إلى أنّ الموقع الجغرافي لنقطة الطريق هذه يهدف إلى أن تتوقف المركبة على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمرّ المسار بالموقع الجغرافي لكي تتمكّن المركبة من التوقف على جانب الطريق الذي يميل إليه الموقع الجغرافي من وسط الطريق. لا يعمل هذا الخيار مع وضع التنقّل "سيرًا على الأقدام". |
vehicleStopover |
يشير إلى أنّ نقطة الطريق مخصّصة لتتوقف فيها المركبات، إما لالتقاط الركاب أو إنزالهم. لا يعمل هذا الخيار إلا مع وضع السفر "القيادة"، وعندما تكون قيمة "locationType" هي "location". تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل. |
حقل الدمج location_type طرق مختلفة لتمثيل موقع جغرافي يمكن أن تكون location_type إحدى القيم التالية فقط: |
|
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
وسائل النقل التي يمكن أن تستخدمها المركبات
يجب أن تكون هذه القيم مجموعة فرعية من وسائل النقل في Google Maps Platform Routes API، راجِع: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
ملاحظة: طرق WALKING هي في مرحلة الإصدار التجريبي وقد لا تتضمّن أحيانًا أرصفة واضحة أو ممرات للمشاة. يجب عرض هذا التحذير للمستخدم في جميع مسارات المشي التي تعرضها في تطبيقك.
| عمليات التعداد | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
وضع السفر غير المحدّد، وهو ما يعادل DRIVING. |
DRIVING |
وضع التنقّل الذي يتوافق مع اتجاهات القيادة (سيارة، وما إلى ذلك). |
WALKING |
وضع السفر الذي يتوافق مع اتجاهات المشي |
RouteModifiers
تتضمّن هذه السمة مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند احتساب مسارات المركبات. يشبه ذلك RouteModifiers في واجهة برمجة التطبيقات "المسارات المفضّلة" من Google Maps Platform. يمكنك الاطّلاع على: 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.
ومع ذلك، إذا كان المسار هو 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 هي
- الانتقال 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 |
فهرس الشحنة للحدث "الثاني" يجب تحديد هذا الحقل. |