تحدّد تكاليف الحمولة التكاليف أو العقوبات التي تتكبّدها المركبة استنادًا إلى الحمولة التي تحملها بين عمليات استلام الشحنات وتسليمها. يمكنك ضبط هذه التكاليف استنادًا إلى مسافة الرحلة مع costPerKilometer أو مدة الرحلة مع costPerTraveledHour أو استخدام كليهما في الوقت نفسه.
اضبط تكاليف التحميل لتحقيق أهداف مثل ما يلي:
- احتسِب تكاليف الوقود التي تزداد مع وزن الحمولة.
- تجنُّب توجيه المركبات المحمّلة بشكل كبير لمسافات طويلة
- احتساب تكلفة استهلاك المركبة بسبب الحمولة الثقيلة
الخصائص
حدِّد تكاليف التحميل ضمن السمة loadLimits الخاصة بـ Vehicle.
مثل جميع مَعلمات التكلفة الأخرى، تستخدم تكاليف التحميل وحدات تكلفة نسبية بدون أبعاد.
يمكنك تحديد تكاليف التحميل باستخدام الخصائص التالية:
| الموقع | النوع | الوصف |
|---|---|---|
costPerKilometer |
عنصر | يحتوي على نوع العنصر LoadCost لاحتساب تكاليف السفر استنادًا إلى الكيلومترات المقطوعة. |
costPerTraveledHour |
عنصر | يحتوي على نوع العنصر LoadCost لحساب تكاليف السفر استنادًا إلى ساعات السفر، باستثناء أوقات الانتظار والزيارة والاستراحة. |
LoadCost
يحدّد نوع الرسالة LoadCost تكلفة السفر لنقل حمولة معيّنة. تتيح لك هذه الاستراتيجية تحديد حدّ أدنى للحمل، ثم تحديد معدّلات تكلفة مختلفة لكل وحدة حمل أقل من هذا الحدّ الأدنى وأعلى منه.
يحتوي العنصر LoadCost على مَعلمات الإعداد التالية:
| المَعلمة | النوع | الوصف |
|---|---|---|
loadThreshold |
سلسلة (بتنسيق int64) | مستوى التحميل الذي يتغير فيه معدّل احتساب التكلفة القيمة التلقائية هي 0. |
costPerUnitAboveThreshold |
العدد | التكلفة المطبَّقة على كل وحدة من الحمل فوق loadThreshold القيمة التلقائية هي 0. |
costPerUnitBelowThreshold |
العدد | التكلفة المطبَّقة على كل وحدة من وحدات التحميل التي تقل عن loadThreshold أو تساويها القيمة التلقائية هي 0. |
مطابقة تكاليف الشحن مع الشحنات
تنطبق تكاليف الحمولة عندما تتطابق حمولة المركبة مع loadDemands
نوع الشحنات على مسارها. أنواع الأحمال هي سلاسل عشوائية، مثل الوزن أو الحجم. لمزيد من التفاصيل حول ضبط أنواع التحميل، يُرجى الاطّلاع على أنواع التحميل.
أمثلة
يتناول هذا القسم ثلاثة أنواع من الأمثلة:
- عينات من الرموز البرمجية توضّح بنية تكاليف التحميل
- مثال يوضّح إحدى طرق استخدام تكاليف التحميل لتحقيق هدف تجاري
- مثال على طلب يتضمّن القيم التي تم ضبطها في سيناريو المثال
عيّنات تعليمات برمجية
يوضّح المثال التالي كيفية تنظيم تكلفة التحميل باستخدام جميع مَعلمات الإعداد المتاحة. يستخدم هذا النموذج costPerKilometer، ولكن يمكنك استبداله بـ costPerTraveledHour لاحتساب التكاليف استنادًا إلى مدة السفر بدلاً من المسافة.
{
"model": {
"vehicles": [{
"loadLimits": {
"LOAD_TYPE": {
"maxLoad": "MAX_LOAD",
"costPerKilometer": {
"loadThreshold": "LOAD_THRESHOLD",
"costPerUnitAboveThreshold": COST_ABOVE,
"costPerUnitBelowThreshold": COST_BELOW
}
}
}
}]
}
}
مثال على السيناريو
يوضّح هذا القسم سيناريو تريد فيه تحسين استهلاك الوقود، ويكون الوقود المستهلَك متناسبًا مع المسافة ووزن الحمولة. بما أنّ المركبات تستهلك المزيد من الوقود عند نقل حمولات أثقل، عليك التخطيط للطرق التي تنقل الحِزم الأثقل أولاً.
لضبط هذا السلوك، يمكنك إعداد طلبك لمعاقبة المركبات التي تقطع مسافات طويلة مع حمولة ثقيلة. في هذا المثال، استخدِم قيم السمات التالية في طلبك:
| أحد الوالدين | الموقع | النوع | القيمة | السيناريو |
|---|---|---|---|---|
loadLimits |
نوع التحميل | سلسلة | weightKg |
تحدّد هذه السمة نوع السعة التي يجب تتبُّعها. يستخدم هذا المثال weightKg لتمثيل وزن الحمولة بالكيلوغرام. |
loadLimits |
maxLoad |
سلسلة | 100 |
الحدّ الأقصى لوزن البضائع التي يمكن أن تحملها المركبة |
costPerKilometer |
loadThreshold |
سلسلة | 15 |
تضبط هذه السمة الحدّ الأدنى لعدد مرات التحميل الأساسي. أي وزن للشحن يزيد عن 15 كيلوغرامًا يؤدي إلى فرض غرامة على تكلفة الوقود استنادًا إلى الحمولة. |
costPerKilometer |
costPerUnitAboveThreshold |
الرقم | 1 |
يمثّل معامل تكلفة الوقود. مقابل كل كيلومتر يتم قطعه، يتم احتساب وحدة تكلفة واحدة لكل كيلوغرام من الحمولة يتجاوز الحدّ البالغ 15 كيلوغرامًا. |
loadDemands |
amount |
سلسلة | الشحنة 1: 50الشحنة 2: 10الشحنة 3: 80 |
تحدّد هذه السمة وزن الشحنة لكلّ من شحناتك الثلاث. |
في هذا السيناريو، يكون للقيم التي تم ضبطها التأثيرات التالية:
- يرتّب المحسِّن مساراتك لتسليم أثقل الحِزم أولاً. يحدّد برنامج الحلّ مواعيد تسليم الشحنات التي تزن 80 كغ و50 كغ في بداية المسار لتقليل المسافة المقطوعة أثناء نقل حمولة ثقيلة.
- ترتّب أداة التحسين مساراتك لتقليل المسافة المقطوعة مع حمولات ثقيلة. لمعرفة تأثير هذه الإعدادات في طرقك، يمكنك زيادة
costPerUnitAboveThresholdمن1إلى5. من خلال زيادة عقوبة الوزن، يمكنك حثّ أداة التحسين على العمل بجد أكبر لتقليل المسافة المقطوعة مع حمولة أثقل، ما قد يؤدي إلى إعادة ترتيب تسلسل عمليات التسليم أو تقسيم الشحنات على عدة مركبات.
مثال على الطلب
يوضّح المثال التالي بنية طلب optimizeTours أساسي يتضمّن قيم تكلفة التحميل من سيناريو المثال:
{ "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } }
صيغ الاحتساب
تحسب أداة التحسين تكاليف التحميل باستخدام الصيغ التالية.
احتساب الحدّ الأدنى الكامل
عند تحديد كل من costPerUnitAboveThreshold وcostPerUnitBelowThreshold، ستتحمّل تكاليف سفر منفصلة لكميات الشحن التي تزيد عن loadThreshold وتلك التي تقل عنها. والمعادلة المستخدَمة في ذلك هي:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
+ min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold
على سبيل المثال، باستخدام القيم من مثال الطلب، حيث قيمة
costPerUnitBelowThreshold هي 2، إذا قطعت المركبة 10 كيلومترات
وهي تحمل حمولة تبلغ 50، تكون عملية الحساب كما يلي:
max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units
احتساب القيم الأعلى من الحدّ
عند تحديد costPerUnitAboveThreshold فقط، يكون الحساب حالة خاصة من صيغة الحد الكامل. بما أنّ التكلفة أقل من الحدّ الأدنى
وهي صفر، فإنّ النصف الثاني من الصيغة الكاملة يتم تقييمه إلى صفر. والمعادلة المستخدَمة في ذلك هي:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
على سبيل المثال، باستخدام القيم الواردة في مثال الطلب حيث تكون قيمة loadThreshold هي 15 وقيمة costPerUnitAboveThreshold هي 1، إذا قطعت المركبة مسافة 10 كيلومترات وهي تحمل حمولة تبلغ 50، يكون الحساب كما يلي:
max(50 - 15, 0) * 10 * 1 = 350 cost units
احتساب القيم الأقل من الحدّ الأدنى
وبالمثل، إذا حدّدت costPerUnitBelowThreshold فقط، يكون الحساب حالة خاصة أخرى من صيغة الحدّ الكاملة حيث تكون التكلفة فوق الحدّ صفرًا. والمعادلة المستخدَمة في ذلك هي:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold