هزینههای بار، هزینهها یا جریمههایی را که یک وسیله نقلیه بر اساس باری که بین بارگیری و تحویل بار حمل میکند، متحمل میشود، مشخص میکند. میتوانید این هزینهها را بر اساس مسافت سفر با costPerKilometer ، مدت زمان سفر با costPerTraveledHour یا از هر دو به طور همزمان پیکربندی کنید.
هزینههای بار را برای پشتیبانی از اهدافی مانند موارد زیر پیکربندی کنید:
- هزینههای سوخت را که با افزایش وزن بار افزایش مییابد، در نظر بگیرید.
- از رانندگی با وسایل نقلیه سنگین در مسافتهای طولانی خودداری کنید.
- استهلاک وسایل نقلیه ناشی از حمل بار سنگین را در نظر بگیرید.
خواص
هزینههای بار را در ویژگی loadLimits یک Vehicle مشخص کنید. مانند سایر پارامترهای هزینه، هزینههای بار از واحدهای هزینه نسبی و بدون بعد استفاده میکنند.
شما میتوانید هزینههای بار را با استفاده از ویژگیهای زیر تعریف کنید:
| ملک | نوع | توضیحات |
|---|---|---|
costPerKilometer | شیء | شامل یک نوع شیء LoadCost برای محاسبه هزینههای سفر بر اساس کیلومترهای طی شده است. |
costPerTraveledHour | شیء | شامل یک نوع شیء 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 | آستانه بار پایه را تنظیم میکند. هر وزن باری بالای ۱۵ کیلوگرم، جریمه هزینه سوخت بر اساس بار را متحمل میشود. |
costPerKilometer | costPerUnitAboveThreshold | شماره | 1 | به عنوان ضریب هزینه سوخت شما عمل میکند. به ازای هر کیلومتر طی شده، هر کیلوگرم بار بیش از آستانه ۱۵ کیلوگرم، ۱ واحد هزینه ایجاد میکند. |
loadDemands | amount | رشته | محموله ۱: 50محموله ۲: 10محموله ۳: 80 | وزن بار را برای هر یک از سه محموله شما مشخص میکند. |
در این سناریو، مقادیر پیکربندیشده شما اثرات زیر را دارند:
- بهینهساز مسیرهای شما را طوری مرتب میکند که سنگینترین بستهها ابتدا تحویل داده شوند. حلکننده، تحویلهای ۸۰ و ۵۰ کیلوگرمی را در ابتدای مسیر برنامهریزی میکند تا مسافت طی شده در حالت بارگیری سنگین به حداقل برسد.
- بهینهساز مسیرهای شما را طوری مرتب میکند که مسافت طی شده با محمولههای سنگین به حداقل برسد. برای مشاهدهی چگونگی تأثیر این تنظیمات بر مسیرهای شما، میتوانید
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
برای مثال، با استفاده از مقادیر مثال Request ، که در آن مقدار costPerUnitBelowThreshold برابر 2 است، اگر وسیله نقلیه ۱۰ کیلومتر را با باری معادل ۵۰ کیلومتر طی کند، محاسبه به صورت زیر خواهد بود:
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
برای مثال، با استفاده از مقادیر مثال Request که در آن loadThreshold برابر با 15 و costPerUnitAboveThreshold برابر با 1 است، اگر وسیله نقلیه ۱۰ کیلومتر را با باری معادل ۵۰ کیلومتر طی کند، محاسبه به صورت زیر خواهد بود:
max(50 - 15, 0) * 10 * 1 = 350 cost units
محاسبه زیر آستانه
به طور متقارن، اگر فقط costPerUnitBelowThreshold مشخص کنید، محاسبه حالت خاص دیگری از فرمول آستانه کامل است که در آن هزینه بالاتر از آستانه صفر است. فرمول به صورت زیر است:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold