تعرض واجهة برمجة التطبيقات Route Optimization API مسارات للمركبات في الطلب ذي الصلة. يتم تعيين الشحنات إلى المركبات، أو يمكن تخطّيها استنادًا إلى خصائص الطلب.
تحتوي رسالة OptimizeToursResponse (REST، gRPC) على سمتَين رئيسيتَين على أعلى مستوى:
routes[]هي مسارات كل مركبة مع الشحنات المخصّصة لها. يحتوي كلRouteعلى مقاييس تعكس خصائص هذا المسار الفردي.metricsهي مقاييس مجمَّعة للردّ بأكمله، في جميع المركبات وخطط المسارات. تحتوي المقاييس ذات المستوى الأعلى على الخصائص نفسها التي تحتوي عليها مقاييس كل مسار، مع تجميع القيم في جميع المسارات.
قد لا يتم ملء بعض السمات دائمًا استنادًا إلى نتائج التحسين:
- تعرض
skippedShipments[]الشحنات التي لا يتم تنفيذها بواسطة أي مركبة. يمكن تخطّي عملية شحن إذا تعذّر إجراؤها ضمن القيود المحدّدة أو إذا تجاوزت تكلفة الشحن تكلفة الغرامة. على سبيل المثال، إذا كان موعد استلام شحنة أو تسليمها ضمنtimeWindowضيق جدًا، قد لا يكون من الممكن أو الفعّال من حيث التكلفة أن تتم الزيارة خلال الفترة الزمنية المطلوبة. - تحدّد
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). لمزيد من المعلومات حول السمتَين
routePolyline وrouteToken في رسالة Transition، يُرجى الاطّلاع على الخطوط المتعددة الانتقالية ورموز المسارات.
خصائص المقاييس
تلخّص رسالة 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الخاصة بـVisitRequests التي تتوافق معVisits المخصّصة للمركبة المعنية.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
}
}
}