Yük maliyetleri

Yükleme maliyetleri, `ShipmentModel` altındaki bir `Vehicle` öğesinin `loadLimits` özelliğinde tanımlanır.

Yük maliyetleri, bir aracın sevkiyat teslim alma ve teslimat işlemleri arasında taşıdığı yüke göre oluşan maliyetleri veya cezaları belirtir. Bu maliyetleri costPerKilometer ile seyahat mesafesine, costPerTraveledHour ile seyahat süresine göre yapılandırabilir veya ikisini aynı anda kullanabilirsiniz.

Aşağıdaki gibi hedefleri desteklemek için yük maliyetlerini yapılandırın:

  • Kargo ağırlığıyla artan yakıt maliyetlerini hesaba katın.
  • Ağır yüklenmiş araçları uzun mesafelerde yönlendirmekten kaçının.
  • Ağır kargodan kaynaklanan araç aşınmasını ve yıpranmasını hesaba katın.

Özellikler

Vehicle öğesinin loadLimits özelliğinde yükleme maliyetlerini belirtin. Yük maliyetleri, diğer tüm maliyet parametreleri gibi boyutsuz, göreceli maliyet birimlerini kullanır.

Yük maliyetlerini tanımlamak için aşağıdaki özellikleri kullanabilirsiniz:

Mülk Tür Açıklama
costPerKilometer Nesne Seyahat maliyetlerini gidilen kilometreye göre hesaplamak için LoadCost nesne türünü içerir.
costPerTraveledHour Nesne Bekleme, ziyaret ve mola süreleri hariç olmak üzere, seyahat edilen süreye göre seyahat maliyetlerini hesaplamak için LoadCost nesne türünü içerir.

LoadCost

LoadCost ileti türü, belirli bir yükü taşımanın seyahat maliyetini tanımlar. Yük eşiği belirlemenize ve ardından bu eşiğin hem altında hem de üstünde yük birimi başına farklı maliyet oranları belirtmenize olanak tanır.

LoadCost nesnesi aşağıdaki yapılandırma parametrelerini içerir:

Parametre Tür Açıklama
loadThreshold dize (int64 biçimi) Maliyet hesaplama oranının değiştiği yük düzeyi. 0 varsayılandır.
costPerUnitAboveThreshold Sayı loadThreshold üzerindeki her yük birimine uygulanan maliyet. Varsayılan değer 0'dır.
costPerUnitBelowThreshold Sayı Yükün her bir birimine uygulanan maliyet, loadThreshold değerine eşit veya bu değerden düşüktür. Varsayılan değer 0'dır.

Yük maliyetlerini gönderimlerle eşleştirme

Bir aracın taşıdığı yük, rotasındaki gönderilerin loadDemands türüyle eşleştiğinde yükleme maliyetleri uygulanır. Yük türleri, ağırlık veya hacim gibi rastgele dizelerdir. Yük türlerini yapılandırma hakkında daha fazla bilgi için Yük türleri başlıklı makaleyi inceleyin.

Örnekler

Bu bölümde üç tür örnek ele alınmaktadır:

  • Yükleme maliyetlerinin yapısını gösteren kod örnekleri.
  • Yükleme maliyetlerini kullanarak bir işletme hedefine ulaşmanın bir yolunu gösteren örnek senaryo.
  • İstek örneği: Örnek senaryoda ayarlanan değerleri içerir.

Kod örnekleri

Aşağıdaki örnekte, mevcut tüm yapılandırma parametreleriyle yük maliyetinin nasıl yapılandırılacağı gösterilmektedir. Bu örnekte costPerKilometer kullanılıyor ancak maliyetleri mesafeye göre değil, seyahat süresine göre hesaplamak için costPerTraveledHour ile değiştirebilirsiniz.

{
  "model": {
    "vehicles": [{
      "loadLimits": {
        "LOAD_TYPE": {
          "maxLoad": "MAX_LOAD",
          "costPerKilometer": {
            "loadThreshold": "LOAD_THRESHOLD",
            "costPerUnitAboveThreshold": COST_ABOVE,
            "costPerUnitBelowThreshold": COST_BELOW
          }
        }
      }
    }]
  }
}

Örnek senaryo

Bu bölümde, yakıt tüketimini optimize etmek istediğiniz ve tüketilen yakıtın mesafeyle kargo ağırlığıyla orantılı olduğu bir senaryo açıklanmaktadır. Araçlar daha ağır yükler taşırken daha fazla yakıt tükettiğinden, önce daha ağır paketleri teslim edecek rotalar planlamanız gerekir.

Bu davranışı ayarlamak için isteğinizi, ağır kargoyla uzun mesafeler kat eden araçları cezalandıracak şekilde yapılandırabilirsiniz. Bu örnek için isteğinizde aşağıdaki özellik değerlerini kullanın:

Ebeveyn Mülk Tür Değer Senaryo
loadLimits yük türü dize weightKg İzlenecek kapasite türünü tanımlar. Bu örnekte, kargo ağırlığını kilogram cinsinden belirtmek için weightKg kullanılmıştır.
loadLimits maxLoad dize 100 Aracın taşıyabileceği maksimum kargo ağırlığı.
costPerKilometer loadThreshold dize 15 Temel yük eşiğini ayarlar. 15 kg'ın üzerindeki kargo ağırlığı, yüke dayalı yakıt maliyeti cezasına tabidir.
costPerKilometer costPerUnitAboveThreshold sayı 1 Yakıt maliyeti katsayınız olarak kullanılır. Katedilen her kilometre için 15 kg eşiğini aşan her kilogram kargo 1 maliyet birimi olarak değerlendirilir.
loadDemands amount dize 1. kargo: 50
2. kargo: 10
3. kargo: 80
Üç gönderiminizin her biri için kargo ağırlığını belirtir.

Bu senaryoda, yapılandırdığınız değerler aşağıdaki etkilere sahiptir:

  • Optimizasyon aracı, en ağır paketlerinizi önce teslim etmek için rotalarınızı düzenler. Çözücü, ağır yükle gidilen mesafeyi en aza indirmek için 80 kg ve 50 kg'lık teslimatları rotanın başında planlar.
  • Optimizasyon aracı, rotalarınızı ağır yükle katedilen mesafeyi en aza indirecek şekilde düzenler. Bu ayarların rotalarınızı nasıl etkilediğini görmek için costPerUnitAboveThreshold değerini 1'dan 5'ye yükseltebilirsiniz. Ağırlık cezasını artırarak optimizasyon aracını daha ağır kargoyla gidilen mesafeyi en aza indirmek için daha da fazla çalışmaya teşvik edersiniz. Bu da teslimat sırasını yeniden düzenleyebilir veya gönderileri birden fazla araca bölebilir.

İstek örneği

Aşağıdaki örnekte, örnek senaryodaki yük maliyeti değerlerini içeren temel bir optimizeTours isteğinin yapısı gösterilmektedir:

{
  "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
            }
          }
        }
      }
    ]
  }
}

Hesaplama formülleri

Optimizasyon aracı, yük maliyetlerini aşağıdaki formülleri kullanarak hesaplar.

Tam eşik hesaplaması

Hem costPerUnitAboveThreshold hem de costPerUnitBelowThreshold değerini belirttiğinizde, loadThreshold değerinin hem üstünde hem de altında kalan yük miktarları için ayrı seyahat maliyetleri oluşur. Formül şöyledir:

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

Örneğin, İstek örneğindeki değerleri kullanarak, costPerUnitBelowThreshold değerinin 2 olduğu durumda, araç 50 birim yük taşıyarak 10 kilometre yol kat ederse hesaplama şu şekilde yapılır:

max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units

Eşik üstü hesaplama

Yalnızca costPerUnitAboveThreshold değerini belirttiğinizde hesaplama, tam eşik formülünün özel bir durumu olur. Eşiğin altındaki maliyet sıfır olduğundan, tam formülün ikinci yarısı sıfır olarak değerlendirilir. Formül şöyledir:

cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold

Örneğin, İstek örneğindeki değerleri kullanarak loadThreshold değerini 15 ve costPerUnitAboveThreshold değerini 1 olarak belirlediğimizde, araç 50 kg yük taşıyarak 10 kilometre yol kat ederse hesaplama şu şekilde yapılır:

max(50 - 15, 0) * 10 * 1 = 350 cost units

Eşiğin altındaki hesaplama

Benzer şekilde, yalnızca costPerUnitBelowThreshold değerini belirtirseniz hesaplama, eşiğin üzerindeki maliyetin sıfır olduğu tam eşik formülünün başka bir özel durumu olur. Formül şöyledir:

cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold