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
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:
timeoutparametresini 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:
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.
Gönderimleri tanımlayın.
shipmentsalanına, sabah alınması ve bırakılması gereken her köpek içinShipmentmesajı 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.Her köpek için teslim alma ve teslim etme işlemleri için birer
VisitRequestoluş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) vetimeWindowsöğ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.
Her gönderi için tanımlayıcı eklemek üzere
labelalanı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.
Araçları tanımlayın.
vehiclesalanı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çerenVehiclemesajını ekleyin.Minibüsün
startWaypointveendWaypointdeğerlerini, günün başlangıç ve bitiş konumlarına (Mission Dolores Park'ın yakınındaki çocuk bakım merkezi) ayarlayın.İş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.Optimizasyon aracının, minibüsün çalışma saatleri içinde bir rota oluşturmasını sağlamak için
startTimeWindowsdeğerini sürücünün minibüsü kullanmaya başlayabileceği kabul edilebilir aralık,endTimeWindowsdeğ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.
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
globalStartTimedeğerini 13 Şubat 2024'te 07:00,globalEndTimedeğ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. |