লোড চাহিদা এবং সীমা

এই নির্দেশিকা 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] , উদাহরণস্বরূপ, 60 weightKg লোড রয়েছে, যা shipment[0] এবং shipment[1]

মেট্রিক্স অবজেক্টের routes[0].metrics এবং metrics.aggregatedRouteMetrics একটি maxLoads বৈশিষ্ট্য অন্তর্ভুক্ত করে। টাইপ weightKg এর মান হল 80, যা যানবাহনের রুটের অংশের প্রতিনিধিত্ব করে যেটি shipments[2] তার ডেলিভারি লোকেশনে পরিবহণ করে।

নরম লোড সীমা সীমাবদ্ধতা

পিকআপ এবং ডেলিভারি টাইম উইন্ডো সীমাবদ্ধতায় বর্ণিত টাইম উইন্ডোগুলির মতো, লোড সীমা সীমাবদ্ধতার কঠোর এবং নরম রূপ রয়েছে। LoadLimit বার্তার maxLoad বৈশিষ্ট্য একটি কঠিন সীমাবদ্ধতা প্রকাশ করে: যানবাহনকে কখনই নির্দিষ্ট প্রকারে maxLoad মানের বেশি লোড বহন করা উচিত নয়। বৈশিষ্ট্য softMaxLoad এবং costPerUnitAboveSoftMax একটি নরম সীমাবদ্ধতা প্রকাশ করে, প্রতিটি ইউনিট softMaxLoad অতিক্রম করে একটি costPerUnitAboveSoftMax খরচ বহন করে।

নরম লোড সীমা সীমাবদ্ধতার বিভিন্ন ব্যবহার রয়েছে, যেমন:

  • ন্যূনতম সংখ্যার চেয়ে বেশি যানবাহন জুড়ে চালানের ভারসাম্য বজায় রাখা যখন এটি করা সাশ্রয়ী হয়
  • আইটেম সংখ্যার জন্য ড্রাইভার পছন্দ প্রকাশ করে তারা আরামে একটি নির্দিষ্ট রুটে পিকআপ এবং বিতরণ করতে পারে
  • পরিধান সীমিত করতে এবং রক্ষণাবেক্ষণের খরচ কমাতে তাদের সর্বোচ্চ শারীরিক ক্ষমতার নিচে যানবাহন লোড করা

হার্ড এবং নরম লোড সীমাবদ্ধতা একসাথে ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ, একটি হার্ড লোড সীমা একটি যানবাহন নিরাপদে বহন করতে পারে এমন কার্গোর সর্বোচ্চ ওজন বা এক সময়ে একটি গাড়িতে ফিট করা আইটেমের সর্বাধিক সংখ্যা প্রকাশ করতে পারে, যখন একটি নরম লোড সীমা হতে পারে সর্বাধিক ওজন বা আইটেমের সংখ্যা গাড়ির মধ্যে সবকিছু ফিট করার জন্য ড্রাইভারের ক্ষমতার উপর ট্যাক্স করবে।