פרמטרים של מודל עלות

ההודעה OptimizeToursRequest (REST, gRPC) מכילה מספר מאפיינים שקשורים לעלויות. יחד, פרמטרים אלו של העלויות מייצגים את מודל העלות של הבקשה. מודל העלות מייצג חלק גדול מיעדי האופטימיזציה הכלליים של הבקשה, למשל:

  • תעדוף של מסלולים מהירים יותר עם Vehicle על פני מסלולים קצרים יותר או להיפך.
  • ההחלטה אם העלות של אספקת Shipment שווה את הערך של ההשלמה של Shipment
  • ביצוע איסוף ומשלוחים במסגרת חלונות זמן רק אם האפשרות הזו משתלמת

הצגת בקשה לדוגמה עם עלויות

{
  "model": {
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 5.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

Vehicle מאפייני עלות

להודעה Vehicle (REST, gRPC) יש כמה מאפייני עלות:

  • Vehicle.cost_per_hour: מייצג את עלות ההפעלה של רכב לשעה, כולל זמני תחבורה ציבורית, המתנה, ביקור והפסקה.
  • Vehicle.cost_per_kilometer: מייצג את העלות לכל קילומטר שהרכב נסעה.
  • Vehicle.cost_per_traveled_hour: מייצג את עלות השימוש ברכב רק בזמן התחבורה, לא כולל זמני המתנה, ביקור והפסקה.

הפרמטרים האלה של העלויות מאפשרים לאופטימיזציה לבצע השוואה בין זמן נסיעה למרחק הנסיעה. העלויות שנצברו במסלול שעבר אופטימיזציה מופיעות בהודעת התגובה בתור metrics.costs:

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

Shipment מאפייני עלות

גם ההודעה Shipment (REST, gRPC) כוללת כמה פרמטרים של עלות:

  • Shipment.penalty_cost מייצג את העלות של דילוג על המשלוח.
  • Shipment.VisitRequest.cost מייצג את העלות של איסוף או משלוח ספציפיים, שמשמשים בעיקר כדי לגשר על העלויות בין כמה אפשרויות של איסוף או משלוח במשלוח בודד.

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

ShipmentModel מאפייני עלות

ההודעה ShipmentModel (REST, gRPC) כוללת מאפיין עלות יחיד, globalDurationCostPerHour. העלות הזו מחושבת לפי הזמן הכולל שנדרש לכל כלי הרכב כדי להשלים את הטיפול בShipmentRoute. הגדלה של globalDurationCostPerHour מתעדפת השלמה מוקדמת יותר של כל המשלוחים.

מאפייני עלות של תגובה לאופטימיזציה של מסלול

הודעת OptimizeToursResponse (REST, gRPC) כוללת מאפייני עלות שמייצגים את העלויות שנצברו בתהליך השלמת ShipmentRoutes. המאפיינים metrics.costs ו-metrics.totalCost מייצגים את מספר יחידות העלות שנצברו בכל המסלולים בתגובה. לכל רשומת routes יש מאפיינים routeCosts ו-routeTotalCosts שמייצגים עלויות של המסלול הספציפי הזה.

הצגת תשובה לבקשה לדוגמה עם העלויות

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:28:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-14T00:02:30Z",
          "detour": "150s"
        },
        {
          "startTime": "2023-01-14T00:08:55Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-14T00:21:21Z",
          "detour": "572s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:02:30Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-14T00:05:00Z"
        },
        {
          "travelDuration": "496s",
          "travelDistanceMeters": 1893,
          "waitDuration": "0s",
          "totalDuration": "496s",
          "startTime": "2023-01-14T00:13:05Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-14T00:25:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "902s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1702s",
        "travelDistanceMeters": 3353
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 33.53,
        "model.vehicles.cost_per_hour": 18.911111111111111
      },
      "routeTotalCost": 52.441111111111113
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "902s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1702s",
      "travelDistanceMeters": 3353
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:28:22Z",
    "totalCost": 57.441111111111113,
    "costs": {
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.shipments.penalty_cost": 5
    }
  }
}
    

בתשובה לדוגמה, metrics.costs ברמה העליונה הם:

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

הערך model.shipments.penalty_cost מייצג את העלות כתוצאה ממשלוחים שהמערכת דילגה עליהם. בנכס skippedShipments מפורטים המשלוחים שדילגת עליהם.

בדוגמה הזו, המערכת תדלג רק על model.shipments[1] בבקשה לדוגמה. ל-model.shipments[1] יש עלות קנס של 5 יחידות, שתואמת למפתח model.shipments.penalty_cost הכולל בתשובה לדוגמה. הערך הנמוך penaltyCost בהשוואה למחירי המשלוח של Vehicle40.0 costPerHour ו-10.0 costPerKilometer כך שיותר משתלם לדלג על המשלוח מאשר להשלים אותו.

נושא מתקדם: עלויות ומגבלות רכות

חלק ממאפייני OptimizeToursRequest של הודעות (REST, gRPC) מייצגים מגבלות רכות, שהן אילוצים שגובים תשלום כשלא ניתן לעמוד בהם.

לדוגמה, לאילוצים של רכב LoadLimit (REST, gRPC) יש מאפיינים softMaxLoad ו-costPerUnitAboveSoftMax. השילוב הזה כרוך בעלות פרופורציונלית ליחידות העומס שעולות על softMaxLoad, וכך מאפשר חריגה מהמגבלה רק אם הגיוני לעשות זאת מבחינת העלות.

באופן דומה, לאילוצים של TimeWindow (REST, gRPC) יש מאפייני soft_start_time ו-soft_end_time, עם cost_per_hour_before_soft_start_time ו-cost_per_hour_after_soft_end_time תואמים, שנצברו בהתאם לשלב מוקדם או מאוחר של האירוע המוגבל, תוך התייחסות ל-TimeWindow.

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

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