تفسير الرد

تعرض Route Optimization API مسارات للمركبات في طلبك. يتم تخصيص الشحنات للمركبات أو قد يتم تخطّيها حسب خصائص الطلب.

تحتوي رسالة OptimizeToursResponse (REST، gRPC) على مستويين رئيسيين رئيسيين. المواقع:

  • routes[] هي المسارات لكل مركبة مع الشحنات المخصّصة لها. على كل يحتوي Route على مقاييس تعكس خصائص ذلك المسار الفردي.
  • تمثّل metrics مقاييس مجمّعة للردود بأكملها على مستوى جميع المركبات وخطط المسارات. تحتوي مقاييس المستوى الأعلى على الخصائص نفسها مثل المقاييس لكل مسار، مع القيم المجمّعة على مستوى جميع المسارات

وقد لا تتم تعبئة بعض السمات في بعض الأحيان استنادًا إلى نتائج التحسين:

  1. تعرض السمة skippedShipments[] الشحنات التي لا يتم إجراؤها بواسطة أي مركبة. يمكن تخطّي الشحنة إذا تعذّر إتمامها خلال المهلة المحددة. القيود أو إذا كانت تكلفة تنفيذ الشحنة تتجاوز تكلفة العقوبة. على سبيل المثال، إذا كان وقت استلام الشحنة أو تسليمها ضيقًا جدًا timeWindow قد لا تكون إحدى المركبات ممكنة أو فعّالة من حيث التكلفة إجراء الزيارة خلال الفترة الزمنية المطلوبة.
  2. يحدّد validationErrors[] الأخطاء التي تجعل الطلب غير صالح أو من المستحيل حله عند ضبط solvingMode للطلب على VALIDATE_ONLY في وضع DEFAULT_SOLVE العادي، ستظهر أخطاء التحقّق من الصحة في رسالة خطأ بدلاً من نص الاستجابة. لاحظ أن يمكن لوضع حل VALIDATE_ONLY الإبلاغ عن أخطاء متعددة في آنٍ واحد، وهو ما يمثل مفيدة لتصحيح أخطاء الطلبات بسرعة.

خصائص المسار

كل إدخال في routes[] هو رسالة ShipmentRoute (REST وgRPC). على كل تمثّل السمة ShipmentRoute تخصيص المسار لمركبة معيّنة من الطلب. سمات ShipmentRoute المهمة ذات الصلة بسماتها المقابلة تشمل Vehicle ما يلي:

  • يمثّل vehicleIndex فهرسًا قائمًا على صفر لـ Vehicle في النطاق المقابل لطلب إرسال رسالة. تتجاهل استجابات REST هذه السمة عندما تكون القيمة صفرًا.
  • "vehicleStartTime" هو الوقت الذي يجب أن تبدأ فيه المركبة مسارها.
  • vehicleEndTime هو الوقت الذي يُتوقّع أن تنتهي فيه المركبة. المسار الصحيح.

في الردّ، سيظهر routes بالشكل التالي:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

تشمل كل ShipmentRoute قائمة مرتّبة بقيمة visits التي ستنفّذها المركبة. مكتملة. يمثل كل Visit (REST وgRPC) VisitRequest (REST، gRPC) من الطلب ذي الصلة. مهمة Visit وتشمل السمات ما يلي:

  • shipmentIndex هو المؤشر القائم على الصفر للشحنة التي تنتمي إليها هذه الزيارة إليه في الطلب المقابل.
  • تكون السمة isPickup صحيحة عندما تكون الزيارة للاستلام وتكون خاطئة عندما تكون الزيارة. التسليم. تحذف استجابات REST هذه السمة عندما تكون القيمة خاطئة.
  • visitRequestIndex هو فهرس بقيمة صفرية لـ VisitRequest من Shipment.pickups أو Shipment.deliveries في الطلب المقابل التي تمثلها Visit. تحذف استجابات REST هذه السمة عند حذف والقيمة تساوي صفرًا.
  • startTime هو الوقت الذي يُتوقع أن تبدأ فيه الزيارة.
  • نوع تحميل الخرائط loadDemands لتحميل مقدار التحميل المطلوب لإكمال Visit تكون مبالغ التحميل سلبية لزيارات التسليم، وهي تمثّل التحميل. تتم إزالتها من السيارة.

في ما يلي مثال على السمة Visit:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

يشمل كل ShipmentRoute قائمة مرتبة من transitions تمثّل التنقّل بين visits لمركبة معيّنة. رسالة Transition مهمة (REST، وgRPC) تشمل ما يلي:

  • startTime هو الوقت الذي ستبدأ فيه المركبة في إجراء انتقالي.
  • travelDuration هي المدة التي يجب أن تنتقل إليها المركبة. لإكمال عملية الانتقال.
  • travelDistanceMeters هي المسافة بالأمتار التي يجب أن تحلّها المركبة. السفر لإكمال عملية الانتقال.
  • تشير قيمة trafficInfoUnavailable إلى ما إذا كانت بيانات حركة المرور متاحة انتقالي.
  • تشير السمة waitDuration إلى مدة عدم النشاط التي تقضيها المركبة في الانتظار قبل أن تتمكن من إجراء ذلك. تَشْغِيلُ الْـ Visit التَّالِي. وقد يحدث ذلك بسبب start_time من تتم متابعة Visit.
  • totalDuration هو إجمالي مدة النقل، بما في ذلك السفر، والانتظار والاستراحة والتأخير.
  • نوع تحميل الخرائط في vehicleLoads لمقدار حمولة المركبة أثناء الرحلة هذا الانتقال.

في ما يلي مثال على السمة Transition:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

يتم توضيح العلاقة بين vists وtransitions في تحسين طلبات الاستلام والتسليم، وكذلك في ShipmentRoute مستندات مرجعية (REST وgRPC)

خصائص المقاييس

تلخِّص رسالة Metrics (REST، gRPC) الحل بأكمله. تشمل بعض سمات Metrics المهمة ما يلي:

  • totalCost هو إجمالي التكلفة المترتبة على إكمال المسارات. مزيد من المعلومات عن التكاليف في معلمات نموذج التكلفة.
  • usedVehicleCount هو إجمالي عدد المركبات المستخدَمة في الحلّ. يمكن أن يكون للمركبات مسارات فارغة عندما يقرّر المطوّر أن استخدامها غير ضروري.
  • skippedMandatoryShipmentCount هو عدد الشحنات التي تم تخطيها "إلزامي". لا تحدِّد الشحنة الإلزامية سمة penaltyCost يتم تكبدها إذا تم تخطي الشحنة. لا يزال بإمكان الشحنات الإلزامية تخطيها إذا لم يكن أداؤها قابلاً للتنفيذ في ظل قيود محددة. اطّلع على مزيد من المعلومات عن التكاليف في معلمات نماذج التكلفة.

يتم الإبلاغ عن المقاييس الإضافية في شكل رسائل AggregatedMetrics (REST، gRPC). يُستخدم نوع الرسالة AggregatedMetrics السمة Metrics.aggregatedRouteMetrics وShipmentRoute.metrics يحتوي الموقع "Metrics.aggregatedRouteMetrics" على مقاييس مجمّعة عبر كل ShipmentRoute في OptimizeToursResponse. كل ShipmentRoute.metrics الذي يحتوي على مقاييس لهذا ShipmentRoute تحديدًا.

تتضمّن سمات AggregatedMetrics المهمة ما يلي:

  • performedShipmentCount هو عدد الشحنات التي تؤديها المركبات على مساراتهم بالكامل.
  • travelDuration هو إجمالي الوقت الذي تقضيه المركبات في النقل أثناء النقل واستكمال مساراتهم.
  • waitDuration هو إجمالي الوقت الذي تقضيه المركبات في الانتظار أثناء إكمالها مساراتهم.
  • delayDuration هو إجمالي مدة التأخير للمركبات. عادة ما يكون هذا صفر ما لم يتم استخدام TransitionAttributes في الطلب.
  • breakDuration هو إجمالي الوقت الذي تقضيه المركبات في فترات الاستراحة أثناء واستكمال مساراتهم.
  • visitDuration هو إجمالي الوقت الذي تقضيه المركبات في تنفيذ الزيارات أثناء واستكمال مساراتهم. وهذا هو مجموع كل قيم VisitRequest.duration لـ VisitRequest بما يتوافق مع Visit المخصصة للمركبة المعنية.
  • totalDuration هو إجمالي المدة المطلوبة لإكمال المركبات والمسارات.
  • travelDistanceMeters هو إجمالي المسافة التي قطعتها المركبات أثناء واستكمال مساراتهم.
  • maxLoads أنواع تحميل الخرائط إلى الحد الأقصى لمقدار الحمولة الذي يتم نقله بواسطة المركبات في أي وقت على مساراتها.

يظهر مثال لرسالة Metrics على النحو التالي:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

المثال الكامل

مثال كامل لرد مكتمل على الطلب من قسم إنشاء طلب مثل:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}