تعرض واجهة برمجة التطبيقات 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
هو إجمالي الوقت الذي تقضيه المركبات في إجراء الزيارات أثناء completing their routes. وهذا هو مجموع كل قيم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
}
}
}