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

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

כשביצוע הבקשה יסתיים, תקבלו הודעת תשובה.