שליחת בקשה עם עלויות של טעינה

כדי שהאופטימיזציה תתחשב בעומס של כלי הרכב בין הביקורים, צריך לשלוח בקשה עם עלויות העומס. העלות שנצברת תלויה גם בכמות ShipmentRoute.VehicleLoad שהועברה וגם במרחק או במשך המעבר (באמצעות cost_per_kilometer או cost_per_traveled_hour, בהתאמה).

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

לפניכם דוגמה חלקית לבקשה עם עלות טעינה. בדוגמה הזו, הרכב היחיד יכול לשאת עד 1,000 ק"ג של עומס weightKg כולל, וכאשר עומס ה-weightKg שנושא הרכב חורג מ-500 ק"ג, נצברת יחידת עלות אחת לכל קילומטר.

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightKg": {
            "maxLoad": "1000",
            "costPerKilometer": {
              "loadThreshold": "500",
              "costPerUnitAboveThreshold": 1
            }
          }
        }
      }]
    }
  }
  

חישוב עלות העומס בדוגמה הזו הוא:

cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold

לכן, אם הרכב נושא עומס weightKg של 600 על פני 10 קילומטרים, החישוב יהיה:

(600 - 500) * 10 * 1 = 1000 cost units

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

בקשה לדוגמה נוספת עם עלויות טעינה

דוגמה נוספת לעלויות עומסים שמחייבות עלות לכל זמן נסיעה, גם מעל הסף וגם מתחת לו:

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightLbs": {
            "maxLoad": "1000",
            "costPerTraveledHour": {
              "loadThreshold": "900",
              "costPerUnitAboveThreshold": 10,
              "costPerUnitBelowThreshold": 1
            },
          },
        }
      }]
    }
  }
  

חישוב עלות העומס בדוגמה הזו הוא:

cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
  + min(carried load, load threshold) * time * cost per unit below threshold

לכן, אם הרכב נושא עומס weightLbs של 950 למשך 5 שעות, החישוב יהיה:

max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000

בדוגמה הזו, הערך של load_threshold בעלות העומס של weightLbs קרוב לערך של max_load. כשהרכבים נוסעים עם עומס כבד במיוחד, האפשרות cost_per_unit_above_threshold מחילה עליהם עלות גבוהה לשעה נסיעה, ומענישה מסלולים שעשויים להגביר את הבלאי ברכב או לצרוך יותר מדי דלק. השדה cost_per_unit_below_threshold מוסיף עלות ליחידת משקל שנשא הרכב עד לסף, ומייצג עלייה בצריכת הדלק ככל שהרכב נושא יותר עומס.

שאלות נפוצות

ריכזנו כאן כמה שאלות נפוצות בנושא עלויות טעינה:

שאלה תשובה
איפה מציינים את עלויות הטעינה? מציינים את עלויות הטעינה ב-Vehicle.LoadLimit.
איך מתבצעת ההתאמה של עלויות ההטענה לשליחויות? עלות ההטענה חלה על משלוחים שסוג הביקוש להטענה שלהם תואם לסוג מגבלת העומס ברכב, כמו משקל או נפח. סוגי העומסים הם מחרוזות שרירותיות, כפי שמתואר בקטע דרישות עומס ומגבלות.
איך מבטאים את עלויות העומס? עלויות העומס מתייחסות למרחק או למשך הזמן של המעבר. משתמשים ב-cost_per_kilometer כדי לציין עלויות לפי מרחק, וב-cost_per_traveled_hour כדי לציין עלויות לפי משך זמן.
מתי חלות עלויות העומס? עומס הרכב מושווה ל-load_threshold של עלות העומס. אם מציינים את הערך cost_per_unit_above_threshold, העלות מתווספת באופן יחסי לעומס ברכב מעל הערך load_threshold באמצעות הנוסחה max(0, load - load_threshold). אם מציינים את הערך cost_per_unit_below_threshold, העלויות מתווספות באופן יחסי לעומס ברכב מתחת לערך load_threshold, לפי הנוסחה min(load, load_threshold).
מהם ערכי ברירת המחדל של הפרמטרים של עלויות העומס? הערכים של load_threshold,‏ cost_per_unit_above_threshold וגם cost_per_unit_below_threshold הם אפס כברירת מחדל.
באיזה יחידות מופיעות עלויות העומס? עלויות העומסים מבוטאות באותן יחידות ללא מאפייני מידה כמו כל שאר הפרמטרים של העלויות, כמו global_duration_cost_per_hour או Shipment.penalty_cost.
איפה מופיעים עלויות הטעינה בתגובה? עלויות הטעינה שנצברו מופיעות במאפיינים metrics ו-route_metrics של הודעות התגובה. לדוגמה, cost_per_kilometer שנצברה תופיע בתור model.vehicles.load_limits.cost_per_kilometer.

הסבר מפורט על עלויות העומס מופיע במסמכי העזרה (REST,‏ gRPC).

דוגמה: שליחת בקשה ל-OptimizeTours

אפשר לשלוח בקשות OptimizeTours גם באמצעות REST או gRPC.

לפני שליחת הבקשה, מחליפים את הפרמטרים הבאים בערכים שמתאימים לסביבה שלכם:

  • מוודאים שהגדרתם את Application Default Credentials כפי שמתואר במאמר שימוש ב-OAuth.
  • מגדירים את PROJECT_NUMBER_OR_ID למספר או למזהה של הפרויקט ב-Cloud.

    הפקודה הבאה שולחת בקשה מסוג OptimizeTours ל-Route Optimization API ומקבלת תשובה באופן סינכרוני.

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data @- << EOM
    {
      "model": {
        "shipments": [
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789456,
                  "longitude": -122.390192
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 100.0,
            "loadDemands": {
              "weightKg": {
                "amount": 50
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789116,
                  "longitude": -122.395080
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 30.0,
            "loadDemands": {
              "weightKg": {
                "amount": 10
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.795242,
                  "longitude": -122.399347
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 50.0,
            "loadDemands": {
              "weightKg": {
                "amount": 80
              }
            }
          }
        ],
        "vehicles": [
          {
            "endLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "startLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "costPerHour": 40.0,
            "costPerKilometer": 10.0,
            "loadLimits": {
              "weightKg": {
                "maxLoad": "100",
                "costPerKilometer": {
                  "loadThreshold": "15",
                  "costPerUnitAboveThreshold": 1
                }
              }
            }
          }
        ]
      }
    }
    EOM

בסיום הטיפול בבקשה תקבלו הודעה עם תגובה.