Teslim alma ve teslimatlar için temel durak siparişi optimizasyonu

Bu senaryoda, basit bir dönüşüm ayarıyla bir araca atanan durakların sırasını maliyet parametreleridir. Bu, Rota Optimizasyonu işleminin en basit modudur ve tüm durakların belirtilen zaman aralığı içinde ziyaret edilmesini sağlar.

Aşağıdaki örnekte bir araç ve üç araç içeren temel bir senaryo gösterilmektedir depot adı verilen tek bir konumdan gelen gönderilerdir.

Örnek isteği inceleyin

      {
        "populatePolylines": true,
        "populateTransitionPolylines": true,
        "model": {
          "globalStartTime": "2023-01-13T16:00:00-08:00",
          "globalEndTime": "2023-01-14T16:00:00-08:00",
          "shipments": [
            {
              "deliveries": [
                {
                  "arrivalLocation": {
                    "latitude": 37.789456,
                    "longitude": -122.390192
                  },
                  "duration": "250s"
                }
              ],
              "pickups": [
                {
                  "arrivalLocation": {
                    "latitude": 37.794465,
                    "longitude": -122.394839
                  },
                  "duration": "150s"
                }
              ]
            },
            {
              "deliveries": [
                {
                  "arrivalLocation": {
                    "latitude": 37.789116,
                    "longitude": -122.395080
                  },
                  "duration": "250s"
                }
              ],
              "pickups": [
                {
                  "arrivalLocation": {
                    "latitude": 37.794465,
                    "longitude": -122.394839
                  },
                  "duration": "150s"
                }
              ]
            },
            {
              "deliveries": [
                {
                  "arrivalLocation": {
                    "latitude": 37.795242,
                    "longitude": -122.399347
                  },
                  "duration": "250s"
                }
              ],
              "pickups": [
                {
                  "arrivalLocation": {
                    "latitude": 37.794465,
                    "longitude": -122.394839
                  },
                  "duration": "150s"
                }
              ]
            }
          ],
          "vehicles": [
            {
              "endLocation": {
                "latitude": 37.794465,
                "longitude": -122.394839
              },
              "startLocation": {
                "latitude": 37.794465,
                "longitude": -122.394839
              },
              "costPerKilometer": 10.0,
              "costPerHour": 40.0
            }
          ]
        }
      }
    

Rota optimizasyonu istek alanları

Genel Bakış'ta belirtildiği gibi, en önemli Rota Optimizasyonu isteğidir. mülkleri vehicles ve shipments olarak ayarlanmıştır.

Talep, araca ve gönderilere ek olarak aşağıdakileri de içerir alanlar:

Çoklu çizgiler

populatePolylines ve populateTransitionPolylines, Rota olup olmadığını belirtir Optimizasyon, çoklu çizgiler döndürmelidir.

Hizmet, Çoklu çizgileri Haritalar JS çoklu çizgi codec'ini kullanarak kodlar. Bu codec bileşeni Yazdırılabilir ASCII karakterleri kullanan ikili çoklu çizgi verileri. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için Etkileşimli Çoklu Çizgi Kodlayıcı Yardımcı Programı'nı kullanarak Rota Optimizasyonu. Bu kılavuzdaki örnekte populatePolylines ve populateTransitionPolylines için doğru, diğer kılavuzlar tarafından "yanlış" olarak ayarlandı yanıt boyutunu küçültebilirsiniz.

Kodlamanın açıklaması için Kodlanmış Çoklu Çizgi Algoritma Biçimi'ne bakın. biçimindedir.

Küresel saat kısıtlamaları

model.globalStartTime ve model.globalEndTime rastgele bir 24 değerine ayarlandı saatlik süre. Bu, çıkış zaman damgalarının yorumlanmasını kolaylaştırır.

Konumları ziyaret edin

Örnek istek yalnızca model.shipments[].pickups[].arrivalLocation ve model.shipments[].deliveries[].arrivalLocation. Ayrıca bir de Aracın bir konumdan ayrıldığı durumlarda departureLocation özelliği Varış noktasından farklı bir nokta (ör. girişi olan bir otopark) diğerinde çıkışlar görebilirsiniz. Bu ve sonraki dönemde varış ve kalkış noktalarının aynı olduğu varsayılır.

latLng yerine varış ve kalkış noktası waypoint olarak da kullanılabilir. Waypoint alanları, LatLng yerine Google Yer Kimliklerinin kullanımını destekliyor. araç başlıkları da belirtebilir. Referans belgeleri inceleyin (REST, gRPC) inceleyin.

Örnekteki kısıtlamalar

Bu senaryo, optimize ediciyi çeşitli şekillerde kısıtlar:

  1. Tüm etkinlikler genel başlangıç ve bitiş zamanları arasında tamamlanmalıdır. Bu senaryoda başlangıç ve bitiş zamanları, teslimatlara yakın mesafe ve geniş küresel zaman aralığı.
  2. Tüm gönderimlerin tamamlanması gerekir. Bu, aşağıdaki durumlar söz konusu olduğunda varsayılan davranıştır: shipments tarihinde ceza maliyetleri belirtilmemiş.
  3. costPerKilometer ve costPerHour araçta ayarlandı.

Maliyetler Maliyet Modeli Parametreleri bölümünde ele alınır.

Rota optimizasyonu yanıtı özellikleri

Örnek isteğe verilen yanıtı görüntüleyin

    {
      "routes": [
        {
          "vehicleStartTime": "2023-01-14T00:00:00Z",
          "vehicleEndTime": "2023-01-14T00:36:41Z",
          "visits": [
            {
              "shipmentIndex": 2,
              "isPickup": true,
              "startTime": "2023-01-14T00:00:00Z",
              "detour": "0s"
            },
            {
              "shipmentIndex": 1,
              "isPickup": true,
              "startTime": "2023-01-14T00:02:30Z",
              "detour": "150s"
            },
            {
              "isPickup": true,
              "startTime": "2023-01-14T00:05:00Z",
              "detour": "300s"
            },
            {
              "startTime": "2023-01-14T00:11:25Z",
              "detour": "0s"
            },
            {
              "shipmentIndex": 1,
              "startTime": "2023-01-14T00:19:29Z",
              "detour": "503s"
            },
            {
              "shipmentIndex": 2,
              "startTime": "2023-01-14T00:29:02Z",
              "detour": "1324s"
            }
          ],
          "transitions": [
            {
              "travelDuration": "0s",
              "waitDuration": "0s",
              "totalDuration": "0s",
              "startTime": "2023-01-14T00:00:00Z",
              "routePolyline": {}
            },
            {
              "travelDuration": "0s",
              "waitDuration": "0s",
              "totalDuration": "0s",
              "startTime": "2023-01-14T00:02:30Z",
              "routePolyline": {}
            },
            {
              "travelDuration": "0s",
              "waitDuration": "0s",
              "totalDuration": "0s",
              "startTime": "2023-01-14T00:05:00Z",
              "routePolyline": {}
            },
            {
              "travelDuration": "235s",
              "travelDistanceMeters": 795,
              "waitDuration": "0s",
              "totalDuration": "235s",
              "startTime": "2023-01-14T00:07:30Z",
              "routePolyline": {
                "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@"
              }
            },
            {
              "travelDuration": "234s",
              "travelDistanceMeters": 793,
              "waitDuration": "0s",
              "totalDuration": "234s",
              "startTime": "2023-01-14T00:15:35Z",
              "routePolyline": {
                "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@"
              }
            },
            {
              "travelDuration": "323s",
              "travelDistanceMeters": 1204,
              "waitDuration": "0s",
              "totalDuration": "323s",
              "startTime": "2023-01-14T00:23:39Z",
              "routePolyline": {
                "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@"
              }
            },
            {
              "travelDuration": "209s",
              "travelDistanceMeters": 665,
              "waitDuration": "0s",
              "totalDuration": "209s",
              "startTime": "2023-01-14T00:33:12Z",
              "routePolyline": {
                "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A"
              }
            }
          ],
          "routePolyline": {
            "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@RWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@STY@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A"
          },
          "metrics": {
            "performedShipmentCount": 3,
            "travelDuration": "1001s",
            "waitDuration": "0s",
            "delayDuration": "0s",
            "breakDuration": "0s",
            "visitDuration": "1200s",
            "totalDuration": "2201s",
            "travelDistanceMeters": 3457
          },
          "travelSteps": [
            {
              "duration": "0s",
              "routePolyline": {}
            },
            {
              "duration": "0s",
              "routePolyline": {}
            },
            {
              "duration": "0s",
              "routePolyline": {}
            },
            {
              "duration": "227s",
              "distanceMeters": 794,
              "routePolyline": {
                "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@"
              }
            },
            {
              "duration": "233s",
              "distanceMeters": 791,
              "routePolyline": {
                "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@"
              }
            },
            {
              "duration": "322s",
              "distanceMeters": 1205,
              "routePolyline": {
                "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@"
              }
            },
            {
              "duration": "208s",
              "distanceMeters": 666,
              "routePolyline": {
                "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A"
              }
            }
          ],
          "vehicleDetour": "2201s",
          "routeCosts": {
            "model.vehicles.cost_per_hour": 24.455555555555556,
            "model.vehicles.cost_per_kilometer": 34.57
          },
          "routeTotalCost": 59.025555555555556
        }
      ],
      "totalCost": 59.025555555555556,
      "metrics": {
        "aggregatedRouteMetrics": {
          "performedShipmentCount": 3,
          "travelDuration": "1001s",
          "waitDuration": "0s",
          "delayDuration": "0s",
          "breakDuration": "0s",
          "visitDuration": "1200s",
          "totalDuration": "2201s",
          "travelDistanceMeters": 3457
        },
        "usedVehicleCount": 1,
        "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
        "latestVehicleEndTime": "2023-01-14T00:36:41Z",
        "totalCost": 59.025555555555556,
        "costs": {
          "model.vehicles.cost_per_kilometer": 34.57,
          "model.vehicles.cost_per_hour": 24.455555555555556
        }
      }
    }
    

Rota optimizasyonu yanıtı, aşağıdaki gibi en üst düzey routes alanını içerir: önerilen rotaları, araç başına bir rota olacak şekilde gösterir. Çünkü örnekteki bu kılavuzdaki istek yalnızca bir araç belirtiyor, routes bir araç içeriyor ShipmentRoute mesaj.

ShipmentRoute tesis

ShipmentRoute mesaj türünün en önemli iki özelliği şunlardır: visits ve transitions.

Her Visit, şunlardan birinden teslim alma veya teslimatın tamamlandığını gösterir: istek mesajının VisitRequest'leri. Bir ziyaret, etkin bir şekilde bir araç tarafından belirli bir yerde ve zamanda tamamlanmasıdır.

Her Transition, bir konumdan başka bir konuma giden aracı temsil eder tıklayın. Aracın başlangıç noktası çifti ile ziyaret arasında konumu ve aracın uç noktası.

Aracın tam rotasını yeniden oluşturmak için ShipmentRoute visits ve transitions birleştirilmelidir. Alanların birleşiminden oluşan araç etkinliği aşağıdaki gibi görünür:

request.vehicles[0].startLocation -> transitions[0] -> visits[0] ->
transitions[1] -> visits[1] -> transitions[2] -> ... -> visits[3] ->
transitions[4] -> request.vehicles[0].endLocation

Bir ShipmentRoute, visits ile karşılaştırıldığında her zaman bir tane daha fazla transitions değerine sahiptir. araç, başlangıç konumundan ilk ziyaretine kadar seyahat etmelidir ve rotanın sonundaki son konumuna kadar yol gösterir. Aracın başlangıç veya bitiş konumu yoksa yine de bir başlangıç noktası bulunur. ilk veya son ziyaretin konumu şu olduğu için visits ile kıyaslandığında daha fazla transitions başlangıç veya varış konumu olarak kullanılır.

Bu örnekte, ilk üç teslim alma ziyaretinde geçişler vardır. Ayrıca mesafe ve süre sıfır çünkü üç teslim alma özelliği istekte aynı konumu paylaşması gerekir.

Daha fazla bilgi için ShipmentRoute referans belgelerini (REST, gRPC) inceleyin bolca fırsat sunuyor.

Basit ara nokta sırası optimizasyonu

Bu örnekte gösterildiği gibi, Rota Optimizasyonu, ziyaretleri bağımsız bir kaynak olarak veya bağlantılı duraklar olmayan bir şirket olarak varlık. Ancak durakları veya ara noktaları kargo olarak göstermek mümkündür. teslim alma veya teslimat olarak tam olarak bir VisitRequest ile. Araç hâlâ optimize edicinin kendisine bir costPerHour veya costPerKilometer atanmasını (makul rota bulmaktan ziyade en uygun rota)