עומסים ומגבלות

המאפיין loadDemands מוגדר בקטע ShipmentModel.shipments.Shipment והמאפיין loadLimits מוגדר בקטע ShipmentModel.vehicles.Vehicle.

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

מגבלות ודרישות עומס יכולות לתמוך ביעדים כמו:

  • למנוע העמסת יתר על כלי רכב.
  • מעקב אחר השינויים בעומס על כלי הרכב כשהמשלוחים נאספים ונמסרים.
  • חשוב לתת עדיפות לשימוש ברכבים כבדים להובלת משלוחים כבדים.

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

  • loadDemands מציין את כמות הקיבולת שנדרשת למשלוח מסוים.
  • loadLimits מציין את הקיבולת המקסימלית של כלי רכב מסוים.

מבנה

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

רשימת משימות ל-Essentials

רשימת המשימות הבאה מתארת ידע חיוני שיכול למנוע טעויות אפשריות שקשורות לטעינה. הרשימה הזו יכולה לעזור לכם לאמת את הבקשה ולפתור בעיות בתשובה.

מאפיינים

בקטע הזה מוסבר על מאפיינים של דרישות עומס ומגבלות, שהם:

  • סוג העומס: נכס משותף בין דרישות העומס לבין המגבלות.
  • Load ו-LoadLimit: מאפיינים ייחודיים שמופיעים בדרישות העומס ובמגבלות העומס בהתאמה.

סוג הטעינה

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

סוגי הטעינה משתמשים בתחביר של סוג המפה Protocol Buffers. כשנותנים שם לסוג עומס, צריך להשתמש במזהים שמתארים את סוג העומס ואת היחידה שלו. לדוגמה: weightKg,‏ volume_gallons,‏ palletcount או frequencyDaily.

Load וגם LoadLimit

האובייקטים Load ו-LoadLimit מכילים מאפיינים ספציפיים להגדרת דרישות הקיבולת למשלוחים ולכלי רכב. בטבלה הבאה מפורטים המאפיינים האלה:

אובייקט הורה נכס סוג הנכס תיאור הנכס
Load loadDemands amount מחרוזת (בפורמט int64) המאפיין מגדיר את דרישת הקיבולת של המשלוח בסוג שצוין.
LoadLimit loadLimits maxLoad מחרוזת (בפורמט int64) המאפיין מגדיר את קיבולת העומס המקסימלית של הרכב בסוג שצוין.

דוגמאות

בקטע הזה מפורטים שלושה סוגים של דוגמאות:

  • דוגמאות קוד שממחישות את המבנה של מאפייני הדרישות והמגבלות של העומס.
  • תרחיש לדוגמה שמציג דרך אחת להשתמש בדרישות ובמגבלות של עומס בבקשת API.
  • דוגמה לבקשה שכוללת את הערכים שהוגדרו בתרחיש לדוגמה.

דוגמאות קוד

בדוגמה הבאה מוצג המבנה של בקשת טעינה שבה אפשר להגדיר את הסוג loadDemands כמחרוזת ואת המאפיין amount כמחרוזת בפורמט int64:

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

בדוגמה הבאה מוצג המבנה הבסיסי ביותר של מגבלת טעינה, שבו אפשר להגדיר את סוג loadLimits כמחרוזת, ואת המאפיין maxLoad כמחרוזת בפורמט int64:

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

תרחיש לדוגמה

בקטע הזה מתואר תרחיש שבו יש לכם עסק של משמורת כלבים ואתם מבצעים אופטימיזציה של מסלול להובלת כמה כלבים ברכב עם מספר מוגבל של ארגזים.

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

בדוגמה הזו, ערכי הנכס בבקשה הם:

הורה נכס סוג ערך תרחיש
loadDemands סוג הטעינה מחרוזת dogUnit המאפיין מגדיר את סוג המטען של המשלוח. בדוגמה הזו נשתמש ב-dogUnit, כאשר כל dogUnit מייצג כלב אחד.
loadDemands amount number המשלוח הראשון: 1
המשלוח השני: 3
מציין את הכמות של סוג העומס שהוגדר. בדוגמה הזו, מוגדרות שתי משלוחים. במשלוח הראשון אוספים כלב אחד, ובמשלוח השני אוספים 3 כלבים.
loadLimits סוג הטעינה מחרוזת dogUnit ההגדרה מגדירה את סוג מגבלת העומס שחלה על הרכב. כדי שהמגבלה תהיה רלוונטית, היא חייבת להתאים לסוג הטעינה של המשלוח.
loadLimits maxLoad number 6 מציין את הכמות המקסימלית של סוג המטען שהרכב יכול לשאת. בדוגמה הזו, יש לכם רק רכב אחד עם קיבולת מקסימלית של 6 dogUnit, כאשר כל dogUnit מייצג כלוב אחד לכלב.

בתרשים הבא מוצגים מגבלות העומס של הרכב, דרישות העומס של כל משלוח והאופן שבו כל משלוח צורך את מגבלות העומס של הרכב:

המסלול מתחיל עם 6 מקומות ריקים שמייצגים את מגבלות העומס של הרכב. במשלוח הראשון צריך מקום לכלב אחד, ובמשלוח השני צריך מקום לשלושה כלבים. בסיום, 4 מתוך 6 המקומות ברכב יהיו תפוסים, ויישארו שני מקומות ריקים.

בדוגמה הזו, דרישות העומס של כל משלוח ומגבלות העומס של הרכב משפיעות באופן הבא:

  • לכלי האופטימיזציה לא תהיה בעיה ליצור מסלול לרכב להובלת הכלבים, כי הרכב יכול להוביל עד 6 כלבים, ואתם אוספים רק 4 כלבים.

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

  • אם מספר הכלבים היה גדול ממגבלת העומס, הכלי לאופטימיזציה היה מדלג על אחת מההעלאות או מקצה אותה לרכב מתאים.

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

דוגמה לבקשה

בדוגמה הבאה מוצגת המבנה של בקשת optimizeTours בסיסית שכוללת את הערכים של התרחיש לדוגמה:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "One bernese mountain dog",
        "loadDemands": {
          "dogUnit": {
            "amount": "1"
          }
        }
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "Three chihuahuas",
        "loadDemands": {
          "dogUnit": {
            "amount": "3"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "loadLimits": {
          "dogUnit": {
            "maxLoad": "6"
          }
        },
        "costPerKilometer": 1.0
      }
    ]
  }
}

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

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

אפשר להגדיר מגבלות טעינה כמגבלות גמישות על ידי הוספת softMaxLoad ו-costPerUnitAboveSoftMax ל-loadLimits של הרכב. כך האופטימיזציה יכולה לחרוג מהמטען המקסימלי של הרכב בתשלום, ולתעדף את השלמת המסלול על פני הקפדה על מגבלת המטען.

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

מאפיינים

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

הורה שם הנכס סוג הנכס תיאור הנכס
loadLimits softMaxLoad מחרוזת (בפורמט int64) המטען המקסימלי המועדף לרכב. אם העומס על הרכב חורג מהערך הזה, תתווסף עלות.
loadLimits costPerUnitAboveSoftMax number העלות ליחידת עומס מעל softMaxLoad. השדה הזה הוא חובה כשמשתמשים ב-softMaxLoad. מידע נוסף על עלויות זמין בקטע מודל עלויות.

דוגמת קוד

בדוגמה הבאה מוצג המבנה של מאפייני האילוץ הרך של loadLimits:

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}