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

इस गाइड में 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
  }
}

शिपमेंट पूरा कर सकता है, क्योंकि weightKg टाइप में वाहन का maxLoad, weightKg टाइप में शिपमेंट के loadDemands से ज़्यादा या उसके बराबर है. हालांकि, 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 है.

सॉफ़्ट लोड सीमा वाले कंस्ट्रेंट के कई इस्तेमाल हैं, जैसे:

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

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