İlk Rota Optimizasyonu isteğinizi gönderin

Avrupa Ekonomik Alanı (AEA) geliştiricileri

Bu belgede, gerçek hayattaki bir kullanım alanı senaryosunu kullanarak Rota Optimizasyonu API'sine ilk isteğinizi nasıl göndereceğiniz gösterilmektedir.

Örnekte, REST API'yi göstermek için HTTP ve JSON kullanılmıştır. Ancak üretim ortamınız için performans avantajları nedeniyle gRPC kullanmanız önerilir. Ancak gRPC için kurulum yapılması gerekir. Daha fazla bilgi için Rota Optimizasyonu API'si istemci kitaplıkları başlıklı makaleyi inceleyin.

Senaryo

Coit Tower, Mission Dolores Park ve South Sunset Playground Park'ın işaretlendiği San Francisco haritası

San Francisco'da 07:00-19:00 saatleri arasında köpek bakımı hizmeti veriyorsunuz. Bu sabah şehirdeki farklı yerlerden iki köpek almanız gerekiyor. Her iki köpek sahibi de size 07:30 ile 09:30 arasında teslimat aralığı verdi.

İş için bir minibüsünüz var ve sürücüye saatte 27 ABD doları ödüyorsunuz. Sürücü ve minibüs, güne saat 07:00'te kreşinizde başlıyor ve öğle yemeği molası için öğleden önce 12:00'ye kadar çocukları alıp geri dönmeleri gerekiyor.

Bugün 13 Şubat 2024 ve sürücünün aşağıdaki görevleri var:

  • Coit Tower'ın yakınındaki Bernese dağ köpeğini alın.
  • Chihuahua'yı South Sunset Playground Parkı'ndan alın.
  • İki köpeği de Mission Dolores Park'taki köpek bakım merkezine bırak.

Köpeklerin minibüste geçirdiği süreyi en aza indirirken teslim alma ve bırakma koşullarını karşılayan bir rotaya ihtiyacınız var.

Başlamadan önce

Bu örnek senaryodaki kodu çalıştırmak için öncelikle Rota Optimizasyonu API'sini ayarlama bölümündeki talimatları tamamlamanız gerekir.

1. Rota optimizasyonu yaklaşımınızı seçin

Rota Optimizasyonu API'si, optimizasyon sorununuzun karmaşıklığına bağlı olarak aralarından seçim yapabileceğiniz birden fazla yönteme sahiptir.

Bu köpek kreşi senaryosu küçük ve basit bir istek olduğundan, küçük istekler için hızlı sonuçlar veren optimizeTours gibi bir engelleme yöntemi kullanın. Rota Optimizasyonu API yöntemleri hakkında daha fazla bilgi için Eşzamanlı ve eşzamansız uç noktalar başlıklı makaleyi inceleyin.

optimizeTours yöntemine HTTP POST isteği göndermek için aşağıdaki URL'yi kullanın:

https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours

Gereksiz bekleme süresini azaltmak için zaman aşımı ve son tarih ayarlarını kısa tutmanız da gerekir. Bu köpek gündüz bakımı senaryosunda, optimize edicinin isteğinize yanıt vermesi için çok fazla zamana ihtiyacı yoktur. Bu nedenle, aşağıdaki ayarları kullanın:

  • timeout parametresini 2 saniye olarak ayarlayın.
  • Son tarih ayarlarını varsayılan değerde bırakın. Bu değer, REST istekleri için 60 saniyedir.

2. İstek mesajı gövdesini oluşturma

Engelleme optimizeTours yöntemini seçip zaman aşımı ve son tarih ayarlarını tanımladıktan sonraki adım, istek mesajının gövdesini oluşturmaktır.

Bu senaryoda istek, REST API'de JSON olarak kodlanmış bir OptimizeToursRequest mesajıdır.

İstek mesajını oluşturmak için sonraki adımları uygulayın:

  1. Temel istek yapısıyla başlayın. Bu yapı aşağıdaki gibidir:

    {
      "timeout": ...,
      "model": {
        "shipments": [...],
        "vehicles": [...],
        "globalStartTime": "...",
        "globalEndTime": "..."
      }
    }
    

    Yapı hakkında daha fazla bilgi için Temel yapı (ShipmentModel, Shipment ve Vehicle) ile ilgili temel kavramlar kılavuzuna bakın.

  2. Gönderimleri tanımlayın. shipments alanına, sabah alınması ve bırakılması gereken her köpek için Shipment mesajı ekleyin. Burada, köpek sahibinin tercih ettiği teslim alma konumunu ve saatlerini, köpeklerin bırakılacağı gündüz bakım merkezinin konumunu ve saatlerini tanımlarsınız.

    1. Her köpek için teslim alma ve teslim etme işlemleri için birer VisitRequest oluşturun. Bu senaryoda teslim etme işlemi, kreşe bırakma olarak adlandırılır.

      • Teslim alma işlemlerinde arrivalWaypoint öğesini köpeğin teslim alınacağı konuma (Bernese dağ köpeği için Coit Tower veya Chihuahua için South Sunset Playground Park) ve timeWindows öğesini sahibinin istediği teslim alma zamanına (07:30-09:30) ayarlayın.

      • Teslimatlarda, arrivalWaypoint öğesini kreş olarak, timeWindows öğesini ise gerekli teslimat zamanı (09:30-11:30) olarak ayarlayın.

      Zaman aralıkları hakkında daha fazla bilgi için Zaman aralıkları başlıklı makaleyi inceleyin.

    2. Her gönderi için tanımlayıcı eklemek üzere label alanını kullanabilirsiniz. Örneğin, "Bernese dağ köpeği" ve "Chihuahua". Bu, yanıttaki gönderileri belirlemenize yardımcı olabilir.

    Gönderileri tanımlama hakkında daha fazla bilgi için Gönderi başlıklı makaleyi inceleyin.

  3. Araçları tanımlayın. vehicles alanına, başlangıç ve bitiş noktaları olarak kreşin bulunduğu, sürücü ücretinin maliyeti ve minibüsün çalışma saatleri bilgilerini içeren Vehicle mesajını ekleyin.

    1. Minibüsün startWaypoint ve endWaypoint değerlerini, günün başlangıç ve bitiş konumlarına (Mission Dolores Park'ın yakınındaki çocuk bakım merkezi) ayarlayın.

    2. İşletme maliyetlerinizi en aza indirmek için işletmenizin maliyet kısıtlamalarını tanımlamanız gerekir. Maliyet parametresini costPerHour, köpek kreşi minibüsünü sürmesi için sürücüye ödediğiniz tutar olan 27 olarak ayarlayın. Maliyet parametreleri hakkında daha fazla bilgi için Maliyet modeli başlıklı makaleyi inceleyin.

    3. Optimizasyon aracının, minibüsün çalışma saatleri içinde bir rota oluşturmasını sağlamak için startTimeWindows değerini sürücünün minibüsü kullanmaya başlayabileceği kabul edilebilir aralık, endTimeWindows değerini ise sürücünün kreşe dönmesi gereken kabul edilebilir aralık olarak tanımlayın. Zaman aralıkları hakkında daha fazla bilgi için Zaman aralıkları başlıklı makaleyi inceleyin.

  4. Genel bir zaman aralığı ayarlayın. Genel zaman aralığı, gün boyunca kreşiniz için minibüsün yolcu alıp bırakabileceği zaman aralığını gösterir. Bu senaryo için globalStartTime değerini 13 Şubat 2024'te 07:00, globalEndTime değerini ise 19:00 olarak ayarlayın. Bu saatler, köpek bakım merkezinin çalışma saatlerini gösterir.

3. İsteği gönderin

Aşağıda, köpek kreşi senaryosuna dayalı basit bir curl isteği verilmiştir ve engelleme optimizeTours yöntemi kullanılmaktadır.

İsteği göndermeden önce örnek koddaki PROJECT_NUMBER_OR_ID kısmını Google Cloud proje kimliğinizle değiştirin.

curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data @- << EOM
{
  "timeout": 2s,
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.802395,
                  "longitude": -122.405822
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindow": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Bernese mountain dog"
      },
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.738067,
                  "longitude": -122.498593
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindow": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Chihuahua"
      }
    ],
    "vehicles": [
      {
        "startWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "endWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2024-02-13T07:00:00Z",
            "endTime": "2024-02-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2024-02-13T11:45:00Z",
            "endTime": "2024-02-13T12:00:00Z"
          }
        ]
      }
    ],
    "globalStartTime": "2024-02-13T07:00:00Z",
    "globalEndTime": "2024-02-13T19:00:00Z"
  }
}
EOM

İsteklerde kullanılan istek parametreleri

Aşağıdaki tabloda, örnek senaryonun istek gövdesinde kullanılan istek parametreleri açıklanmaktadır. İçerikleri üst öğeye veya metin aramasına göre filtreleyebilirsiniz.

Ebeveyn Parametre Mülk Türü Açıklama
OptimizeToursRequest model nesne (ShipmentModel) Bu, isteğinizin temelidir. Bu, tüm sorununuzu tanımladığınız tek bir nesnedir. Bu nesneye, almanız ve bırakmanız gereken tüm köpekler (shipments) ve filonuzdaki minibüs (vehicles) dahildir. Bu nesneyi, optimize etmeniz gereken sorunun eksiksiz planı olarak düşünebilirsiniz.
timeout Süre Bu parametre, sunucunun bir istekle ilgili çalışıp yanıt döndürmeden önce geçecek maksimum süreyi belirtir. Bekleme sürenizi kısaltmak için bu parametreyi kullanın. Bu köpek bakım merkezi senaryosu gibi küçük ve hızlı istekler için bu değeri 2 saniye olarak ayarlayın.
ShipmentModel shipments[] nesne dizisi (Shipment) Bu, her nesnenin alınması veya bırakılması gereken bir köpeği temsil ettiği bir nesne dizisidir.
vehicles[] nesne dizisi (Vehicle) Bu, her nesnenin filonuzdaki bir aracı tanımladığı bir nesne dizisidir. Burada, teslim alma ve bırakma işlemlerini yapan minibüs gibi kaynaklarınızı açıklarsınız. Optimize edilmiş bir rota elde etmek için en az bir araç tanımlamanız gerekir.
globalStartTime Zaman damgası Bu, modelinizin tamamındaki herhangi bir etkinliğin gerçekleşebileceği en erken zamandır. Bu parametre, optimizasyon sorununu zaman içinde daraltır. Bu, doğru trafik ve yönlendirme hesaplamaları için çok önemlidir. Bu köpek bakım merkezi senaryosunda, sürücünün o gün minibüsü kullanabileceği en erken saat olan 13 Şubat 2024 için 07:00'ı ayarlayın.
globalEndTime Zaman damgası Bu, modelinizin tamamındaki herhangi bir etkinliğin gerçekleşebileceği en geç zamandır. Bu köpek bakım merkezi senaryosunda, minibüsün faaliyetini sonlandırması beklenen zamanı (13 Şubat 2024 için 19:00) ayarlayın.
Shipment pickups[] nesne dizisi (VisitRequest) Bu, gönderi için olası tüm teslim alma seçeneklerinin listesidir. Optimizasyon aracı, sorununuzu çözmek için en iyi olanı seçer. Bu köpek gündüz bakımı senaryosunda, her köpek için sahiplerin sağladığı teslim alma konumlarını ve zaman aralıklarını listeleyin.
deliveries[] nesne dizisi (VisitRequest) Bu, gönderi için olası tüm teslimat seçeneklerinin listesidir. Optimizasyon aracı, sorununuzu çözmek için en iyi olanı seçer. Bu köpek gündüz bakım tesisi senaryosunda, köpek gündüz bakım tesisinin konumunu ve sürücünün her köpek için öğle yemeğine dönmesi gereken zaman aralığını listeleyin.
label dize Bu, isteğinizdeki belirli bir kargonun tanımlayıcısıdır. Yanıtın daha kolay okunabilmesi için isteğinizde etiket belirtebilirsiniz. Bu köpek gündüz bakımı senaryosunda, API yanıtını aldığınızda çözümü girişinizle eşleştirmek için "Chihuahua", "Bernese dağ köpeği" gibi açıklayıcı bir dize veya köpeğin adını kullanın.
VisitRequest arrivalWaypoint[] nesne (Waypoint) Bu, rotadaki belirli bir ziyaretin konumudur. Bunu enlem ve boylam koordinatlarını, yer kimliğini veya başlığı kullanarak tanımlayabilirsiniz. Bu köpek gündüz bakımı senaryosunda, pickups için bunu sahibi tarafından sağlanan konuma, deliveries için ise gündüz bakım merkezinin adresine ayarlayın.
timeWindows[] nesne dizisi (TimeWindow) Bu, teslim alma veya teslimat için zaman kısıtlamalarını tanımlayan bir nesne dizisidir. Bu senaryoda, her köpek için teslim alma aralığını ve köpekleri kreşe bırakmak için kabul edilebilir aralığı tanımlamak üzere bu özelliği kullanın.
Vehicle startWaypoint[] nesne (Waypoint) Bu, aracın rotasının başlangıç konumudur. Enlem ve boylam koordinatları veya bir yer kimliği ile tanımlanır. Bu parametre, optimizasyon aracına aracın rotaya nereden başlaması gerektiğini bildirir. Bu ara noktayı tanımlamazsanız optimizasyon aracı, başlangıç konumu olarak teslim alma veya teslimat noktalarından birini seçer. Bu köpek gündüz bakımı senaryosunda sürücü güne bakımevinde başladığı için Mission Dolores Park'ın koordinatlarını kullanın.
endWaypoint[] nesne (Waypoint) Bu, aracın rotasının son varış noktasıdır. Enlem ve boylam koordinatları veya yer kimliği ile tanımlanır. Bu parametre, optimizasyon aracına aracın rotayı nerede bitirmesi gerektiğini bildirir. Bu ara noktayı tanımlamazsanız optimizasyon aracı, rotanın sonu olarak teslim alma veya teslimat noktalarından birini seçer. Bu köpek gündüz bakımı senaryosunda, sürücünün günü bakımevinde bitirmesi gerektiğinden Mission Dolores Park'ın koordinatlarını kullanın.
costPerHour sayı Bu, aracın hareket halinde olup olmadığına bakılmaksızın her saatlik kullanım için yapılan harcamadır. Bu köpek gündüz bakımı senaryosunda, sürücünün saatlik ücretini modellemek için bunu kullanın.
startTimeWindows[] nesne dizisi (TimeWindow) Bu, sürücünün sabah köpekleri almak için minibüsü sürmeye başlaması gereken kabul edilebilir zaman aralığıdır.
endTimeWindows[] nesne dizisi (TimeWindow) Bu, sürücünün minibüsle sürüşü tamamlaması ve köpek gündüz bakım merkezine geri dönüp park etmesi için kabul edilebilir süredir.

Sonraki

Yanıtı yorumlama