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

ההודעה 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) כוללת מאפייני עלות שמייצגות את העלויות שנצברו בתהליך ההשלמה של ShipmentRoute. המאפיינים 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 בהשוואה ל-costPerHour ול-10.0 של Vehicle 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 בקטע מגבלות של חלון זמן איסוף ואספקה.