تعرض 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).
خصائص المقاييس
تلخِّص رسالة 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
}
}
}