هزینه های بارگذاری

Load costs are defined in the `loadLimits` property of a `Vehicle` under `ShipmentModel`.

هزینه‌های بار، هزینه‌ها یا جریمه‌هایی را که یک وسیله نقلیه بر اساس باری که بین بارگیری و تحویل بار حمل می‌کند، متحمل می‌شود، مشخص می‌کند. می‌توانید این هزینه‌ها را بر اساس مسافت سفر با 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