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

قدِّم طلبًا يتضمّن تكاليف الحمولة ليتمكّن المحسِّن من أخذ ملف حمولة المركبات بين الزيارات في الاعتبار. تعتمد التكلفة المتكبّدة على كلّ من كمية 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 على رقم مشروع Cloud أو رقم تعريفه.

    يُرسِل الأمر التالي طلبًا من النوع 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

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