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

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

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

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

    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

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