تقديم طلب يتضمّن تكاليف التحميل

يمكنك تقديم طلب يتضمّن تكاليف الحمولة ليأخذ المحسِّن في الاعتبار الحمولة التي تحملها مركباتك بين الزيارات. تعتمد التكلفة المتكبَّدة على كلّ من مقدار ShipmentRoute.VehicleLoad المحمولة والمسافة أو المدة التي تستغرقها عملية النقل (باستخدام cost_per_kilometer أو cost_per_traveled_hour على التوالي).

مثال بسيط على طلب يتضمّن تكاليف الحمولة

في ما يلي مثال جزئي على طلب يتضمّن تكلفة الحمولة. في هذا المثال، لا يمكن للمركبة الواحدة حمل أكثر من 1000 كلغ من إجمالي حمولة 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.

قبل تقديم الطلب، استبدِل المَعلمات التالية بالقيم المناسبة لبيئتك:

  • تأكَّد من ضبط بيانات الاعتماد التلقائية للتطبيق كما هو موضّح في مقالة استخدام OAuth.
  • اضبط PROJECT_NUMBER_OR_ID على رقم تعريف مشروعك على السحابة الإلكترونية أو رقمه.

    يرسل الأمر التالي طلب 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

بعد اكتمال الطلب، ستتلقّى رسالة ردّ.