تحتوي رسالة OptimizeToursRequest
(REST، gRPC) على عدد من
المواقع المرتبطة بـ
التكاليف. تمثل مَعلمات التكلفة هذه مجتمعةً قيمة
ونموذج التكلفة يرصد نموذج التكلفة العديد من أهداف تحسين الأداء على مستوى عالٍ في الطلب، مثل:
- منح الأولوية لمسارات
Vehicle
الأسرع على المسارات الأقصر أو العكس في الجوار - إنّ تحديد ما إذا كانت تكلفة تسليم
Shipment
تستحق قيمة إكمال "Shipment
" - إجراء عمليات الاستلام والتسليم خلال الفترات الزمنية فقط عند القيام بذلك فعّالة من حيث التكلفة
الاطّلاع على مثال على طلب يتضمّن التكاليف
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
مواقع تكلفة
تحتوي رسالة Vehicle
(REST وgRPC) على عدة سمات تكلفة:
Vehicle.cost_per_hour
: يمثّل تكلفة تشغيل مركبة في الساعة. بما في ذلك أوقات النقل العام والانتظار والزيارة وأوقات الاستراحة.-
Vehicle.cost_per_kilometer
: يمثّل التكلفة لكل كيلومتر يقطعه المركبة. Vehicle.cost_per_traveled_hour
: يمثل تكلفة تشغيل مركبة أثناء النقل فقط، باستثناء أوقات الانتظار والزيارة والاستراحة.
تتيح مَعلمات التكلفة هذه للمحسِّن إجراء مقارنة بالوقت مقابل المسافة التي تم قطعها.
للمفاضلات. تظهر التكاليف المتكبّدة في المسار المحسَّن في رسالة الردّ على النحو التالي: metrics.costs
:
كلما زاد costPerHour
، يحاول محسِّن الأداء العثور على مسارات أسرع
التي قد لا تكون أقصر المسارات. في هذا المثال، المسار الأسرع هو
أقصر مسار، لذا فإنّ التغييرات في مَعلمات التكلفة لها تأثير بسيط.
Shipment
مواقع تكلفة
تحتوي رسالة Shipment
(REST وgRPC) أيضًا على عدة مَعلمات تتعلّق بالتكلفة:
- تمثل
Shipment.penalty_cost
التكلفة المتكبدة من خلال تخطي الشحنة. - يمثّل
Shipment.VisitRequest.cost
تكلفة طلب استلام محدّد أو التسليم، والذي يستخدم في المقام الأول لتمكين مفاضلات التكلفة بين عمليات الاستلام المتعددة أو وخيارات التسليم لشحنة واحدة.
تستخدم مَعلمات التكلفة Shipment
الوحدات بدون أبعاد نفسها التي تستخدمها تكلفة Vehicle
.
المعلَمات. تتجاوز تكلفة إكمال Shipment
تكلفة العقوبة،
لم يتم تضمين Shipment
في أي من مسارات Vehicle
وبدلاً من ذلك يظهر في
قائمة "skipped_shipments
" في رسالة الرد
ShipmentModel
مواقع تكلفة
تتضمّن رسالة ShipmentModel
(REST وgRPC) تكلفة واحدة.
الموقع، globalDurationCostPerHour
. يتمّ تحمُّل هذه التكلفة استنادًا إلى إجمالي
الوقت المطلوب لجميع المركبات لإكمال ShipmentRoute
. متزايد
تمنح globalDurationCostPerHour
الأولوية لإنجاز جميع الشحنات في وقت أبكر من السابق.
خصائص تكلفة الاستجابة لتحسين المسار
تحتوي الرسالة OptimizeToursResponse
(REST، gRPC) على خصائص تكلفة.
التي تمثّل التكاليف المستحقة أثناء عملية إكمال ShipmentRoute
.
تمثّل السمتان metrics.costs
وmetrics.totalCost
عدد
وحدات التكلفة التي يتم تكبدها عبر جميع المسارات في الاستجابة. يحتوي كل إدخال في routes
على
routeCosts
وrouteTotalCosts
موقع يمثّلان تكاليف ذلك
مسارًا محددًا.
الاطّلاع على ردّ على مثال الطلب مع التكاليف
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
في نموذج الردّ، تكون عناصر metrics.costs
ذات المستوى الأعلى كما يلي:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
تمثل قيمة model.shipments.penalty_cost
التكلفة المتكبدة بسبب
وتخطى الشحنات. يعرض السمة "skippedShipments
" الشحنات التي تم إكمالها.
تم تخطيه.
في هذا المثال، لا يتم تخطّي سوى model.shipments[1]
في نموذج الطلب.
هناك تكلفة جزائية تبلغ 5 وحدات في "model.shipments[1]
" وتتطابق مع إجمالي التكلفة
المفتاح model.shipments.penalty_cost
في مثال الرد. الشحنة منخفضة
penaltyCost
مقارنةً بـ 40.0 costPerHour
و10.0 لـ Vehicle
costPerKilometer
تجعل تخطّي الشحنة أكثر فعالية من حيث التكلفة
وأكمله.
الموضوع المتقدّم: التكاليف والقيود غير الصارمة
عدة خصائص لرسائل OptimizeToursRequest
(REST وgRPC)
تمثّل قيودًا طفيفة، وهي قيود تترتّب عنها تكلفة عند
عن الرضا.
على سبيل المثال، تسمح قيود LoadLimit
(REST وgRPC) بالمركبة
الموقعان softMaxLoad
وcostPerUnitAboveSoftMax
. ينتج عن هذه مجتمعات
التكلفة التناسبية مع وحدات التحميل التي تتجاوز softMaxLoad
، ما يسمح
ينبغي تجاوزه فقط إذا كان ذلك منطقيًا من وجهة نظر التكلفة.
وبالمثل، فإن قيود TimeWindow
(REST، gRPC)
السمتَين soft_start_time
وsoft_end_time
، مع المقابلة
cost_per_hour_before_soft_start_time
وcost_per_hour_after_soft_end_time
يتم تكبدها بناءً على مدى وقت أو تأخر وقوع الحدث المقيد
المتعلقة بـ TimeWindow
.
كما هو الحال مع جميع مَعلمات نموذج التكلفة، يتم التعبير عن تكاليف القيود غير الصارمة باستخدام الوحدات غير المحددة بالحجم نفسها المستخدَمة في مَعلمات التكلفة الأخرى.
تمت معالجة LoadLimit
قيود بالتفصيل في
تحميل الطلبات والحدود: تمت معالجة TimeWindow
قيود بالتفصيل.
في قيود فترة الاستلام والتسليم.