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 أقل من 31536000 ثانية.

عند استخدام حقول 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.
  • مركبة واحدة تبدأ مسارها في الموقع الجغرافي A وتنتهي فيه
  • طلب واحد لزيارة موقع الاستلام locB
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 وlocC.
  • مركبة واحدة تبدأ مسارها في locA وتنتهي في locB، باستخدام مصفوفة "سريع".
  • مركبة واحدة تبدأ مسارها وتنتهي منه في locB، باستخدام مصفوفة "بطيئة".
  • مركبة واحدة تبدأ مسارها في locB وتنتهي فيه، باستخدام مصفوفة "سريع".
  • طلب واحد لزيارة مكان الاستلام في locC
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

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

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

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من 10/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))

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام/التسليم. اعتبارًا من 10/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 في مسارات القيادة في هذا الموقع الجغرافي. يتم بذل أقصى جهد لتجنُّب المنعطفات على شكل حرف 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].

النقطة الوسيطة

تغليف نقطة طريق تشير نقاط الطريق إلى مواقع الوصول والمغادرة الخاصة بـ VisitRequests، ومواقع البدء والانتهاء الخاصة بـ Vehicles.

تمثيل JSON
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
الحقول
sideOfRoad

boolean

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

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 وسيلة النقل التي تتوافق مع اتجاهات المشي

RouteModifiers

تتضمّن هذه السمة مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند احتساب مسارات المركبات. هذا مشابه لـ RouteModifiers في Google Maps Platform Routes Preferred API. يمكنك الاطّلاع على: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

تمثيل JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
الحقول
avoidTolls

boolean

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

avoidHighways

boolean

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

avoidFerries

boolean

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

avoidIndoor

boolean

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

UnloadingPolicy

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

يمكن إجراء عمليات شحن أخرى في أي مكان على المسار بغض النظر عن unloadingPolicy.

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

LoadLimit

تحدّد هذه السمة الحدّ الأقصى للحمولة المسموح بها في مركبة، مثلاً "يمكن لهذه الشاحنة أن تحمل ما يصل إلى 3500 كيلوغرام فقط". يمكنك الاطّلاع على 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. يجب استيفاء جميع هذه الشروط بحلول BreakRequest من 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/06، لا يمكن استخدام سوى الحدود المرنة.

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

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