ShipmentModel

يحتوي نموذج الشحن على مجموعة من الشحنات التي يجب أن تنفّذها مجموعة من المركبات، مع تقليل التكلفة الإجمالية، وهي مجموع ما يلي:

  • تكلفة توجيه المركبات (مجموع التكلفة لكل إجمالي الوقت، والتكلفة لكل مدة رحلة، والتكلفة الثابتة لجميع المركبات).
  • العقوبات المترتبة على عدم تنفيذ الشحنة
  • تكلفة المدة الإجمالية للشحنات
تمثيل JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
الحقول
shipments[]

object (Shipment)

مجموعة من الشحنات التي يجب تنفيذها في النموذج

vehicles[]

object (Vehicle)

مجموعة من المركبات التي يمكن استخدامها لإجراء الزيارات

objectives[]

object (Objective)

مجموعة الأهداف لهذا النموذج، والتي سنحوّلها إلى تكاليف. إذا لم يكن النموذج فارغًا، يجب أن يكون نموذج الإدخال مجانيًا. للحصول على الطلب المعدَّل، يُرجى استخدام solvingMode = TRANSFORM_AND_RETURN_REQUEST. يُرجى العِلم أنّه لن يتم حلّ الطلب في هذه الحالة. يُرجى الاطّلاع على المستندات ذات الصلة.

ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

globalStartTime

string (Timestamp format)

وقت البدء والانتهاء العام للنموذج: لا يمكن اعتبار أي أوقات خارج هذا النطاق صالحة.

يجب أن يكون النطاق الزمني للنموذج أقل من عام، أي أنّه يجب أن يكون الفارق بين globalEndTime وglobalStartTime أقل من 31,536,000 ثانية.

عند استخدام حقول cost_per_*hour، قد تحتاج إلى ضبط هذه النافذة على فترة زمنية أصغر لزيادة الأداء (على سبيل المثال، إذا كنت تنشئ نموذجًا ليوم واحد، عليك ضبط الحدود الزمنية العامة على ذلك اليوم). في حال عدم ضبط هذه القيمة، يتم استخدام 00:00:00 بالتوقيت العالمي المنسق، 1 يناير 1970 (أي الثواني: 0، النانو ثانية: 0) كقيمة تلقائية.

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

globalEndTime

string (Timestamp format)

في حال عدم ضبطها، يتم استخدام 00:00:00 بالتوقيت العالمي المنسق، 1 يناير 1971 (أي الثواني: 31536000، النانو ثانية: 0) كقيمة تلقائية.

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

globalDurationCostPerHour

number

"المدة الإجمالية" للخطة العامة هي الفرق بين أقرب وقت بدء فعلي وآخر وقت انتهاء فعلي لجميع المركبات. ويمكن للمستخدمين تحديد تكلفة لكل ساعة لهذه الكمية لمحاولة تحسين إكمال المهمة في أقرب وقت، على سبيل المثال. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

تحدّد مصفوفات المدة والمسافة المستخدَمة في النموذج. إذا كان هذا الحقل فارغًا، سيتم استخدام "خرائط Google" أو المسافات الجيوديسية بدلاً من ذلك، استنادًا إلى قيمة الحقل useGeodesicDistances. إذا لم يكن فارغًا، لا يمكن أن يكون useGeodesicDistances صحيحًا ولا يمكن أن يكون durationDistanceMatrixSrcTags أو durationDistanceMatrixDstTags فارغًا.

أمثلة على الاستخدام:

  • هناك موقعان جغرافيان: locA وlocB.
  • مركبة واحدة تبدأ مسارها من locA وتنتهي عند locA.
  • طلب زيارة واحد لاستلام الطلب في الموقع الجغرافي B
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • هناك ثلاثة مواقع جغرافية: الموقع "أ" والموقع "ب" والموقع "ج".
  • مركبة واحدة تبدأ مسارها في locA وتنتهي في locB، باستخدام مصفوفة "fast".
  • مركبة واحدة تبدأ مسارها في locB وتنتهي في locB، باستخدام مصفوفة "بطيئة".
  • مركبة واحدة تبدأ مسارها في locB وتنتهي في locB، باستخدام مصفوفة "fast".
  • طلب زيارة واحد لاستلام الطلب في الموقع الجغرافي C
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

علامات تحدّد مصادر مصفوفات المدة والمسافة، حيث تحدّد durationDistanceMatrices(i).rows(j) المدد والمسافات من الزيارات التي تحمل العلامة durationDistanceMatrixSrcTags(j) إلى الزيارات الأخرى في المصفوفة i.

تتوافق العلامات مع VisitRequest.tags أو Vehicle.start_tags. يجب أن يتطابق VisitRequest أو Vehicle معيّن مع علامة واحدة بالضبط في هذا الحقل. يُرجى العِلم أنّ علامات المصدر والوجهة والمصفوفة في Vehicle قد تكون متطابقة، وبالمثل قد تكون علامات المصدر والوجهة في VisitRequest متطابقة. يجب أن تكون جميع العلامات مختلفة ولا يمكن أن تكون سلاسل فارغة. إذا لم يكن هذا الحقل فارغًا، يجب ألا يكون الحقل durationDistanceMatrices فارغًا.

durationDistanceMatrixDstTags[]

string

علامات تحدّد وجهات مصفوفات المدة والمسافة، durationDistanceMatrices(i).rows(j).durations(k) (أو يحدّد durationDistanceMatrices(i).rows(j).meters(k)) مدة (أو مسافة) السفر من الزيارات التي تحمل العلامة durationDistanceMatrixSrcTags(j) إلى الزيارات التي تحمل العلامة durationDistanceMatrixDstTags(k) في المصفوفة i.

تتوافق العلامات مع VisitRequest.tags أو Vehicle.start_tags. يجب أن يتطابق VisitRequest أو Vehicle معيّن مع علامة واحدة بالضبط في هذا الحقل. يُرجى العِلم أنّ علامات المصدر والوجهة والمصفوفة في Vehicle قد تكون متطابقة، وبالمثل قد تكون علامات المصدر والوجهة في VisitRequest متطابقة. يجب أن تكون جميع العلامات مختلفة ولا يمكن أن تكون سلاسل فارغة. إذا لم يكن هذا الحقل فارغًا، يجب ألا يكون الحقل durationDistanceMatrices فارغًا.

transitionAttributes[]

object (TransitionAttributes)

تمت إضافة سمات الانتقال إلى النموذج.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

مجموعات من shipment_types غير المتوافقة (يُرجى الاطّلاع على ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

مجموعات من متطلبات shipmentType (يُرجى الاطّلاع على ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

مجموعة من قواعد الأولوية التي يجب فرضها في النموذج

ملاحظة مهمة: يؤدي استخدام قواعد الأولوية إلى الحدّ من حجم المشكلة التي يمكن تحسينها. قد يتم رفض الطلبات التي تستخدم قواعد الأولوية التي تتضمّن العديد من الشحنات.

maxActiveVehicles

integer

يفرض قيودًا على الحد الأقصى لعدد المركبات النشطة. تكون المركبة نشطة إذا كان مسارها ينفّذ شحنة واحدة على الأقل. يمكن استخدام هذه الميزة للحدّ من عدد المسارات في حال كان عدد السائقين أقل من عدد المركبات وكان أسطول المركبات غير متجانس. بعد ذلك، سيختار التحسين أفضل مجموعة فرعية من المركبات لاستخدامها. يجب أن تكون القيمة موجبة تمامًا.

الشحن

شحنة سلعة واحدة، من إحدى عمليات الاستلام إلى إحدى عمليات التسليم. لكي يتم اعتبار الشحنة على أنّها تم تنفيذها، يجب أن تزور مركبة فريدة أحد مواقع الاستلام (وتقلّل من سعاتها الاحتياطية وفقًا لذلك)، ثم تزور أحد مواقع التسليم لاحقًا (وبالتالي تزيد من سعاتها الاحتياطية وفقًا لذلك).

تمثيل JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
الحقول
displayName

string

الاسم المعروض للشحنة الذي يحدّده المستخدم ويمكن أن يصل طوله إلى 63 حرفًا، ويمكن أن يستخدم أحرف UTF-8.

pickups[]

object (VisitRequest)

مجموعة من بدائل الاستلام المرتبطة بالشحنة في حال عدم تحديدها، يجب أن تزور المركبة فقط موقعًا جغرافيًا يتوافق مع عمليات التسليم.

deliveries[]

object (VisitRequest)

مجموعة من بدائل التسليم المرتبطة بالشحنة في حال عدم تحديد هذه السمة، يجب أن تزور المركبة فقط الموقع الجغرافي المقابل لعمليات الاستلام.

loadDemands

map (key: string, value: object (Load))

متطلبات حمولة الشحنة (مثل الوزن والحجم وعدد المنصات النقالة وما إلى ذلك) يجب أن تكون المفاتيح في الخريطة معرّفات تصف نوع الحمولة المقابلة، ومن الأفضل أن تتضمّن أيضًا الوحدات. على سبيل المثال: "weight_kg" و"volume_gallons" و"pallet_count" وما إلى ذلك. إذا لم يظهر مفتاح معيّن في الدالة، يتم اعتبار الحمولة المقابلة فارغة.

allowedVehicleIndices[]

integer

مجموعة المركبات التي قد تنفّذ عملية الشحن هذه إذا كان هذا الحقل فارغًا، يمكن لجميع المركبات تنفيذ المهمة. يتم تحديد المركبات من خلال فهرسها في قائمة vehicles الخاصة بـ ShipmentModel.

costsPerVehicle[]

number

يحدّد التكلفة التي يتم تحمّلها عند تسليم هذه الشحنة بواسطة كل مركبة. في حال تحديدها، يجب أن تتضمّن أيًا مما يلي:

  • عدد العناصر نفسه في costsPerVehicleIndices. تمثّل السمة costsPerVehicle[i] المركبة costsPerVehicleIndices[i] في النموذج.
  • عدد العناصر نفسه لعدد المركبات في النموذج. يتجاوب العنصر i مع المركبة رقم i في النموذج.

يجب أن تكون هذه التكاليف بالوحدة نفسها المستخدَمة في penaltyCost ويجب ألا تكون سالبة. اترك هذا الحقل فارغًا في حال عدم توفّر هذه التكاليف.

costsPerVehicleIndices[]

integer

مؤشرات المركبات التي ينطبق عليها costsPerVehicle. إذا لم تكن فارغة، يجب أن تحتوي على عدد العناصر نفسه في costsPerVehicle. لا يجوز تحديد فهرس مركبة أكثر من مرة. إذا تم استبعاد مركبة من costsPerVehicleIndices، تكون تكلفتها صفرًا.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

تحدّد هذه السمة الحد الأقصى المطلق لوقت الانحراف عن المسار مقارنةً بأقصر مسار من نقطة الاستلام إلى نقطة التسليم. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل.

على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من بديل الاستلام المحدّد مباشرةً إلى بديل التسليم المحدّد. بعد ذلك، يفرض الإعداد pickupToDeliveryAbsoluteDetourLimit ما يلي:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، يتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر ميزة "الطرق البديلة" إلا عندما لا تعتمد مدة الرحلة على المركبات.

pickupToDeliveryTimeLimit

string (Duration format)

تحدّد هذه السمة الحد الأقصى للمدة من بداية الاستلام إلى بداية تسليم الشحنة. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل. ولا يعتمد ذلك على البدائل التي تم اختيارها للاستلام والتسليم، ولا على سرعة المركبة. ويمكن تحديد ذلك إلى جانب قيود الحد الأقصى للانحراف، وسيلتزم الحلّ بكلا المواصفتَين.

shipmentType

string

سلسلة غير فارغة تحدّد "نوع" هذه الشحنة. يمكن استخدام هذه الميزة لتحديد حالات عدم التوافق أو المتطلبات بين shipment_types (يُرجى الاطّلاع على shipmentTypeIncompatibilities وshipmentTypeRequirements في ShipmentModel).

تختلف هذه السمة عن visitTypes التي يتم تحديدها لزيارة واحدة: تتشارك جميع عمليات الاستلام/التسليم التي تنتمي إلى الشحنة نفسها السمة shipmentType نفسها.

label

string

تحدّد هذه السمة تصنيفًا لهذه الشحنة. يتم عرض هذا التصنيف في الردّ في الحقل shipmentLabel من السمة ShipmentRoute.Visit المقابلة.

ignore

boolean

إذا كانت القيمة "صحيح"، يتم تخطّي هذه الشحنة، ولكن لا يتم تطبيق penaltyCost.

يؤدي تجاهل شحنة إلى حدوث خطأ في عملية التحقّق في حال توفّر أي shipmentTypeRequirements في النموذج.

يُسمح بتجاهل شحنة يتم تنفيذها في injectedFirstSolutionRoutes أو injectedSolutionConstraint، ويزيل الحلّال زيارات الاستلام/التسليم ذات الصلة من المسار الذي يتم تنفيذه. وسيتم أيضًا تجاهل precedenceRules التي تشير إلى الشحنات التي تم تجاهلها.

penaltyCost

number

إذا لم تكتمل الشحنة، تتم إضافة هذه الغرامة إلى التكلفة الإجمالية للمسارات. تُعتبر الشحنة مكتملة إذا تمت زيارة أحد بدائل الاستلام والتسليم. يمكن التعبير عن التكلفة بالوحدة نفسها المستخدَمة لجميع الحقول الأخرى المتعلّقة بالتكلفة في النموذج، ويجب أن تكون موجبة.

ملاحظة مهمة: إذا لم يتم تحديد هذه الغرامة، تُعتبر غير محدودة، أي يجب إكمال الشحنة.

pickupToDeliveryRelativeDetourLimit

number

تحدّد هذه السمة الحد الأقصى للوقت النسبي للانعطاف مقارنةً بأقصر مسار من نقطة الاستلام إلى نقطة التسليم. إذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وعملية تسليم واحدة على الأقل.

على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من بديل الاستلام المحدّد مباشرةً إلى بديل التسليم المحدّد. بعد ذلك، يفرض الإعداد pickupToDeliveryRelativeDetourLimit ما يلي:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، يتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من تشرين الأول (أكتوبر) 2017، لا تتوفّر ميزة "الطرق البديلة" إلا عندما لا تعتمد مدة الرحلة على المركبات.

VisitRequest

طلب زيارة يمكن إجراؤها بواسطة مركبة: يتضمّن موقعًا جغرافيًا (أو موقعَين، انظر أدناه)، وأوقات فتح وإغلاق ممثَّلة بنوافذ زمنية، ومدة خدمة (الوقت الذي تقضيه المركبة بعد وصولها لاستلام السلع أو تسليمها).

تمثيل JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
الحقول
arrivalLocation

object (LatLng)

الموقع الجغرافي الذي تصل إليه المركبة عند تنفيذ VisitRequest. إذا كان نموذج الشحنة يحتوي على مصفوفات مسافة المدة، يجب عدم تحديد arrivalLocation.

arrivalWaypoint

object (Waypoint)

النقطة على المسار التي تصل إليها المركبة عند تنفيذ VisitRequest. إذا كان نموذج الشحنة يحتوي على مصفوفات مسافة المدة، يجب عدم تحديد arrivalWaypoint.

departureLocation

object (LatLng)

الموقع الجغرافي الذي تغادر منه المركبة بعد إكمال VisitRequest. يمكن حذفها إذا كانت مماثلة لسمة arrivalLocation. إذا كان نموذج الشحنة يحتوي على مصفوفات مسافة المدة، يجب عدم تحديد departureLocation.

departureWaypoint

object (Waypoint)

النقطة على المسار التي تغادر منها المركبة بعد إكمال هذه VisitRequest. يمكن حذفها إذا كانت مماثلة لسمة arrivalWaypoint. إذا كان نموذج الشحنة يحتوي على مصفوفات مسافة المدة، يجب عدم تحديد departureWaypoint.

tags[]

string

تحدّد هذه المَعلمة العلامات المرفقة بطلب الزيارة. لا يُسمح بالسلاسل الفارغة أو المكرّرة.

timeWindows[]

object (TimeWindow)

النوافذ الزمنية التي تقيّد وقت الوصول إلى الزيارة يُرجى العِلم أنّ المركبة قد تغادر خارج الإطار الزمني للوصول، أي أنّ وقت الوصول والمدة لا يلزم أن يكونا ضمن إطار زمني. قد يؤدي ذلك إلى الانتظار إذا وصلت المركبة قبل TimeWindow.start_time.

يعني عدم توفّر TimeWindow أنّ المركبة يمكنها إجراء هذه الزيارة في أي وقت.

يجب أن تكون النوافذ الزمنية منفصلة، أي يجب ألا تتداخل أي نافذة زمنية مع نافذة أخرى أو تكون مجاورة لها، ويجب أن تكون بترتيب تصاعدي.

لا يمكن ضبط costPerHourAfterSoftEndTime وsoftEndTime إلا إذا كانت هناك نافذة زمنية واحدة.

duration

string (Duration format)

مدة الزيارة، أي الوقت الذي تقضيه المركبة بين الوصول والمغادرة (تتم إضافته إلى وقت الانتظار المحتمل، راجِع timeWindows).

cost

number

تكلفة خدمة طلب الزيارة هذا على مسار مركبة معيّن يمكن استخدام هذه السمة لدفع تكاليف مختلفة لكل عملية استلام أو تسليم بديلة لشحنة معيّنة. يجب أن تكون هذه التكلفة بالوحدة نفسها المستخدَمة في Shipment.penalty_cost ويجب ألا تكون سالبة.

loadDemands

map (key: string, value: object (Load))

تحميل متطلبات طلب الزيارة هذا يشبه هذا الحقل حقل Shipment.load_demands، إلا أنّه ينطبق فقط على VisitRequest هذه بدلاً من Shipment بالكامل. تتم إضافة الطلبات المدرَجة هنا إلى الطلبات المدرَجة في Shipment.load_demands.

visitTypes[]

string

تحدّد هذه السمة أنواع الزيارة. ويمكن استخدام هذه السمة لتخصيص وقت إضافي مطلوب لمركبة لإكمال هذه الزيارة (راجِع Vehicle.extra_visit_duration_for_visit_type).

يمكن أن يظهر النوع مرة واحدة فقط.

label

string

يحدّد تصنيفًا لـ VisitRequest. يتم الإبلاغ عن هذا التصنيف في الردّ على أنّه visitLabel في ShipmentRoute.Visit المقابل.

avoidUTurns

boolean

يحدّد ما إذا كان يجب تجنُّب الانعطافات على شكل حرف U في مسارات القيادة في هذا الموقع الجغرافي. يتم تجنُّب الانعطاف للخلف قدر الإمكان، ولكن لا يمكن ضمان تجنُّبه بالكامل. هذه ميزة تجريبية وقد يتغيّر سلوكها.

ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request لمزيد من التفاصيل.

LatLng

عنصر يمثّل زوجًا من خطوط العرض/الطول ويتم التعبير عن ذلك كزوج من القيم العشرية المزدوجة لتمثيل درجات خط العرض ودرجات خط الطول. ما لم يُذكر خلاف ذلك، يجب أن يتوافق هذا العنصر مع معيار WGS84. يجب أن تكون القيم ضمن النطاقات التي تمّت تسويتها.

تمثيل JSON
{
  "latitude": number,
  "longitude": number
}
الحقول
latitude

number

خط العرض بالدرجات يجب أن يكون في النطاق [-90.0, +90.0].

longitude

number

خط الطول بالدرجات يجب أن يكون في النطاق [-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 (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
الحقول
sideOfRoad

boolean

اختيارية: تشير إلى أنّ الموقع الجغرافي لهذه النقطة على المسار يهدف إلى تفضيل توقّف المركبة على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمرّ المسار عبر الموقع الجغرافي لكي تتمكّن المركبة من التوقّف على جانب الطريق الذي يميل إليه الموقع الجغرافي من وسط الطريق. لا يعمل هذا الخيار مع وضع السفر "WALKING".

vehicleStopover

boolean

يشير هذا الخيار إلى أنّ النقطة على المسار مخصّصة لتوقّف المركبات، حيث يكون الهدف إمّا الركوب أو النزول. لا يعمل هذا الخيار إلا مع وضع السفر "القيادة"، وعندما يكون "locationType" هو "location".

تجريبي: قد يتغيّر سلوك هذا الحقل أو وجوده في المستقبل.

طرق مختلفة لتمثيل موقع جغرافي في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
location

object (Location)

نقطة محدّدة باستخدام الإحداثيات الجغرافية، بما في ذلك عنوان اختياري

placeId

string

رقم تعريف المكان المرتبط بنقطة المسار

عند استخدام رقم تعريف مكان لتحديد موقع الوصول أو المغادرة في VisitRequest، استخدِم رقم تعريف مكان محدّدًا بما يكفي لتحديد موقع LatLng للانتقال إلى المكان. على سبيل المثال، يُعدّ رقم تعريف المكان الذي يمثّل مبنى مناسبًا، ولكن لا يُنصح باستخدام رقم تعريف المكان الذي يمثّل طريقًا.

نهاية الحقول التي يستبعد كلّ منها الآخر

الموقع الجغرافي

تتضمّن موقعًا جغرافيًا (نقطة جغرافية وعنوانًا اختياريًا).

تمثيل JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
الحقول
latLng

object (LatLng)

الإحداثيات الجغرافية للنقطة على المسار

heading

integer

اتجاه البوصلة المرتبط باتجاه تدفق حركة المرور تُستخدَم هذه القيمة لتحديد جانب الطريق الذي يجب استخدامه للركوب والنزول. يمكن أن تتراوح قيم الاتجاه من 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

string (Timestamp format)

وقت بدء الفترة الزمنية الصارمة في حال عدم تحديدها، سيتم ضبطها على ShipmentModel.global_start_time.

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

endTime

string (Timestamp format)

وقت انتهاء الفترة الزمنية الصارمة في حال عدم تحديدها، سيتم ضبطها على ShipmentModel.global_end_time.

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

softStartTime

string (Timestamp format)

وقت البدء المرن للفترة الزمنية

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

softEndTime

string (Timestamp format)

وقت الانتهاء المرن للنافذة الزمنية

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

costPerHourBeforeSoftStartTime

number

تمت إضافة تكلفة في الساعة إلى التكاليف الأخرى في النموذج إذا حدث الحدث قبل softStartTime، ويتم احتسابها على النحو التالي:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

يجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا إذا تم ضبط softStartTime.

costPerHourAfterSoftEndTime

number

التكلفة في الساعة التي تتم إضافتها إلى التكاليف الأخرى في النموذج إذا حدثت الفعالية بعد softEndTime، ويتم احتسابها على النحو التالي:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

يجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا إذا تم ضبط softEndTime.

مركبة

يمثّل مركبة في مشكلة شحن. سيؤدي حلّ مشكلة شحنة إلى إنشاء مسار يبدأ من startLocation وينتهي عند endLocation لهذه المركبة. المسار هو سلسلة من الزيارات (يُرجى الاطّلاع على ShipmentRoute).

تمثيل JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
الحقول
displayName

string

الاسم المعروض للمركبة الذي يحدّده المستخدم ويمكن أن يصل طوله إلى 63 حرفًا، ويمكن أن يستخدم أحرف UTF-8.

travelMode

enum (TravelMode)

وضع السفر الذي يؤثر في الطرق التي يمكن للمركبة استخدامها وسرعتها يمكنك أيضًا الاطّلاع على travelDurationMultiple.

routeModifiers

object (RouteModifiers)

مجموعة من الشروط التي يجب استيفاؤها والتي تؤثر في طريقة احتساب المسارات للمركبة المحدّدة.

startLocation

object (LatLng)

الموقع الجغرافي الذي تبدأ منه المركبة قبل استلام أي شحنات إذا لم يتم تحديد موقع، تبدأ المركبة من أول موقع استلام. إذا كان نموذج الشحنة يحتوي على مصفوفات المدة والمسافة، يجب عدم تحديد startLocation.

startWaypoint

object (Waypoint)

نقطة على المسار تمثّل موقعًا جغرافيًا تبدأ منه المركبة قبل استلام أي شحنات. إذا لم يتم تحديد startWaypoint أو startLocation، تبدأ المركبة من أول عملية استلام. إذا كان نموذج الشحنة يحتوي على مصفوفات المدة والمسافة، يجب عدم تحديد startWaypoint.

endLocation

object (LatLng)

الموقع الجغرافي الذي تتوقف فيه المركبة بعد إكمال آخر VisitRequest. في حال عدم تحديدها، تنتهي ShipmentRoute للمركبة فور إكمال آخر VisitRequest لها. إذا كان نموذج الشحنة يحتوي على مصفوفات المدة والمسافة، يجب عدم تحديد endLocation.

endWaypoint

object (Waypoint)

نقطة على المسار تمثّل موقعًا جغرافيًا تنتهي فيه المركبة بعد إكمال آخر VisitRequest. إذا لم يتم تحديد السمة endWaypoint أو endLocation، تنتهي السمة ShipmentRoute للمركبة فورًا عند إكمال آخر VisitRequest. إذا كان نموذج الشحنة يحتوي على مصفوفات المدة والمسافة، يجب عدم تحديد endWaypoint.

startTags[]

string

تحدّد هذه السمة العلامات المرفقة ببداية مسار المركبة.

لا يُسمح بالسلاسل الفارغة أو المكرّرة.

endTags[]

string

تحدّد العلامات المرفقة بنهاية مسار المركبة.

لا يُسمح بالسلاسل الفارغة أو المكرّرة.

startTimeWindows[]

object (TimeWindow)

الفترات الزمنية التي قد تغادر فيها المركبة موقعها الجغرافي الأولي ويجب أن تكون ضمن الحدود الزمنية العامة (راجِع حقول ShipmentModel.global_*). في حال عدم تحديدها، لن يكون هناك أي قيود بخلاف تلك الحدود الزمنية العامة.

يجب أن تكون النوافذ الزمنية التي تنتمي إلى الحقل المتكرر نفسه منفصلة، أي لا يمكن أن تتداخل أي نافذة زمنية مع نافذة أخرى أو تكون مجاورة لها، ويجب أن تكون بترتيب زمني.

لا يمكن ضبط costPerHourAfterSoftEndTime وsoftEndTime إلا إذا كانت هناك نافذة زمنية واحدة.

endTimeWindows[]

object (TimeWindow)

النوافذ الزمنية التي قد تصل خلالها المركبة إلى موقعها النهائي ويجب أن تكون ضمن الحدود الزمنية العامة (راجِع حقول ShipmentModel.global_*). في حال عدم تحديدها، لن يكون هناك أي قيود بخلاف تلك الحدود الزمنية العامة.

يجب أن تكون النوافذ الزمنية التي تنتمي إلى الحقل المتكرر نفسه منفصلة، أي لا يمكن أن تتداخل أي نافذة زمنية مع نافذة أخرى أو تكون مجاورة لها، ويجب أن تكون بترتيب زمني.

لا يمكن ضبط costPerHourAfterSoftEndTime وsoftEndTime إلا إذا كانت هناك نافذة زمنية واحدة.

unloadingPolicy

enum (UnloadingPolicy)

سياسة التفريغ المفروضة على المركبة

loadLimits

map (key: string, value: object (LoadLimit))

سعات المركبة (الوزن والحجم وعدد المنصات النقالة على سبيل المثال) المفاتيح في الخريطة هي معرّفات نوع الحمولة، وتتوافق مع مفاتيح الحقل Shipment.load_demands. إذا لم يكن هناك مفتاح معيّن في هذه الخريطة، تُعتبر السعة المقابلة غير محدودة.

costPerHour

number

تكاليف المركبة: يتم جمع كل التكاليف ويجب أن تكون بالوحدة نفسها المستخدَمة في Shipment.penalty_cost.

التكلفة في الساعة لمسار المركبة يتم تطبيق هذه التكلفة على إجمالي الوقت الذي يستغرقه المسار، وتشمل مدة الرحلة ووقت الانتظار ووقت الزيارة. قد يؤدي استخدام costPerHour بدلاً من costPerTraveledHour فقط إلى زيادة وقت الاستجابة.

costPerTraveledHour

number

التكلفة لكل ساعة سفر في مسار المركبة يتم تطبيق هذه التكلفة فقط على مدة الرحلة التي يستغرقها المسار (أي تلك التي تم الإبلاغ عنها في ShipmentRoute.transitions)، ولا تشمل وقت الانتظار ووقت الزيارة.

costPerKilometer

number

التكلفة لكل كيلومتر من مسار المركبة يتم تطبيق هذه التكلفة على المسافة المذكورة في ShipmentRoute.transitions ولا تنطبق على أي مسافة يتم قطعها ضمنيًا من arrivalLocation إلى departureLocation في VisitRequest واحد.

fixedCost

number

التكلفة الثابتة التي يتم تطبيقها في حال استخدام هذه المركبة لتسليم شحنة

usedIfRouteIsEmpty

boolean

لا ينطبق هذا الحقل إلا على المركبات التي لا يخدم مسارها أي شحنات. وتشير إلى ما إذا كان يجب اعتبار المركبة مستعمَلة أم لا في هذه الحالة.

إذا كانت القيمة صحيحة، تنتقل المركبة من موقعها الجغرافي في البداية إلى موقعها الجغرافي في النهاية حتى إذا لم تخدم أي شحنات، ويتم أخذ تكاليف الوقت والمسافة الناتجة عن رحلتها من البداية إلى النهاية في الاعتبار.

وإلا، لن تنتقل من موقع البدء إلى موقع النهاية، ولن تتم جدولة أي breakRule أو تأخير (من TransitionAttributes) لهذه المركبة. في هذه الحالة، لا يحتوي ShipmentRoute الخاص بالمركبة على أي معلومات باستثناء فهرس المركبة وتصنيفها.

routeDurationLimit

object (DurationLimit)

الحدّ الأقصى المطبَّق على المدة الإجمالية لمسار المركبة في OptimizeToursResponse معيّن، تكون مدة مسار المركبة هي الفرق بين vehicleEndTime وvehicleStartTime.

travelDurationLimit

object (DurationLimit)

الحدّ الأقصى المطبَّق على مدة السفر لمسار المركبة في OptimizeToursResponse معيّن، تكون مدة السفر على المسار هي مجموع كل transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

الحدّ الأقصى المطبَّق على إجمالي المسافة التي يقطعها مسار المركبة في OptimizeToursResponse معيّن، تكون مسافة المسار هي مجموع كل transitions.travel_distance_meters.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

يحدّد خريطة من سلاسل visitTypes إلى المدد. المدة هي الوقت بالإضافة إلى VisitRequest.duration الذي سيتم استغراقه في الزيارات مع visitTypes المحدّد. تضيف مدة الزيارة الإضافية هذه تكلفة إذا تم تحديد costPerHour. لا يمكن أن تكون المفاتيح (مثل visitTypes) سلاسل فارغة.

إذا كان طلب الزيارة يتضمّن أنواعًا متعددة، ستتم إضافة مدة لكل نوع في الخريطة.

breakRule

object (BreakRule)

يصف هذا الحقل جدول الاستراحة الذي سيتم فرضه على هذه المركبة. إذا كان الحقل فارغًا، لن تتم جدولة أي فترات استراحة لهذه المركبة.

label

string

تحدّد هذه السمة تصنيفًا لهذه المركبة. يتم عرض هذا التصنيف في الردّ على أنّه vehicleLabel لـ ShipmentRoute المقابل.

ignore

boolean

إذا كانت القيمة "صحيح"، يجب أن تكون قيمة usedIfRouteIsEmpty "خطأ"، وستبقى هذه المركبة غير مستخدَمة.

إذا تم تنفيذ شحنة بواسطة مركبة تم تجاهلها في injectedFirstSolutionRoutes، يتم تخطّيها في الحلّ الأول ولكن يمكن تنفيذها في الردّ.

إذا تم تنفيذ شحنة بواسطة مركبة تم تجاهلها في injectedSolutionConstraint وتم تقييد أي عملية استلام أو تسليم ذات صلة لتبقى في المركبة (أي لم يتم تخفيفها إلى المستوى RELAX_ALL_AFTER_THRESHOLD)، يتم تخطيها في الرد. إذا كانت الشحنة تحتوي على حقل allowedVehicleIndices غير فارغ وتم تجاهل جميع المركبات المسموح بها، يتم تخطّيها في الردّ.

travelDurationMultiple

number

تحدّد هذه السمة عاملاً مضاعفًا يمكن استخدامه لزيادة أو تقليل مُدد الرحلات لهذه المركبة. على سبيل المثال، يؤدي ضبط هذه القيمة على 2.0 إلى أن تكون هذه المركبة أبطأ وتستغرق مدة رحلة تبلغ ضعف مدة الرحلة للمركبات العادية. لا يؤثر هذا المضاعف في مُدد الزيارات. ويؤثر في التكلفة في حال تحديد costPerHour أو costPerTraveledHour. يجب أن تكون هذه القيمة في النطاق [0.001, 1000.0]. في حال عدم ضبط هذه السمة، تكون المركبة عادية، ويتم اعتبار هذا المضاعف 1.0.

تحذير: سيتم تقريب مُدد الرحلات إلى أقرب ثانية بعد تطبيق هذا المضاعف ولكن قبل إجراء أي عمليات حسابية، وبالتالي قد يؤدي المضاعف الصغير إلى فقدان الدقة.

يمكنك أيضًا الاطّلاع على extraVisitDurationForVisitType أدناه.

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

boolean

تحدّد هذه السياسة ما إذا كان يجب تجنُّب الطرق برسوم عبور حيثما أمكن. ستُعطى الأولوية للمسارات التي لا تحتوي على طرق برسوم عبور. ينطبق ذلك على وسائل النقل الآلية فقط.

avoidHighways

boolean

تحدّد هذه السمة ما إذا كان يجب تجنّب الطرق السريعة حيثما أمكن. سيتم إعطاء الأولوية للمسارات التي لا تحتوي على طرق سريعة. ينطبق ذلك على وسائل النقل الآلية فقط.

avoidFerries

boolean

تحدّد ما إذا كان سيتم تجنُّب العبّارات حيثما أمكن. سيتم إعطاء الأولوية للمسارات التي لا تتضمّن السفر بالعبّارات. ينطبق ذلك على وسائل النقل الآلية فقط.

avoidIndoor

boolean

اختيارية: تحدّد هذه السياسة ما إذا كان يجب تجنُّب التنقّل داخل المباني حيثما أمكن. ستُعطى الأولوية للمسارات التي لا تحتوي على ميزة التنقّل داخل المباني. ينطبق ذلك على وضع السفر "WALKING" فقط.

UnloadingPolicy

سياسة حول كيفية تفريغ حمولة مركبة ينطبق ذلك فقط على الشحنات التي تتضمّن كلاً من الاستلام والتسليم.

يمكن أن تتم عمليات الشحن الأخرى في أي مكان على المسار بشكل مستقل عن unloadingPolicy.

عمليات التعداد
UNLOADING_POLICY_UNSPECIFIED سياسة تفريغ غير محدّدة، ويجب أن تتم عمليات التسليم بعد عمليات الاستلام المقابلة لها.
LAST_IN_FIRST_OUT يجب أن تتم عمليات التسليم بترتيب عكسي لعمليات الاستلام
FIRST_IN_FIRST_OUT يجب أن تتم عمليات التسليم بالترتيب نفسه الذي تتم به عمليات الاستلام

LoadLimit

تحدّد هذه السمة الحدّ الأقصى للحمولة المسموح بها في مركبة معيّنة، مثل "لا يمكن لهذه الشاحنة أن تحمل أكثر من 3, 500 كغم". يمكنك الاطّلاع على loadLimits.

تمثيل JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
الحقول
softMaxLoad

string (int64 format)

الحدّ الأقصى المرن للحِمل يمكنك الاطّلاع على costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

إذا تجاوزت الحمولة في أي وقت softMaxLoad على طول مسار هذه المركبة، سيتم تطبيق غرامة التكلفة التالية (مرة واحدة فقط لكل مركبة): (الحمولة - softMaxLoad) * costPerUnitAboveSoftMax. يتم جمع كل التكاليف ويجب أن تكون بالوحدة نفسها المستخدَمة في Shipment.penalty_cost. لا يمكن تحديد الحدود المرنة إلا على الأنواع التي تنطبق على عمليات الاستلام فقط أو عمليات التسليم فقط في النموذج بأكمله.

startLoadInterval

object (Interval)

تمثّل هذه السمة الفاصل الزمني المقبول للحمولة في المركبة في بداية المسار.

endLoadInterval

object (Interval)

تمثّل هذه السمة الفاصل الزمني المقبول للحمولة في المركبة في نهاية المسار.

maxLoad

string (int64 format)

الحد الأقصى المقبول للحِمل

costPerKilometer

object (LoadCost)

تكلفة نقل وحدة واحدة من الحمولة لمسافة كيلومتر واحد لهذه المركبة يمكن استخدام ذلك كمؤشر لاستهلاك الوقود: إذا كان الحِمل عبارة عن وزن (بالنيوتن)، فإنّ الحِمل*كيلومتر له بُعد الطاقة.

ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.

costPerTraveledHour

object (LoadCost)

تكلفة السفر بوحدة حمولة خلال ساعة واحدة لهذه المركبة.

ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.

الفاصل الزمني

الفاصل الزمني لمقادير الحمل المقبولة

تمثيل JSON
{
  "min": string,
  "max": string
}
الحقول
min

string (int64 format)

الحد الأدنى المقبول للحِمل يجب أن تكون القيمة أكبر من أو تساوي 0. في حال تحديد كليهما، يجب أن تكون قيمة min أقل من أو تساوي قيمة max.

max

string (int64 format)

الحد الأقصى للحِمل المقبول يجب أن تكون القيمة أكبر من أو تساوي 0. في حال عدم تحديد هذه السمة، لن تفرض هذه الرسالة أي قيود على الحد الأقصى للحمولة. في حال تحديد كليهما، يجب أن تكون قيمة min أقل من أو تساوي قيمة max.

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

string (int64 format)

مقدار الحمولة الذي تتغيّر فوقه تكلفة نقل وحدة الحمولة من costPerUnitBelowThreshold إلى costPerUnitAboveThreshold. يجب أن تكون القيمة أكبر من أو تساوي 0.

costPerUnitBelowThreshold

number

تكلفة نقل وحدة من الحمولة، لكل وحدة بين 0 والحدّ الأدنى يجب أن تكون قيمة محدودة وأكبر من أو تساوي 0.

costPerUnitAboveThreshold

number

تكلفة نقل وحدة حمولة لكل وحدة تتجاوز الحدّ الأدنى في الحالة الخاصة التي يكون فيها الحدّ الأدنى = 0، تكون هذه التكلفة ثابتة لكل وحدة. يجب أن تكون قيمة محدودة وأكبر من أو تساوي 0.

DurationLimit

حدّ يحدّد الحدّ الأقصى لمدة مسار المركبة. ويمكن أن يكون صلبًا أو ناعمًا.

عند تحديد حقل الحدّ الأقصى المرن، يجب تحديد كلّ من الحدّ الأقصى المرن والتكلفة المرتبطة به معًا.

تمثيل JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
الحقول
maxDuration

string (Duration format)

حدّ صارم يفرض أن تكون المدة على الأكثر maxDuration.

softMaxDuration

string (Duration format)

حدّ مرن لا يفرض حدًّا أقصى للمدة، ولكن عند تجاوزه، يتكبّد المسار تكلفة. تُضاف هذه التكلفة إلى التكاليف الأخرى المحدّدة في النموذج، بالوحدة نفسها.

إذا تم تحديد السمة softMaxDuration، يجب ألا تكون سالبة. إذا تم تحديد maxDuration أيضًا، يجب أن تكون قيمة softMaxDuration أقل من قيمة maxDuration.

quadraticSoftMaxDuration

string (Duration format)

حدّ مرن لا يفرض حدًّا أقصى للمدة، ولكن عند تجاوزه، يتكبّد المسار تكلفة تربيعية في المدة. تُضاف هذه التكلفة إلى التكاليف الأخرى المحدّدة في النموذج، بالوحدة نفسها.

في حال ضبط quadraticSoftMaxDuration، يجب استيفاء الشروط التالية:

  • يجب أن تكون القيمة غير سالبة.
  • يجب تحديد maxDuration.
  • يجب أن تكون قيمة quadraticSoftMaxDuration أقل من maxDuration.
  • يجب ألا يزيد الفرق عن يوم واحد: maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

التكلفة في الساعة التي يتم تحمّلها في حال تجاوز الحدّ الأقصى لـ softMaxDuration تكون التكلفة الإضافية 0 إذا كانت المدة أقل من الحدّ الأدنى، وإلا تعتمد التكلفة على المدة على النحو التالي:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

يجب أن تكون التكلفة غير سالبة.

costPerSquareHourAfterQuadraticSoftMax

number

التكلفة لكل ساعة مربّعة يتم تحمّلها في حال تجاوز الحدّ الأقصى لـ quadraticSoftMaxDuration.

تكون التكلفة الإضافية 0 إذا كانت المدة أقل من الحدّ الأدنى، وإلا تعتمد التكلفة على المدة على النحو التالي:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

يجب أن تكون التكلفة غير سالبة.

DistanceLimit

حدّ يحدّد أقصى مسافة يمكن قطعها ويمكن أن يكون صلبًا أو ناعمًا.

في حال تحديد حدّ أقصى مرن، يجب تحديد كل من softMaxMeters وcostPerKilometerAboveSoftMax وأن يكونا غير سالبَين.

تمثيل JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
الحقول
maxMeters

string (int64 format)

حدّ صارم يفرض أن تكون المسافة على الأكثر maxMeters. يجب أن يكون الحدّ الأقصى قيمة غير سالبة.

softMaxMeters

string (int64 format)

حدّ مرن لا يفرض حدًّا أقصى للمسافة، ولكن عند تجاوزه، يؤدي إلى تكلفة تُضاف إلى التكاليف الأخرى المحدّدة في النموذج، بالوحدة نفسها.

إذا تم تحديد softMaxMeters، يجب أن تكون قيمتها أقل من maxMeters وغير سالبة.

costPerKilometerBelowSoftMax

number

التكلفة لكل كيلومتر، وتزداد حتى softMaxMeters، بالصيغة التالية:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

هذه التكلفة غير متاحة في routeDistanceLimit.

costPerKilometerAboveSoftMax

number

التكلفة لكل كيلومتر في حال تجاوزت المسافة الحدّ الأقصى البالغ softMaxMeters. تكون التكلفة الإضافية 0 إذا كانت المسافة أقل من الحدّ الأقصى، وإلا تكون الصيغة المستخدَمة لحساب التكلفة على النحو التالي:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

يجب أن تكون التكلفة غير سالبة.

BreakRule

القواعد التي تحدّد فترات الاستراحة لمركبة معيّنة (مثل استراحات الغداء) الاستراحة هي فترة زمنية متواصلة تظل فيها المركبة متوقفة في موضعها الحالي ولا يمكنها إجراء أي زيارة. قد يحدث انقطاع في الحالات التالية:

  • أثناء التنقّل بين زيارتَين (بما في ذلك الوقت الذي يسبق الزيارة مباشرةً أو يليها مباشرةً، ولكن ليس في منتصف الزيارة)، وفي هذه الحالة يتم تمديد مدة النقل المقابلة بين الزيارتَين
  • أو قبل بدء تشغيل المركبة (قد لا تبدأ المركبة في منتصف فترة الاستراحة)، وفي هذه الحالة لا يؤثر ذلك في وقت بدء تشغيل المركبة.
  • أو بعد نهاية المركبة (أيضًا، مع وقت نهاية المركبة).
تمثيل JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
الحقول
breakRequests[]

object (BreakRequest)

تسلسل الاستراحات اطّلِع على رسالة BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

قد تنطبق عدة FrequencyConstraint. يجب أن تستوفي جميعها BreakRequests من هذا BreakRule. يمكنك الاطّلاع على FrequencyConstraint.

BreakRequest

يجب معرفة تسلسل فترات الاستراحة (أي عددها وترتيبها) التي تنطبق على كل مركبة مسبقًا. وتحدّد BreakRequest المتكرّرة هذا التسلسل، بالترتيب الذي يجب أن تحدث به. قد تتداخل النوافذ الزمنية (earliestStartTime / latestStartTime)، ولكن يجب أن تكون متوافقة مع الطلب (يتم التحقّق من ذلك).

تمثيل JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
الحقول
earliestStartTime

string (Timestamp format)

الحقل مطلوب. الحدّ الأدنى (شامل) لبداية الاستراحة

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

latestStartTime

string (Timestamp format)

الحقل مطلوب. الحدّ الأقصى (شاملاً) لبداية الاستراحة

يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: "2014-10-02T15:01:23Z" أو "2014-10-02T15:01:23.045123456Z" أو "2014-10-02T15:01:23+05:30"

minDuration

string (Duration format)

الحقل مطلوب. الحدّ الأدنى لمدة الفاصل الإعلاني يجب أن تكون القيمة موجبة.

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

string (Duration format)

الحقل مطلوب. الحدّ الأدنى لمدة الاستراحة لهذا القيد غير سالبة. اطّلِع على وصف FrequencyConstraint.

maxInterBreakDuration

string (Duration format)

الحقل مطلوب. الحد الأقصى المسموح به لأي فاصل زمني في المسار لا يتضمّن استراحة لمدة duration >= minBreakDuration جزئيًا على الأقل. يجب أن تكون القيمة موجبة.

الهدف

تحلّ الأهداف محلّ نموذج التكلفة بالكامل، وبالتالي فهي غير متوافقة مع التكاليف الحالية. يتم ربط كل هدف بعدد من التكاليف المحدّدة مسبقًا، مثل المركبات أو الشحنات أو سمات الانتقال.

ميزة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

تمثيل JSON
{
  "type": enum (Type),
  "weight": number
}
الحقول
type

enum (Type)

نوع الهدف

weight

number

مدى أهمية هذا الهدف مقارنةً بالأهداف الأخرى يمكن أن تكون هذه القيمة أي رقم غير سالب، ولا يجب أن يكون مجموع الأوزان 1. تكون القيم التلقائية للأوزان 1.0.

النوع

نوع الهدف الذي سيتم ربطه بمجموعة من التكاليف

عمليات التعداد
DEFAULT سيتم استخدام مجموعة تلقائية من التكاليف لضمان الحصول على حلّ معقول. ملاحظة: يمكن استخدام هذا الهدف بمفرده، ولكن ستتم إضافته دائمًا مع الوزن 1.0، كمرجع، إلى الأهداف التي يحدّدها المستخدم، إذا لم تكن متوفّرة من قبل.
MIN_DISTANCE "الحد الأدنى". تقليل إجمالي المسافة المقطوعة إلى أدنى حدّ
MIN_WORKING_TIME تقليل إجمالي وقت العمل، الذي يتم جمعه على جميع المركبات.
MIN_TRAVEL_TIME ينطبق ذلك على ما سبق، ولكن مع التركيز على مدة الرحلة فقط.
MIN_NUM_VEHICLES تقليل عدد المركبات المستخدَمة

DurationDistanceMatrix

يحدّد مصفوفة المدة والمسافة من المواقع الجغرافية لبدء الزيارة والمركبة إلى المواقع الجغرافية لنهاية الزيارة والمركبة.

تمثيل JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
الحقول
rows[]

object (Row)

تحدّد هذه السمة صفوف مصفوفة المدة والمسافة. يجب أن يحتوي على عدد عناصر يساوي ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

علامة تحدّد المركبات التي تنطبق عليها مصفوفة المدة والمسافة هذه إذا كان الحقل فارغًا، ينطبق ذلك على جميع المركبات، ويمكن أن تكون هناك مصفوفة واحدة فقط.

يجب أن تتطابق كل نقطة انطلاق للمركبة مع مصفوفة واحدة بالضبط، أي يجب أن يتطابق حقل startTags واحد بالضبط مع vehicleStartTag لمصفوفة (وتلك المصفوفة فقط).

يجب أن يكون لكل مصفوفة قيمة vehicleStartTag مختلفة.

الصف

تحدّد صفًا من مصفوفة المدة والمسافة.

تمثيل JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
الحقول
durations[]

string (Duration format)

قيم المدة لصف معيّن يجب أن يحتوي على عدد عناصر يساوي ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

number

قيم المسافة لصف معيّن إذا لم تكن هناك تكاليف أو قيود تشير إلى المسافات في النموذج، يمكن ترك هذا الحقل فارغًا، وإلا يجب أن يحتوي على عدد من العناصر يساوي durations.

TransitionAttributes

تحدّد سمات عمليات الانتقال بين زيارتَين متتاليتَين في مسار معيّن. قد تنطبق عدة TransitionAttributes على عملية النقل نفسها: في هذه الحالة، تتم إضافة جميع التكاليف الإضافية ويتم تطبيق القيود أو الحدود الأكثر صرامة (باتّباع دلالات "AND" الطبيعية).

تمثيل JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
الحقول
srcTag

string

علامات تحدّد مجموعة عمليات الانتقال (من المصدر إلى الوجهة) التي تنطبق عليها هذه السمات

تتطابق زيارة المصدر أو بداية المركبة إذا كان VisitRequest.tags أو Vehicle.start_tags يحتوي على srcTag أو لا يحتوي على excludedSrcTag (حسب أي من هذين الحقلين غير فارغ).

excludedSrcTag

string

يمكنك الاطّلاع على srcTag. يجب أن تكون قيمة واحدة فقط من srcTag وexcludedSrcTag غير فارغة.

dstTag

string

تتطابق زيارة الوجهة أو نهاية الرحلة بالمركبة إذا كان VisitRequest.tags أو Vehicle.end_tags يحتوي على dstTag أو لا يحتوي على excludedDstTag (حسب أي من هذين الحقلين غير فارغ).

excludedDstTag

string

يمكنك الاطّلاع على dstTag. يجب أن تكون قيمة واحدة فقط من dstTag وexcludedDstTag غير فارغة.

cost

number

يحدّد تكلفة تنفيذ هذا الانتقال. يجب أن تكون هذه القيمة بالوحدة نفسها التي تستخدمها جميع التكاليف الأخرى في النموذج، ويجب ألا تكون سالبة. ويتم تطبيقها بالإضافة إلى جميع التكاليف الحالية الأخرى.

costPerKilometer

number

تحدّد هذه السمة التكلفة لكل كيلومتر يتم تطبيقها على المسافة المقطوعة أثناء تنفيذ هذه الرحلة. تتم إضافة هذه السمة إلى أيّ سمة Vehicle.cost_per_kilometer محدّدة في المركبات.

distanceLimit

object (DistanceLimit)

تحدّد هذه السمة حدًا أقصى للمسافة المقطوعة أثناء إجراء هذا الانتقال.

اعتبارًا من حزيران (يونيو) 2021، لا تتوفّر سوى الحدود غير الصارمة.

delay

string (Duration format)

يحدّد هذا الحقل التأخير الذي يحدث عند تنفيذ عملية الانتقال هذه.

يحدث هذا التأخير دائمًا بعد الانتهاء من زيارة المصدر وقبل بدء زيارة الوجهة.

ShipmentTypeIncompatibility

تحدّد حالات عدم التوافق بين الشحنات استنادًا إلى shipmentType. يتم حظر ظهور الشحنات غير المتوافقة على المسار نفسه استنادًا إلى وضع عدم التوافق.

تمثيل JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
الحقول
types[]

string

قائمة بالأنواع غير المتوافقة تكون الشحنتان اللتان تحتويان على shipment_types مختلف من بين الشحنات المدرَجة "غير متوافقتَين".

incompatibilityMode

enum (IncompatibilityMode)

الوضع المطبَّق على عدم التوافق

IncompatibilityMode

الأوضاع التي تحدّد كيفية تقييد ظهور الشحنات غير المتوافقة على المسار نفسه

عمليات التعداد
INCOMPATIBILITY_MODE_UNSPECIFIED وضع عدم التوافق غير محدّد. يجب عدم استخدام هذه القيمة مطلقًا.
NOT_PERFORMED_BY_SAME_VEHICLE في هذا الوضع، لا يمكن أبدًا أن تتشارك شحنتان من نوعين غير متوافقين المركبة نفسها.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

في هذا الوضع، لا يمكن أبدًا أن تكون شحنتان من نوعين غير متوافقين في المركبة نفسها في الوقت نفسه:

  • ويمكنهما مشاركة المركبة نفسها فقط إذا تم تسليم أحد الطلبَين قبل استلام الآخر.
  • عندما تكون كلتا الشحنتَين مخصّصتَين للاستلام فقط (بدون تسليم) أو للتسليم فقط (بدون استلام)، لا يمكنهما مشاركة المركبة نفسها على الإطلاق.

ShipmentTypeRequirement

تحدّد المتطلبات بين الشحنات استنادًا إلى shipmentType. يتم تحديد تفاصيل المتطلبات من خلال وضع المتطلبات.

تمثيل JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
الحقول
requiredShipmentTypeAlternatives[]

string

قائمة بأنواع الشحن البديلة التي يتطلّبها dependentShipmentTypes

dependentShipmentTypes[]

string

تتطلّب جميع الشحنات التي لها نوع في الحقل dependentShipmentTypes زيارة شحنة واحدة على الأقل من النوع requiredShipmentTypeAlternatives في المسار نفسه.

ملاحظة: لا يُسمح بسلاسل المتطلبات التي تعتمد فيها السمة shipmentType على نفسها.

requirementMode

enum (RequirementMode)

الوضع المطبَّق على الشرط

RequirementMode

الأوضاع التي تحدّد مظهر الشحنات التابعة على مسار معيّن

عمليات التعداد
REQUIREMENT_MODE_UNSPECIFIED وضع المتطلبات غير محدّد. يجب عدم استخدام هذه القيمة مطلقًا.
PERFORMED_BY_SAME_VEHICLE في هذا الوضع، يجب أن تشارك جميع الشحنات "التابعة" المركبة نفسها مع شحنة واحدة على الأقل من الشحنات "المطلوبة".
IN_SAME_VEHICLE_AT_PICKUP_TIME

في وضع 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

boolean

تشير إلى ما إذا كان الحدث "الأول" هو تسليم.

secondIsDelivery

boolean

يشير إلى ما إذا كان الحدث "الثاني" هو عملية تسليم.

offsetDuration

string (Duration format)

الإزاحة بين الحدث "الأول" و "الثاني". ويمكن أن تكون سلبية.

firstIndex

integer

فهرس الشحنة للحدث "الأول". يجب تحديد هذا الحقل.

secondIndex

integer

فهرس شحنة الحدث "الثاني". يجب تحديد هذا الحقل.