मांग और सीमाएं लोड करें

इस गाइड में loadDemands और loadLimits के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि ये दोनों एक-दूसरे से कैसे जुड़े हैं अन्य.

जैसा कि पिकअप और डिलीवरी में लगने वाले समय की विंडो की सीमाएं सेक्शन में बताया गया है, OptimizeToursRequest मैसेज (REST, gRPC) में कई प्रॉपर्टी जो ऑप्टिमाइज़ की जा रही समस्या पर सीमाओं को तय करती हैं. कई OptimizeToursRequest प्रॉपर्टी, लोड कंस्ट्रेंट के बारे में बताती हैं.

वाहनों और शिपमेंट के पास फ़िज़िकल प्रॉपर्टी होती हैं. इन्हें तब ज़रूर ध्यान में रखना चाहिए और कोई रास्ता प्लान कर रहा है.

  • वाहन: loadLimits प्रॉपर्टी यह बताती है कि वाहन संभाल सकते हैं. Vehicle मैसेज का देखें (REST, gRPC) दस्तावेज़.
  • शिपमेंट: loadDemands प्रॉपर्टी से पता चलता है कि किसी दिए गए पैकेज में कितना लोड होगा शिपमेंट में खर्च होती है. Shipment मैसेज का देखें (REST, gRPC) दस्तावेज़.

ये दोनों प्रतिबंध एक साथ मिलकर, ऑप्टिमाइज़र के लिए वाहनों को ऐसे तरीके से शिपमेंट असाइन करना जो सबसे ज़्यादा मिलते-जुलते हों शिपिंग की ज़रूरतें पूरी करने में मदद मिलती है.

इस दस्तावेज़ के बाकी हिस्से में, loadLimits और loadDemands के बारे में विस्तार से चर्चा की गई है.

लोड की मांग और उनकी सीमाएं: टाइप

कॉन्टेंट लोड करने की हर ज़रूरत और उसकी सीमा की सीमा को टाइप के हिसाब से बताया जाता है.

अपने हिसाब से लोड का सेट दिया जा सकता है. इसके लिए, यहां कुछ उदाहरण दिए गए हैं:

  • वज़न का डेटा
  • आवाज़
  • लीनियर मेज़रमेंट
  • ट्रांसपोर्ट किए जा रहे आइटम या उपकरणों के नाम

इस गाइड में, weightKg का इस्तेमाल उदाहरण के तौर पर किया गया है.

Shipment.loadDemands और Vehicle.loadLimits, दोनों प्रोटोकॉल बफ़र का इस्तेमाल करते हैं map टाइप, जिसमें string कुंजियां, लोड के टाइप के बारे में बताती हैं.

Shipment.loadDemands वैल्यू, Load मैसेज (REST, gRPC) का इस्तेमाल करती हैं. Load मैसेज में एक amount प्रॉपर्टी है, जो दिखाती है कि कितनी क्षमता है दिए गए टाइप में शिपमेंट पूरा करने के लिए ज़रूरी है.

Vehicle.loadLimits वैल्यू के लिए, LoadLimit मैसेज (REST, gRPC). LoadLimit मैसेज में maxLoad की कई प्रॉपर्टी मौजूद हैं बताए गए टाइप के हिसाब से, वाहन में लोड करने की ज़्यादा से ज़्यादा क्षमता हो.

किसी शिपमेंट का loadDemands, असाइन किए गए वाहन के loadLimits का इस्तेमाल सिर्फ़ तब करता है, जब दोनों में लोड टाइप की मैच करने वाली कुंजियां हैं. उदाहरण के लिए, इसमें से loadDemands:

"loadDemands": {
  "weightKg": {
    "amount": 50
  }
}

शिपिंग के लिए, weightKg टाइप में 50 लोड यूनिट की ज़रूरत होती है पूरा हुआ. एक वाहन, जिसमें loadLimits हैं:

"loadLimits": {
  "weightKg": {
    "maxLoad": 100
  }
}

शिपिंग को पूरा किया जा सकता है, क्योंकि वाहन का maxLoad weightKg प्रकार, शिपमेंट के loadDemands से ज़्यादा या उसके बराबर है weightKg टाइप के हिसाब से. हालांकि, loadLimits वाला एक वाहन:

"loadLimits": {
  "equipmentRackStorage": {
    "maxLoad": 10
  }
}

इसमें साफ़ तौर पर, अनलिमिटेड weightKg कपैसिटी है, क्योंकि लोड सीमा weightKg है, इसलिए वाहन पर शिपमेंट की पाबंदी नहीं है सही वज़न हासिल करने की कोशिश करते हैं.

शिपमेंट और वाहनों के बीच ट्रांसफ़र लोड करें

जब शिपमेंट को वाहनों से ले जाया जाता है और उन्हें डिलीवर किया जाता है, तो loadDemand, शिपमेंट और वाहन के बीच ट्रांसफ़र होता है. यहां दी गई जानकारी देखने के लिए, OptimizeToursResponse मैसेज के (REST, gRPC)routes.transitions किसी दिए गए वाहन के लिए एंट्री. क्रम ऐसा है अनुसरण करता है:

  1. शिपमेंट के लिए ज़रूरी लोड क्षमता को loadDemand के तौर पर बताया गया है.
  2. शिपमेंट को उसके लिए असाइन किए गए वाहन और वाहन के पास ले जाया जाता है vehicleLoads, शिपमेंट के loadDemand की मात्रा से बढ़ जाता है. यह ट्रांसफ़र के जवाब में, पॉज़िटिव visits.loadDemands दिखाया गया है दिखाई देगा.
  3. वाहन, शिपमेंट को डिलीवर करता है और वाहन की vehicleLoads कम हो जाती है डिलीवर किए गए शिपमेंट के loadDemand की रकम के हिसाब से. यह ट्रांसफ़र जिसे जवाब वाले मैसेज में नेगेटिव visits.loadDemands के तौर पर दिखाया गया है.

वाहन का vehicleLoads, किसी भी समय अपने बताए गए loadLimits से ज़्यादा नहीं हो सकता अपने रास्ते पर.

लोड करने की ज़रूरतों और सीमाओं के साथ एक बेहतर उदाहरण

लोड करने की ज़रूरत के साथ उदाहरण के तौर पर दिए गए अनुरोध देखें और सीमाएं

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0,
        "loadDemands": {
          "weightKg": {
            "amount": 50
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 15.0,
        "loadDemands": {
          "weightKg": {
            "amount": 10
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "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
          }
        }
      }
    ]
  }
}
    

उदाहरण अनुरोध में लोड से जुड़े कई पैरामीटर होते हैं:

  • shipments[0] की लोड डिमांड 50 weightKg है.
  • shipments[1] की लोड डिमांड 10 weightKg है.
  • shipments[2] की लोड डिमांड 80 weightKg है.
  • vehicles[0] की लोड सीमा 100 weightKg है.

लोड डिमांड के साथ अनुरोध का जवाब देखें और सीमाएं

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T16:00:00Z",
      "vehicleEndTime": "2023-01-13T16:43:27Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T16:00:00Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2023-01-13T16:02:30Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "startTime": "2023-01-13T16:08:55Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "-50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "startTime": "2023-01-13T16:16:37Z",
          "detour": "343s",
          "loadDemands": {
            "weightKg": {
              "amount": "-10"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T16:27:07Z",
          "detour": "1627s",
          "loadDemands": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T16:36:26Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "-80"
            }
          }
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:00:00Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:02:30Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-13T16:05:00Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "60"
            }
          }
        },
        {
          "travelDuration": "212s",
          "travelDistanceMeters": 791,
          "waitDuration": "0s",
          "totalDuration": "212s",
          "startTime": "2023-01-13T16:13:05Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "travelDuration": "380s",
          "travelDistanceMeters": 1190,
          "waitDuration": "0s",
          "totalDuration": "380s",
          "startTime": "2023-01-13T16:20:47Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "409s",
          "travelDistanceMeters": 1371,
          "waitDuration": "0s",
          "totalDuration": "409s",
          "startTime": "2023-01-13T16:29:37Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-13T16:40:36Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        }
      ],
      "metrics": {
        "performedShipmentCount": 3,
        "travelDuration": "1407s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "2607s",
        "travelDistanceMeters": 4812,
        "maxLoads": {
          "weightKg": {
            "amount": "80"
          }
        }
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 48.12,
        "model.vehicles.cost_per_hour": 28.966666666666665
      },
      "routeTotalCost": 77.086666666666659
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 3,
      "travelDuration": "1407s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "2607s",
      "travelDistanceMeters": 4812,
      "maxLoads": {
        "weightKg": {
          "amount": "80"
        }
      }
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T16:00:00Z",
    "latestVehicleEndTime": "2023-01-13T16:43:27Z",
    "totalCost": 77.086666666666659,
    "costs": {
      "model.vehicles.cost_per_hour": 28.966666666666665,
      "model.vehicles.cost_per_kilometer": 48.12
    }
  }
}
    

जोड़ी गई लोड सीमाएं visits के क्रम को प्रभावित करती हैं:

  1. shipment[0] को पिक अप कर लिया गया है
  2. shipment[1] को पिक अप कर लिया गया है
  3. shipment[0] डिलीवर हो गया है
  4. shipment[1] डिलीवर हो गया है
  5. shipment[2] को पिक अप कर लिया गया है
  6. shipment[2] डिलीवर हो गया है

इस आदेश से पता चलता है कि वाहन से तीन शिपमेंट यहां नहीं लिए जा सकते: उसी समय पर, क्योंकि उनका कुल loadDemands, वाहन की loadLimits.

हर visits एंट्री में, वाहन के लोड में होने वाला वह बदलाव शामिल होता है जो Visit को पूरा कर लिया है. पॉज़िटिव लोड वैल्यू, शिपमेंट लोड होने के समय को दिखाती हैं नेगेटिव वैल्यू, शिपमेंट को अनलोड करने के बारे में बताती हैं.

हर transitions एंट्री में, Transition. उदाहरण के लिए, transitions[2] का weightKg लोड 60 है, यह shipment[0] और shipment[1] के मिले-जुले लोड को दिखाता है.

मेट्रिक ऑब्जेक्ट routes[0].metrics और metrics.aggregatedRouteMetrics में शामिल हैं maxLoads प्रॉपर्टी. weightKg टाइप की वैल्यू 80 है, जो वाहन के रास्ते का वह हिस्सा जो shipments[2] को उसकी डिलीवरी की जगह.

सॉफ़्ट लोड की सीमा की सीमाएं

जैसा कि पिकअप और डिलीवरी में लगने वाले समय की विंडो में बताया गया है कंस्ट्रेंट, लोड करने की सीमा से जुड़े कंस्ट्रेंट के हार्ड और सॉफ़्ट वैरिएंट होते हैं. कॉन्टेंट बनाने LoadLimit मैसेज की maxLoad प्रॉपर्टी मुश्किल कंस्ट्रेंट दिखाती है: वाहन में कभी भी, बताए गए समय में तय की गई maxLoad वैल्यू से ज़्यादा लोड नहीं होना चाहिए टाइप करें. प्रॉपर्टी softMaxLoad और costPerUnitAboveSoftMax धीमी रफ़्तार से जवाब देते हैं कंस्ट्रेंट, जहां हर यूनिट softMaxLoad से costPerUnitAboveSoftMax लागत.

सॉफ़्ट लोड की सीमा से जुड़ी पाबंदियों के कई फ़ायदे हैं. जैसे:

  • शिपिंग के लिए तय की गई कम से कम संख्या से ज़्यादा वाहनों की शिपिंग के बीच संतुलन बनाना जब ऐसा करना किफ़ायती होता है.
  • ड्राइवर की पसंद के हिसाब से यह बताना कि उपयोगकर्ता कितने आइटम चुन सकते हैं दिए गए रास्ते पर पिकअप और डिलीवरी पाएं
  • पहनने की क्षमता को सीमित करने के लिए, ऐसे वाहनों को लोड करना जो अपनी तय क्षमता से कम हैं रखरखाव का खर्च कम करता है

हार्ड और सॉफ़्ट लोड लिमिट को एक साथ इस्तेमाल किया जा सकता है. उदाहरण के लिए, लोड की सीमा से पता चलता है कि वाहन सुरक्षित रूप से जितने कार्गो उठा सकता है या आइटम की ज़्यादा से ज़्यादा संख्या जो वाहन में एक बार में फ़िट हो सकते हैं, जबकि सॉफ़्ट लोड की सीमा, ज़्यादा से ज़्यादा वज़न या ऐसे सामान की संख्या हो सकती है जिन पर टैक्स लागू हो ड्राइवर की क्षमता की वजह से गाड़ी में हर चीज़ फ़िट हो सकती है.