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, basitlik açısından REST API'yi göstermek için HTTP ve JSON kullanılmıştır. Ancak üretim ortamınızda, performans avantajları nedeniyle genel olarak 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ı konumlardan iki köpek almanız gerekiyor. Her iki köpek sahibi de köpeklerini 07:30 ile 09:30 arasında alabileceğinizi söyledi.
İş için bir minibüsünüz var ve şoföre saatte 27 dolar ödüyorsunuz. Sürücü ve minibüs, güne saat 07:00'de kreşinizde başlar ve öğle yemeği molası için sabahki toplama işlemlerinden saat 12:00'ye kadar dönmüş olmaları gerekir.
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.
- South Sunset Playground Park'ta Chihuahua'yı teslim alın.
- İki köpeği de Mission Dolores Park'taki köpek kreşine bırakın.
Köpeklerin araçta geçirdiği süreyi en aza indiren ve teslim alma ile bırakma şartlarını karşılayan bir rota belirlemeniz gerekiyor.
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çme
Route Optimization API, optimizasyon sorununuzun karmaşıklığına bağlı olarak seçebileceğiniz birden fazla yöntem sunar.
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 bakım merkezi senaryosunda, optimize edicinin isteğinize yanıt vermek 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 e-posta mesajını 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:
Temel istek yapısıyla başlayın:
{ "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çin birShipmentmesajı ekleyin. Burada, köpek sahibinin tercih ettiği teslim alma konumunu ve saatlerini, köpeklerin bırakılacağı kreşin konumunu ve saatlerini tanımlarsınız.Her köpek için teslim alma ve teslim etme (bu senaryoda kreşe bırakma olarak adlandırılır) işlemlerine yönelik birer
VisitRequestoluşturun.Teslim alma bölümünde
arrivalWaypointdeğerini köpeğin teslim alınacağı konum (Bernese dağ köpeği için Coit Tower veya Chihuahua için South Sunset Playground Park) vetimeWindowsdeğerini sahibinin talep ettiği teslim alma saati (07:30-09:30) olarak ayarlayın.Teslimatlarda
arrivalWaypointsimgesini kreş olarak,timeWindowssimgesini 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 "Bernese dağ köpeği" ve "Chihuahua" gibi bir tanımlayıcı eklemek üzere
labelalanını kullanabilirsiniz. Bu, yanıttaki gönderileri belirlemenize yardımcı olabilir.
Gönderileri tanımlama hakkında daha fazla bilgi için Gönderi bölümüne bakın.
Araçları tanımlayın.
vehiclesalanına, başlangıç ve bitiş noktaları kreş olan bir minibüsünüz için birVehiclemesajı, sürücünün ücretini ve minibüsün çalışma saatlerini ekleyin.Minibüsün
startWaypointveendWaypointdeğerlerini, günün başlangıç ve bitiş konumları olan Mission Dolores Parkı'nın yakınındaki kreş olarak ayarlayın.İşletme maliyetlerinizi en aza indirmek için işletmenizin maliyet kısıtlamalarını tanımlamanız gerekir. Maliyet parametresini
costPerHour27 olarak ayarlayın. Bu tutar, köpek kreşi minibüsünü kullandığı 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.Optimize edicinin, 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şlaması için kabul edilebilir aralığa veendTimeWindowsdeğerini, 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çları tanımlama hakkında daha fazla bilgi için Araç bölümüne bakın.
Genel bir zaman aralığı ayarlayın. Genel zaman aralığı, minibüsün gün boyunca kreşiniz için alma ve bırakma işlemlerini gerçekleştirebileceği zaman aralığını temsil eder. Bu senaryo için
globalStartTimeseçeneğini 13 Şubat 2024'te 07:00,globalEndTimeseçeneğini ise 19:00 olarak ayarlayın. Bu saatler, köpek bakım merkezinin çalışma saatlerini gösterir.
3. İsteği gönder
Aşağıda, köpek bakım merkezi senaryosuna dayalı basit bir curl isteği verilmiştir. Bu istekte, engelleyici optimizeTours yöntemi kullanılır.
İsteği göndermeden önce örnek koddaki PROJECT_NUMBER_OR_ID yerine Google Cloud proje kimliğinizi yazın.
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 temelini oluşturur. Bu, teslim almanız ve bırakmanız gereken tüm köpekler (shipments) ve filonuzdaki minibüs (vehicles) dahil olmak üzere tüm sorununuzu tanımladığınız tek bir nesnedir. Bunu, 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 bir 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, teslim alma ve bırakma işlemlerini gerçekleştiren kamyonet gibi kaynaklarınızı tanımlarsı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 açısından daraltır. Bu, doğru trafik ve rota hesaplamaları için çok önemlidir. Bu köpek bakım merkezi senaryosunda, sürücünün minibüsü gün içinde kullanabileceği en erken saati (13 Şubat 2024 için 07:00) ayarlayın. | |
globalEndTime |
Zaman damgası | Bu, modelinizdeki 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 yöntemi seçer. Bu köpek kreşi senaryosu için her bir köpeğin sahibinin belirttiği teslim alma konumlarını ve zaman aralıklarını listeleyin. |
deliveries[] |
nesne dizisi (VisitRequest) |
Bu, gönderi için olası tüm bırakma seçeneklerinin listesidir. Optimizasyon aracı, sorununuzu çözmek için en uygun olanı seçer. Bu köpek kreşi senaryosunda, köpek kreşi 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 gönderinin tanımlayıcısıdır. Yanıtın daha kolay okunabilmesi için isteğinizde etiketler belirtebilirsiniz. Bu köpek bakım merkezi senaryosunda, API yanıtını aldığınızda çözümü girişinizle eşleştirmek için "Chihuahua", "Bernese dağ köpeği" veya köpeğin adı gibi açıklayıcı bir dize 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 bakım merkezi senaryosunda, pickups için bu değeri sahibin sağladığı konuma, deliveries için ise 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 bir köpeğin alınacağı zaman aralığını ve köpeklerin kreşe bırakılabileceği kabul edilebilir zaman aralığını tanımlamak için bu kısıtlamayı kullanın. | |
Vehicle |
startWaypoint[] |
nesne (Waypoint) |
Bu, aracın rotasının başlangıç konumudur. Enlem ve boylam koordinatları veya yer kimliği ile tanımlanır. Bu parametre, optimize ediciye aracın rotaya nereden başlaması gerektiğini bildirir. Bu ara noktayı tanımlamazsanız optimize edici, 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 varış noktasıdır ve enlem ile boylam koordinatları veya bir yer kimliğiyle tanımlanır. Bu parametre, optimize ediciye 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 kreşi senaryosunda, sürücünün günü kreş tesisinde bitirmesi gerektiğinden Mission Dolores Park'ın koordinatlarını kullanın. | |
costPerHour |
sayı | Bu, aracın hareket halinde veya durmuş olmasına bakılmaksızın kullanıldığı her saat için oluşan maliyettir. Bu köpek bakım merkezi senaryosunda, sürücünün saatlik ücretini modellemek için bu formülü 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üre, sürücünün minibüsü sürmeyi bitirip köpek gündüz bakım merkezine geri dönerek park etmesi için kabul edilebilir süredir. |