שליחת OptimizeToursRequest שמכילה ShipmentModel והחזרת OptimizeToursResponse שמכילה ShipmentRoute, שהם קבוצה של מסלולים שכלי הרכב צריכים לבצע כדי לצמצם את העלות הכוללת.
מודל ShipmentModel מורכב בעיקר מShipment שצריך לבצע ומVehicle שאפשר להשתמש בהם כדי להעביר את הShipment. ה-ShipmentRoute מקצים Shipment ל-Vehicle. באופן ספציפי יותר, הם מקצים סדרה של Visit לכל רכב, כאשר Visit תואם ל-VisitRequest, שהוא איסוף או מסירה של Shipment.
המטרה היא להקצות ShipmentRoute ל-Vehicle באופן שיצמצם את העלות הכוללת, כשהעלות מורכבת מרכיבים רבים שמוגדרים ב-ShipmentModel.
בקשת HTTP
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours
כתובת ה-URL כתובה בתחביר של gRPC Transcoding.
פרמטרים של הנתיב
| פרמטרים | |
|---|---|
parent |
חובה. פרויקט או מיקום יעד לביצוע שיחה. פורמט:
ערכי |
גוף הבקשה
גוף הבקשה מכיל נתונים במבנה הבא:
| ייצוג ב-JSON |
|---|
{ "timeout": string, "model": { object ( |
| שדות | |
|---|---|
timeout |
אם מגדירים את הזמן הקצוב לתפוגה, השרת מחזיר תשובה לפני שפרק הזמן הקצוב לתפוגה חולף או לפני שמגיע המועד האחרון של השרת לבקשות סנכרוניות, המוקדם מביניהם. בבקשות לא סנכרוניות, השרת ייצור פתרון (אם אפשר) לפני שזמן הקצוב לתפוגה יחלוף. |
model |
מודל המשלוח שצריך לפתור. |
solvingMode |
כברירת מחדל, מצב הפתרון הוא |
searchMode |
מצב החיפוש ששימש לפתרון הבקשה. |
injectedFirstSolutionRoutes[] |
הנחיית אלגוריתם האופטימיזציה למציאת פתרון ראשון שדומה לפתרון קודם. המודל מוגבל כשהפתרון הראשון נוצר. כל המשלוחים שלא בוצעו במסלול מסוים נדלגים באופן משתמע בפתרון הראשון, אבל יכול להיות שהם יבוצעו בפתרונות הבאים. הפתרון צריך לעמוד בכמה הנחות בסיסיות לגבי תוקף:
אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
injectedSolutionConstraint |
להגביל את אלגוריתם האופטימיזציה כדי למצוא פתרון סופי שדומה לפתרון קודם. לדוגמה, אפשר להשתמש בזה כדי להקפיא חלקים ממסלולים שכבר הושלמו או שצריך להשלים אבל אסור לשנות. אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
refreshDetailsRoutes[] |
אם השדה לא ריק, המסלולים שצוינו ירועננו בלי לשנות את רצף הביקורים או זמני הנסיעה שלהם: רק פרטים אחרים יעודכנו. הפעולה הזו לא פותרת את המודל. החל מנובמבר 2020, השדה הזה מאכלס רק את הקווים הפוליגוניים של מסלולים לא ריקים, ודורש שהערך של יכול להיות שהשדות אסור להשתמש בשדה הזה יחד עם ל- |
interpretInjectedSolutionsUsingLabels |
אם הערך הוא True:
הפרשנות הזו חלה על השדות אם הערך הוא True, תוויות בקטגוריות הבאות יכולות להופיע לכל היותר פעם אחת בקטגוריה שלהן:
אם הסרה של ביקורים במסלול או של מסלולים שלמים מפתרון מוזרק עשויה להשפיע על האילוצים המשתמעים, מה שעלול להוביל לשינוי בפתרון, לשגיאות אימות או לחוסר היתכנות. הערה: מי שמבצע את הקריאה צריך לוודא שכל |
considerRoadTraffic |
כדאי להביא בחשבון את אומדן התנועה כשמחשבים את השדות |
populatePolylines |
אם הערך הוא True, קווים פוליגוניים יאוכלסו בתגובות מסוג |
populateTransitionPolylines |
אם הערך הוא True, קווים פוליגוניים וטוקנים של מסלולים יאוכלסו בתגובה |
allowLargeDeadlineDespiteInterruptionRisk |
אם המדיניות מוגדרת, לבקשה יכול להיות מועד אחרון (ראו https://grpc.io/blog/deadlines) של עד 60 דקות. אחרת, המועד האחרון המקסימלי הוא 30 דקות בלבד. חשוב לזכור שבבקשות לטווח ארוך יש סיכון גדול יותר (אבל עדיין קטן) להפרעה. |
useGeodesicDistances |
אם הערך הוא true, מרחקי הנסיעה יחושבו באמצעות מרחקים גיאודזיים במקום מרחקים במפות Google, וזמני הנסיעה יחושבו באמצעות מרחקים גיאודזיים עם מהירות שמוגדרת על ידי |
label |
תווית שאפשר להשתמש בה כדי לזהות את הבקשה הזו, שדווחה ב- |
geodesicMetersPerSecond |
כשהערך של |
maxValidationErrors |
מגבילה את מספר שגיאות האימות שמוחזרות. השגיאות האלה בדרך כלל מצורפות למטען ייעודי (payload) של שגיאת INVALID_ARGUMENT בתור פרטי שגיאת BadRequest (https://cloud.google.com/apis/design/errors#error_details)), אלא אם solvingMode=VALIDATE_ONLY: ראו את השדה |
גוף התשובה
אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל מופע של OptimizeToursResponse.
היקפי הרשאות
נדרש היקף ההרשאות הבא של OAuth:
https://www.googleapis.com/auth/cloud-platform
הרשאות IAM
נדרשת הרשאת IAM הבאה במשאב parent:
routeoptimization.locations.use
מידע נוסף מופיע במאמרי העזרה בנושא IAM.