שולחת OptimizeToursRequest שמכיל ShipmentModel ומחזירה OptimizeToursResponse שמכיל ShipmentRoute, שהם קבוצה של מסלולים לביצוע על ידי כלי רכב, שממזערים את העלות הכוללת.
מודל ShipmentModel מורכב בעיקר מShipmentים שצריך לבצע ומVehicleים שאפשר להשתמש בהם כדי להעביר את הShipmentים. המשתמשים ב-ShipmentRoute מקצים Shipment ל-Vehicle. באופן ספציפי, הם מקצים סדרה של Visit לכל רכב, כאשר כל Visit מתאים לVisitRequest, שהוא איסוף או משלוח של Shipment.
המטרה היא להקצות ShipmentRoutes ל-Vehicles באופן שממזער את העלות הכוללת, כאשר העלות מורכבת מרכיבים רבים שמוגדרים ב-ShipmentModel.
בקשת HTTP
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours
כתובת ה-URL כתובה בתחביר של gRPC Transcoding.
פרמטרים של נתיב
| פרמטרים | |
|---|---|
parent |
חובה. מטרגטים פרויקט או מיקום כדי להתקשר. פורמט:
אם לא מציינים מיקום, המערכת בוחרת אזור באופן אוטומטי. |
גוף הבקשה
גוף הבקשה מכיל נתונים במבנה הבא:
| ייצוג ב-JSON |
|---|
{ "timeout": string, "model": { object ( |
| שדות | |
|---|---|
timeout |
אם מוגדר פסק זמן כזה, השרת מחזיר תגובה לפני שחלף פרק הזמן של פסק הזמן או לפני שהגיע מועד היעד של השרת לבקשות סינכרוניות, לפי המוקדם מביניהם. בבקשות אסינכרוניות, השרת ייצור פתרון (אם אפשר) לפני שפסק הזמן יחלוף. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
model |
מודל משלוח לפתרון. |
solvingMode |
כברירת מחדל, מצב הפתרון הוא |
searchMode |
מצב החיפוש ששימש לפתרון הבקשה. |
injectedFirstSolutionRoutes[] |
הנחיית אלגוריתם האופטימיזציה למציאת פתרון ראשון שדומה לפתרון קודם. המודל מוגבל כשיוצרים את הפתרון הראשון. כל המשלוחים שלא מתבצעים במסלול מסוים נכללים אוטומטית בפתרון הראשון, אבל יכול להיות שהם יתבצעו בפתרונות הבאים. הפתרון צריך לעמוד בכמה הנחות בסיסיות לגבי תוקף:
אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
injectedSolutionConstraint |
הגבלת אלגוריתם האופטימיזציה כדי למצוא פתרון סופי שדומה לפתרון קודם. לדוגמה, אפשר להשתמש בזה כדי להקפיא חלקים של מסלולים שכבר הושלמו או שצריך להשלים אותם אבל אסור לשנות אותם. אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
refreshDetailsRoutes[] |
אם הרשימה לא ריקה, המסלולים שצוינו ירעננו בלי לשנות את רצף הביקורים או את זמני הנסיעה: רק פרטים אחרים יעודכנו. הפעולה הזו לא פותרת את המודל. החל מ-2020/11, המערכת מאכלסת רק את הקווים המקוטעים של מסלולים לא ריקים, ונדרש שהערך של יכול להיות שהשדות אסור להשתמש בשדה הזה יחד עם לכללי המדיניות |
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.