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

אפשר לשלוח בקשה עם עלויות טעינה כדי שהכלי לאופטימיזציה יביא בחשבון את המטען שהרכבים נושאים בין הביקורים. העלות תלויה בכמות הנתונים 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

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