OptimizeToursResponse

תגובה לאחר פתרון בעיה באופטימיזציה של סיור, שמכילה את המסלולים שבהם כל רכב נוסע, את המשלוחים שנדחו ואת העלות הכוללת של הפתרון.

ייצוג JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "requestLabel": string,
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "validationErrors": [
    {
      object (OptimizeToursValidationError)
    }
  ],
  "metrics": {
    object (Metrics)
  }
}
שדות
routes[]

object (ShipmentRoute)

המסלולים שמחושבים לכל רכב. המסלול ה-i תואם לרכב ה-i במודל.

requestLabel

string

עותק של OptimizeToursRequest.label, אם צוינה תווית בבקשה.

skippedShipments[]

object (SkippedShipment)

רשימת כל המשלוחים שדילגת עליה.

validationErrors[]

object (OptimizeToursValidationError)

רשימה של כל שגיאות האימות שזיהינו באופן עצמאי. אפשר לעיין בהסבר לגבי 'שגיאות מרובות' לגבי ההודעה OptimizeToursValidationError. במקום שגיאות, הרשימה הזו תכלול אזהרות במקרה ש-solvingMode הוא DEFAULT_SOLVE.

metrics

object (Metrics)

מדדי משך זמן, מרחק ושימוש של הפתרון הזה.

OptimizeToursValidationError

מיועד לתיאור שגיאה או אזהרה שהתרחשה במהלך האימות של OptimizeToursRequest.

ייצוג JSON
{
  "code": integer,
  "displayName": string,
  "fields": [
    {
      object (FieldReference)
    }
  ],
  "errorMessage": string,
  "offendingValues": string
}
שדות
code

integer

שגיאת אימות מוגדרת על ידי הצמד (code, displayName) שתמיד קיים.

השדות שמופיעים אחרי הקטע הזה מספקים הקשר נוסף לגבי השגיאה.

מספר שגיאות: כשיש כמה שגיאות, תהליך האימות מנסה לייצר פלט של כמה מהן. בדומה למהדר, זהו תהליך מושלם. חלק משגיאות האימות יהיו 'קריטיות', כלומר הן יעצרו את כל תהליך האימות. זה המצב, בין היתר, בשגיאות מסוג displayName="UNSPECIFIED". שגיאות מסוימות עלולות לגרום לתהליך האימות לדלג על שגיאות אחרות.

יציבות: code ו-displayName צריכים להיות יציבים מאוד. עם זאת, עם הזמן עשויים להופיע קודים חדשים ושמות מוצגים חדשים. כתוצאה מכך, בקשה מסוימת (לא תקינה) עשויה להניב צמד אחר (code, displayName) כי השגיאה החדשה הסתירה את הגרסה הישנה. לדוגמה, ראו 'שגיאות מרובות'.

displayName

string

השם המוצג של השגיאה.

fields[]

object (FieldReference)

הקשר של שגיאה עשוי לכלול 0, 1 (ברוב המקרים) או יותר שדות. לדוגמה, אפשר להפנות לכלי הרכב מס' 4 ולאיסוף הראשון של משלוח מס' 2 באופן הבא:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 subField {name: "pickups" index: 0} }

עם זאת, חשוב לשים לב שהעוצמה של fields לא אמורה להשתנות לגבי קוד שגיאה נתון.

errorMessage

string

מחרוזת לתיאור השגיאה, שאנשים יכולים לקרוא. יש מיפוי של 1:1 בין code לבין errorMessage (כשהקוד != "UNSPECIFIED").

יציבות: לא יציבה: הודעת השגיאה שמשויכת ל-code נתון עשויה להשתנות (אנחנו מקווים להבהיר זאת) עם הזמן. במקום זאת, יש להשתמש ב-displayName וב-code.

offendingValues

string

עשוי להכיל את הערכים של השדות. האפשרות הזו לא תמיד זמינה. אין להסתמך עליו בשום אופן, וצריך להשתמש בו רק לניפוי באגים ידני של מודלים.

FieldReference

הקשר של שגיאת האימות. הערך FieldReference תמיד מתייחס לשדה נתון בקובץ הזה, ופועל לפי אותו מבנה היררכי. לדוגמה, אפשר לציין את רכיב מס' 2 של startTimeWindows ברכב מס' 5 באמצעות:

name: "vehicles" index: 5 subField { name: "endTimeWindows" index: 2 }

עם זאת, אנחנו משמיטים ישויות ברמה עליונה כמו OptimizeToursRequest או ShipmentModel כדי למנוע צפיפות של ההודעה.

ייצוג JSON
{
  "name": string,
  "subField": {
    object (FieldReference)
  },

  // Union field index_or_key can be only one of the following:
  "index": integer,
  "key": string
  // End of list of possible types for union field index_or_key.
}
שדות
name

string

שם השדה, למשל "vehicles".

subField

object (FieldReference)

שדה משנה בתצוגת עץ רפלקטיבית, אם יש צורך.

שדה איחוד index_or_key.

index_or_key יכול להיות רק אחת מהאפשרויות הבאות:

index

integer

האינדקס של השדה אם הוא חוזר.

key

string

מפתח אם השדה הוא מפה.

מדדים

מדדים כוללים, נצברים מכל המסלולים.

ייצוג ב-JSON
{
  "aggregatedRouteMetrics": {
    object (AggregatedMetrics)
  },
  "skippedMandatoryShipmentCount": integer,
  "usedVehicleCount": integer,
  "earliestVehicleStartTime": string,
  "latestVehicleEndTime": string,
  "costs": {
    string: number,
    ...
  },
  "totalCost": number
}
שדות
aggregatedRouteMetrics

object (AggregatedMetrics)

נתונים מצטברים לאורך המסלולים. כל מדד הוא הסכום (או המקסימלי, לטעינות) של כל ShipmentRoute.metrics השדות בעלי אותו השם.

skippedMandatoryShipmentCount

integer

מספר משלוחי החובה שהמערכת דילגה עליהם.

usedVehicleCount

integer

מספר כלי הרכב שבשימוש. הערה: אם מסלול הרכב ריק והערך של Vehicle.used_if_route_is_empty הוא True, הרכב נחשב כמשומש.

earliestVehicleStartTime

string (Timestamp format)

שעת ההתחלה המוקדמת ביותר של רכב משומש, המחושב כמינימום על כל כלי הרכב משומשים (ShipmentRoute.vehicle_start_time).

חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "2014-10-02T15:01:23Z" ו-"2014-10-02T15:01:23.045123456Z".

latestVehicleEndTime

string (Timestamp format)

שעת הסיום האחרונה של רכב משומש, מחושבת בתור ShipmentRoute.vehicle_end_time המקסימום מכל כלי הרכב המשומשים.

חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: "2014-10-02T15:01:23Z" ו-"2014-10-02T15:01:23.045123456Z".

costs

map (key: string, value: number)

עלות הפתרון, לפי פירוט של שדות הבקשה שקשורים לעלויות. המפתחות הם נתיבים של פרוטו, ביחס לקלט OptimizeToursRequest, למשל 'model.shipments.pickups.cost', והערכים הם העלות הכוללת שנוצרה על ידי שדה העלות התואם, שנצברה לאורך כל הפתרון. במילים אחרות, costs["model.shipments.pickups.cost"] הוא הסכום של כל עלויות האיסוף בפתרון. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות ל-TransitionAttributes שמדווחות רק באופן מצטבר החל מינואר 2022.

totalCost

number

העלות הכוללת של הפתרון. הסכום של כל הערכים במפת העלויות.