Yük talepleri ve sınırları

Bu kılavuzda, loadDemands, loadLimits ve bunların 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ın ve sevkiyatların şu durumlarda göz önünde bulundurulması gereken fiziksel özellikleri vardır: bir yol planlama.

  • Taşıtlar: loadLimits özelliği, kaldırabiliyor. 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 kullanıldığında optimize edicinin Sevkiyatları, araçlara en uygun şekilde atamayı ve kargo taleplerinizi göz önünde bulundurun.

Bu dokümanın geri kalanında loadLimits ve loadDemands ayrıntılı olarak açıklanmaktadır.

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

Her yükleme talebini ve sınır kısıtlamasını bir tür bazında 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 eşyaların 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ının maxLoad özelliğine sahip çeşitli özellikleri vardır aracın belirtilen türdeki maksimum yük kapasitesini temsil eder.

Bir gönderinin loadDemands, atanan aracının loadLimits özelliğini yalnızca şu durumlarda tüketir: ikisi de eşleşen yükleme türü anahtarlarına sahiptir. Örneğin, loadDemands /:

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

sevkiyatın weightKg türünde 50 yükleme birimi gerektirir tamamlandı. Ş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. Örneğin OptimizeToursResponse mesajındaki (REST, gRPC)routes.transitions girişine gidin. 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], 80 weightKg yük talebine sahip.
  • vehicles[0] uygulamasının yükleme sınırı 100 weightKg.

İsteğe verilen yanıtı yük talepleri ve sınırlar

{
  "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] alındı
  2. shipment[1] alındı
  3. shipment[0] teslim edildi
  4. shipment[1] teslim edildi
  5. shipment[2] alındı
  6. shipment[2] teslim edildi

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

Her visits girişi, araç yükünde meydana gelen değişikliği içerir. Visit de tamamlamanız gerekir. Pozitif yük değerleri gönderi yüklemesini gösterirken Negatif değerler, sevkiyat yüklemesinin kaldırılmasını gösterir.

Her transitions girişi, süre boyunca toplam araç yükünü içerir Transition. Ö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] konumuna shipments[2] taşıyan 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. İlgili içeriği oluşturmak için kullanılan LoadLimit mesajının maxLoad özelliği kesin bir kısıtlama ifade ediyor: Araç hiçbir zaman belirtilen maxLoad değerini aşan yük taşımamalıdır türü. softMaxLoad ve costPerUnitAboveSoftMax özellikleri yumuşak bir değer 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:

  • Gerekli minimum sayıdan daha fazla araç arasında sevkiyatların dengelenmesi uygun maliyetli olduğunu
  • Sürücünün rahatça kullanabileceği öğe sayısına göre tercihini ifade etme belirli bir rotada teslim alma ve teslim etme
  • aşınma ve aşınma riskini azaltmak amacıyla, taşıtları maksimum fiziksel kapasitelerinin altında bakım maliyetlerini azaltır

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ı ifade ederken, 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.