İ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 teslim alma zamanı 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 sabah 07:00'te kreşinizde başlıyor ve öğle yemeği molası için öğleden önce çocukları aldıktan sonra saat 12:00'ye kadar geri dönmesi gerekiyor.

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

  • Coit Kulesi'nin 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 şartları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. Route Optimization 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ınız, 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öpekleri bırakmak için kreşin 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ğı yere (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 bırakma 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 kargo için "Bernese dağ köpeği" ve "Chihuahua" gibi bir tanımlayıcı eklemek üzere label alanını kullanabilirsiniz. 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ı kreş olan tek minibüsünüz için Vehicle mesajı, sürücü ücretinin maliyeti ve minibüsün çalışma saatleri bilgilerini ekleyin.

    1. Vanın startWaypoint ve endWaypoint simgelerini, günün başlangıç ve bitiş noktaları olan Mission Dolores Parkı'nın yakınındaki kreş olarak ayarlayın.

    2. İşletme maliyetlerinizi en aza indirmek için işletmenizin maliyet kısıtlamalarını tanımlamanız gerekir. Maliyet parametresini costPerHour 27 olarak ayarlayın. Bu tutar, köpek kreşi minibüsünü sürmesi için sürücüye ödediğiniz ücrettir. 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ığa, endTimeWindows değerini ise sürücünün kreşe dönmesi gereken kabul edilebilir aralığa ayarlayın. Zaman aralıkları hakkında daha fazla bilgi için Zaman aralıkları başlıklı makaleyi inceleyin.

    Araç tanımlama hakkında daha fazla bilgi için Araç başlıklı makaleyi inceleyin.

  4. Genel bir zaman aralığı ayarlayın. Genel zaman aralığı, gün boyunca kreşiniz için teslim alma ve bırakma işlemlerinin yapılabileceği zaman aralığını gösterir. Bu senaryo için globalStartTime'ı 13 Şubat 2024'te saat 07:00'a, globalEndTime'ı ise saat 19:00'a 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
                }
              }
            },
            "timeWindows": [
              {
                "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
                }
              }
            },
            "timeWindows": [
              {
                "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

İstekte 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 yanıt döndürmeden önce bir istek üzerinde çalışacağı 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. Bu bölümde, teslimat ve bırakma işlemlerini yapan minibüs gibi kaynaklarınızı açıklarsınız. Optimum 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 da doğru trafik ve yönlendirme hesaplamaları için çok önemlidir. Bu köpek gündüz bakımı senaryosunda, sürücünün minibüsü o gün 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 son zamandır. Bu köpek bakım merkezi senaryosunda, minibüsün faaliyetini sonlandırması beklenen zamana (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ı 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 sahibin sağladığı 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öpeklerin kreşe bırakılması 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 gündüz bakım tesisinde başladığı için Mission Dolores Park'ın koordinatlarını kullanın.
endWaypoint[] nesne (Waypoint) Bu, aracın rotasının son hedefidir. Enlem ve boylam koordinatları veya bir 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ü gündüz bakım tesisinde 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üsü sürmeyi bitirmesi ve köpek gündüz bakım merkezine geri park etmesi için kabul edilebilir süredir.

Sonraki

Yanıtı yorumlama