Yük talepleri ve sınırları

Bu kılavuzda, loadDemands ve loadLimits özellikleri ile bu terimlerin her biri ile olan ilişkisi açıklanmaktadır. diğer.

Teslim alma ve teslimat süresi aralığı Kısıtlamaları'nda belirtildiği gibi OptimizeToursRequest mesajı (REST, gRPC) Optimize edilen sorunla ilgili kısıtlamaları belirten özellikler. Birkaç OptimizeToursRequest özellikleri yükleme kısıtlamalarını temsil eder.

Araçlar ve kargoların, rota planlanırken dikkate alınması gereken fiziksel özellikleri vardır.

  • Araçlar: loadLimits mülkü, aracın taşıyabileceği maksimum yükü belirtir. Vehicle mesajı (REST, gRPC) belgelerinden faydalanabilirsiniz.
  • Gönderimler: loadDemands özelliği, belirli bir tükettiğini gösterir. Shipment mesajı (REST, gRPC) belgelerinden faydalanabilirsiniz.

Bu iki kısıtlama birlikte, optimizasyon aracının kargoları filo kapasitenize ve kargo taleplerinize en uygun şekilde araçlara uygun şekilde atamasını sağlar.

Bu belgenin geri kalanında loadLimits ve loadDemands ayrıntılı olarak ele alınmaktadır.

Yükleme talepleri ve sınırları: türler

Her yük talebini ve sınırlama kısıtlamasını bir tür olarak ifade edersiniz.

Aşağıdaki örnekler gibi kendi yükleme türlerinizi sağlayabilirsiniz:

  • ağırlık
  • ses düzeyi
  • doğrusal ölçümler
  • Taşınan öğelerin veya ekipmanların adları

Bu kılavuzda, örnek türü olarak weightKg kullanılmıştır.

Hem Shipment.loadDemands hem de Vehicle.loadLimits, Protokol Arabelleklerini kullanır map türü (yükleme türlerini temsil eden string anahtarları ile).

Shipment.loadDemands değerleri, Load mesajını (REST, gRPC) kullanır. Load mesajı, kapasitenin ne kadar olduğunu gösteren tek bir amount özelliğine sahip belirtilen türde gönderimi tamamlamak için gereklidir.

Vehicle.loadLimits değerleri, LoadLimit mesajını (REST, gRPC) ekleyin. LoadLimit mesajında çeşitli özellikler bulunur. maxLoad, aracın belirtilen türdeki maksimum yük kapasitesini temsil eder.

Bir gönderinin loadDemands, yalnızca ikisinin eşleşen yükleme türü anahtarlarına sahip olması durumunda atanmış aracının loadLimits'unu tüketir. Örneğin, loadDemands içeren bir gönderim:

"loadDemands": {
  "weightKg": {
    "amount": 50
  }
}

gönderimin tamamlanması için weightKg türündeki 50 yük birimi gerekir. Şu özelliklere sahip bir araç: loadLimits:

"loadLimits": {
  "weightKg": {
    "maxLoad": 100
  }
}

nakliyeyi tamamlayabilir, çünkü aracın maxLoad weightKg türü, gönderimin loadDemands tutarından büyük veya ona eşit weightKg türü. Ancak şu özelliklere sahip bir araç: loadLimits:

"loadLimits": {
  "equipmentRackStorage": {
    "maxLoad": 10
  }
}

dolaylı olarak sınırsız weightKg kapasitesine sahiptir. weightKg tutarında bir yükleme sınırı vardır. Böylece araç, ağırlık talebi.

Gönderiler ve araçlar arasında yük aktarımı

Sevkiyatlar araçlar tarafından alınıp teslim edilirken, teslimatın loadDemand, gönderim ile araç arasında aktarma yapıyor. Aracın yüklerini, belirli bir araç için OptimizeToursResponse mesajının (REST, gRPC)routes.transitions girişinde görebilirsiniz. Sıra şöyle: şöyle olur:

  1. Gereken yük kapasitesi, gönderim için loadDemand olarak tanımlanır.
  2. Gönderi, kendisine atanan araç ve aracın vehicleLoads, gönderimin loadDemand tutarı kadar artıyor. Bu aktarım, yanıtta pozitif visits.loadDemands ile temsil ediliyor mesajını alırsınız.
  3. Araç, sevkiyatı teslim eder ve aracın vehicleLoads değeri düşer teslim edilen gönderimin loadDemand tutarı kadar. Bu transfer Yanıt mesajında negatif visits.loadDemands ile gösterilir.

Bir aracın vehicleLoads değeri hiçbir zaman, belirttiği loadLimits değerini aşamaz ilk adımıdır.

Yük talepleri ve sınırlarıyla ilgili eksiksiz bir örnek

İsteğe bağlı olarak yük talepleri ve sınırlar

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0,
        "loadDemands": {
          "weightKg": {
            "amount": 50
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 15.0,
        "loadDemands": {
          "weightKg": {
            "amount": 10
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "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
          }
        }
      }
    ]
  }
}
    

Örnek istek, yükle ilgili çeşitli parametreler içerir:

  • shipments[0], 50 weightKg yükleme talebine sahip.
  • shipments[1], 10 weightKg yükleme talebine sahip.
  • shipments[2]'in yük talebi 80 weightKg.
  • vehicles[0] uygulamasının yükleme sınırı 100 weightKg.

Yük talepleri ve sınırlarını içeren istek yanıtını görme

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T16:00:00Z",
      "vehicleEndTime": "2023-01-13T16:43:27Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T16:00:00Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2023-01-13T16:02:30Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "startTime": "2023-01-13T16:08:55Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "-50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "startTime": "2023-01-13T16:16:37Z",
          "detour": "343s",
          "loadDemands": {
            "weightKg": {
              "amount": "-10"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T16:27:07Z",
          "detour": "1627s",
          "loadDemands": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T16:36:26Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "-80"
            }
          }
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:00:00Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:02:30Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-13T16:05:00Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "60"
            }
          }
        },
        {
          "travelDuration": "212s",
          "travelDistanceMeters": 791,
          "waitDuration": "0s",
          "totalDuration": "212s",
          "startTime": "2023-01-13T16:13:05Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "travelDuration": "380s",
          "travelDistanceMeters": 1190,
          "waitDuration": "0s",
          "totalDuration": "380s",
          "startTime": "2023-01-13T16:20:47Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "409s",
          "travelDistanceMeters": 1371,
          "waitDuration": "0s",
          "totalDuration": "409s",
          "startTime": "2023-01-13T16:29:37Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-13T16:40:36Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        }
      ],
      "metrics": {
        "performedShipmentCount": 3,
        "travelDuration": "1407s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "2607s",
        "travelDistanceMeters": 4812,
        "maxLoads": {
          "weightKg": {
            "amount": "80"
          }
        }
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 48.12,
        "model.vehicles.cost_per_hour": 28.966666666666665
      },
      "routeTotalCost": 77.086666666666659
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 3,
      "travelDuration": "1407s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "2607s",
      "travelDistanceMeters": 4812,
      "maxLoads": {
        "weightKg": {
          "amount": "80"
        }
      }
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T16:00:00Z",
    "latestVehicleEndTime": "2023-01-13T16:43:27Z",
    "totalCost": 77.086666666666659,
    "costs": {
      "model.vehicles.cost_per_hour": 28.966666666666665,
      "model.vehicles.cost_per_kilometer": 48.12
    }
  }
}
    

Eklenen yük kısıtlamaları visits sırasını etkiler:

  1. shipment[0] teslim alındı
  2. shipment[1] alındı
  3. shipment[0] yayınlandı
  4. shipment[1] teslim edildi
  5. shipment[2] alındı
  6. shipment[2] yayınlandı

Bu siparişe göre, üç sevkiyatın araç tarafından tamamlanamayan aynı zamanda (ör. toplam loadDemands) aracın loadLimits.

Her visits girişi, Visit'un tamamlanmasından kaynaklanan araç yükünde meydana gelen değişikliği içerir. Pozitif yükleme değerleri, kargo yüklemeyi, negatif yükleme değerleri ise kargo boşaltmayı temsil eder.

Her transitions girişi, Transition sırasındaki toplam araç yükünü içerir. Örneğin transitions[2], weightKg 60 yükleme, toplam shipment[0] ve shipment[1] yüklerini temsil eder.

routes[0].metrics ve metrics.aggregatedRouteMetrics metrik nesneleri şunları içerir: maxLoads mülkü. weightKg türü için değer 80'dir. Bu değer, şu ifadeyi temsil eder: aracın rotasının, shipments[2] ulaşımını gerçekleştiren kısmı teslimat konumu.

Esnek yükleme sınırı kısıtlamaları

Teslim alma ve teslimat süresi aralığında açıklanan zaman aralıklarında olduğu gibi Kısıtlamalar, yük sınırı kısıtlamalarının sabit ve esnek varyantları vardır. LoadLimit mesajının maxLoad mülkü katı bir kısıtlamayı ifade eder: Araç hiçbir zaman belirtilen türdeki maxLoad değerini aşan yük taşımamalıdır. softMaxLoad ve costPerUnitAboveSoftMax özellikleri yumuşak bir değeri ifade ediyor kısıtlaması, softMaxLoad değerini aşan her birim için bir costPerUnitAboveSoftMax maliyet.

Geçici yükleme sınırı kısıtlamalarının aşağıdakiler gibi çeşitli kullanım alanları vardır:

  • Maliyet etkin olduğunda gönderimleri gerekli minimum sayıdan daha fazla araç arasında dengeleme
  • Sürücülerin rahatça sunabilecekleri öğe sayısına göre tercihini ifade etme belirli bir rotada teslim alma ve teslim etme
  • Araçları, aşınmayı sınırlamak ve bakım maliyetlerini azaltmak için maksimum fiziksel kapasitelerinin altında yükleme

Sert ve hafif yükleme sınırı kısıtlamaları birlikte kullanılabilir. Örneğin, yük sınırı, bir aracın güvenli bir şekilde taşıyabileceği maksimum kargo ağırlığını ifade edebilir bir araç içine sığabilecek maksimum öğe sayısını belirtirken Yumuşak yükleme sınırı, vergilendirilecek öğelerin maksimum ağırlığı veya sayısı olabilir. sürücünün araca her şeyi sığdırabilmesidir.