Package google.research.optimization.v1

الفهرس

التحسين

واجهة برمجة تطبيقات من منصة One Platform تعرض مجموعة من أدوات الحلّ للتحسينات بشأن مشاكل أبحاث العمليات عالية المستوى وزارة التعليم:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

حلّ مشكلة تصميم وجدولة شبكة شحن السفن (LSNDSP) من سمة DesignShippingNetworkRequest المحدّدة.

يمثل LSNDSP مشكلة تحسين معقدة تهدف إلى العثور على التصميم والجدولة الأمثل لشبكة شحن الخطوط الجوية. والهدف من ذلك هو خفض التكلفة الإجمالية لتشغيل الشبكة، مع تلبية أكبر قدر ممكن من الطلب على البضائع بين الموانئ.

يمكن تقسيم LSNDSP إلى مشكلتين فرعيتين رئيسيتين: تصميم الشبكة والجدولة. تحدد المشكلة الفرعية لتصميم الشبكة مجموعة المنافذ التي ستخدمها الشبكة، وعدد السفن التي سيتم نشرها في كل مسار، والمسارات التي ستسلكها السفن. تحدد مشكلة الجدولة الفرعية جداول الإبحار للسفن، مع الأخذ في الاعتبار الوقت الذي يستغرقه الإبحار بين الموانئ، والوقت الذي يستغرقه تحميل البضائع وتفريغها، والطلب على نقل البضائع بين الموانئ.

بتعبير بسيط، فإن LSNDSP هي مشكلة تحديد الموانئ التي سيتم إرسال الخدمات إليها، وعدد السفن التي سيتم استخدامها، وكيفية جدولة السفن بحيث تقل تكلفة تشغيل الشبكة مع تقليل تكلفة تشغيل الشبكة مع زيادة الإيرادات لتلبية طلب البضائع. يتمثل أحد المكونات الفرعية الصعبة لـ LSNDSP في توجيه البضائع، والذي يحدد الطلبات التي يجب تلبيتها والمسارات التي يجب تعيينها للبضائع من أجل زيادة الإيرادات إلى أقصى حد.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

حل نموذج الإدخال وعرض النتيجة دفعة واحدة. استخدِم هذه الطريقة عندما لا تحتاج إلى استدعاءات أو تزايد، ولا تحتاج إلى تتبُّع مستوى تقدّم الحل.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

حلّ مشكلة إنشاء التحولات من SolveShiftGenerationRequest المحدد عن طريق إنشاء ورديات من نماذج نوبات عمل معينة من أجل تغطية طلب الموظفين.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

لحلّ مشكلة ثابتة في جدولة نوبات العمل من "SolveShiftSchedulingRequest" من خلال إسناد نوبات العمل للموظفين إلى نوبات العمل بهدف زيادة الإعدادات المفضّلة للجدولة لدى الموظفين إلى أقصى حدّ وتقليل انتهاكات قيود الجدولة.

DesignShippingNetworkRequest

ويحمل الطلب نسخة من LSNDSP ويجب أن يحتوي على مجموعة من المنافذ ومجموعة من العناصر المركّبة ومجموعة من فئات السفن ومجموعة من طلبات السلع التي يجب تلبيتها.

الحقول
request_id

string

مشكلة أو معرّف الطلب.

solver_parameters

SolverParameters

مَعلمات أداة الحلّ

ports[]

Port

قائمة بالمنافذ المحتملة التي سيتم طلبها في خدمات السفن. يجب أن يحتوي الطلب فقط على أرقام تعريف المنافذ المدرَجة في هذه القائمة.

leg_candidates[]

LegCandidate

قائمة بالمرشحين المحتملين للإضافة إلى خدمات السفن. يجب أن يحتوي الطلب فقط على معرّفات المرشّح الأولية المدرجة في هذه القائمة.

vessel_classes[]

VesselClass

قائمة بفئات السفن التي تؤدي خدمات السفن لاحظ أن جميع السفن من نفس الفئة قابلة للتبديل تمامًا. يجب أن يحتوي الطلب فقط على معرّفات فئات السفن الواردة في هذه القائمة.

commodity_demands[]

CommodityDemand

قائمة السلع المحتملة (أي الحاويات) التي يجب أن تستوفيها خدمات السفن

vessel_services[]

VesselService

يمكن توفير شبكة من خدمات السفن الصالحة (عادةً الحالة الحالية للشبكة) لاستخدامها كنقطة بداية للتحسين.

DesignShippingNetworkResponse

يحتوي الرد على الحل في مثيل LSNDSP الذي تم تمريره في الطلب. وتحتوي على شبكة صالحة من خدمات السفن ومسارات الطلب على السلع. لا يمكن أن يتجاوز إجمالي الطلب على السلع في كل مرحلة سعة السفينة التي تخدم هذه المرحلة. تجدر الإشارة إلى أنّ عدم وجود خدمات سفن بدون تلبية الطلبات هو دائمًا الحل المجدي لتصميم شبكة شحن السفن وجدولتها.

الحقول
request_id

string

رقم تعريف الطلب المرتبط به هذه الاستجابة.

vessel_services[]

VesselService

شبكة من خدمات السفن. في كل فئة سفن، لا يمكن أن يتجاوز إجمالي عدد السفن المستخدمة العدد المتاح لهذه الفئة.

commodity_demand_paths[]

CommodityDemandPath

قائمة بجميع مسارات الطلب على السلع التي يتم شحن الطلب الإيجابي على السلع من خلالها. تجدر الإشارة إلى أنّه قد لا يتم تضمين بعض أرقام تعريف الطلبات على السلع إذا لم يتم شحن أيّ طلب. بدلاً من ذلك، يمكن تلبية الطلب على السلع جزئيًا. لا يمكن أن يتجاوز إجمالي الكمية التي تمّت تلبيتها إجمالي الطلب لكلّ سلعة. أخيرًا، تعتمد commodity_demand_paths على vessel_services (راجِع تعريف CommodityDemandPath).

SolveMathOptModelRequest

طلب حل أحادي عن بُعد في MathOpt.

الحقول
solver_type

SolverTypeProto

اختياريّ. استخدِم أداة الحلّ لحلّ المسألة رقميًا. لاحظ أنه إذا كانت أداة الحلّ لا توفّر ميزة معيّنة في النموذج، لن يكون إجراء التحسين ناجحًا.

model

ModelProto

مطلوبة. تمثيل رياضي لمسألة التحسين المطلوب حلها.

parameters

SolveParametersProto

اختياريّ. مَعلمات للتحكّم في حلّ فردي ويتم التعامل مع معلمة enable_output على وجه التحديد. بالنسبة إلى أدوات حل المشاكل التي تتيح استدعاء الرسائل، سيؤدي ضبطها على "صحيح" إلى تسجيل الخادم لمعاودة الاتصال عبر الرسالة. سيتم عرض الرسائل الناتجة في SolveMathOptModelResponse.messages. بالنسبة إلى أدوات الحلّ الأخرى، سيؤدي ضبط enable_output إلى true إلى حدوث خطأ.

model_parameters

ModelSolveParametersProto

اختياريّ. معلَمات للتحكّم في حلّ فردي خاص بنموذج الإدخال (يمكنك الاطّلاع على SolveparametersProto للاطّلاع على المعلَمات المستقلة في النموذج)

SolveMathOptModelResponse

استجابة لحل أحادي عن بُعد في MathOpt.

الحقول
result

SolveResultProto

وصف ناتج حل النموذج في الطلب.

messages[]

string

في حال استخدام SolveparamsProto.enable_output، سيحتوي ذلك على رسائل السجل لأدوات الحل التي تدعم استدعاءات الرسائل.

SolveShiftGenerationRequest

طلب حلّ مشكلة إنشاء Shift يتم توضيح قواعد إنشاء ورديات في كل نموذج ShiftTemplate. يمكن إنشاء متغيّرات متعددة في الردّ من نموذج ShiftTemplate واحد. يجب أن تلتزم الورديات التي تم إنشاؤها واختيارها من خلال أداة الحلّ بالقواعد الموضّحة في نموذج ShiftTemplate وتغطية طلب الموظفين المحدَّد.

الحقول
solver_config

SolverConfig

اختياريّ. مَعلمات أداة الحلّ

shift_templates[]

ShiftTemplate

مطلوبة. مجموعة من نماذج نوبات العمل التي تحدِّد قواعد إنشاء ورديات

employee_demands[]

EmployeeDemand

مطلوبة. إجمالي طلبات الموظفين التي يجب أن تغطيها الورديات الناتجة عن "shift_templates"

SolveShiftGenerationResponse

الاستجابة لمشكلة إنشاء Shift. إذا كانت قيمة solution_status التي تم عرضها هي SOLVED، سيتم في employee_schedules عرض مجموعة من المتغيرات الصالحة التي أنشأتها أداة الحلّ. للحصول على جدول ورديات صالح، تحتوي السمات التالية على:

  1. تلتزم كل نوبة عمل يتم إنشاؤها في employee_schedules بالقواعد المحدّدة في ShiftTemplate المقابل.
  2. يتقيّد كل حدث يتم اختياره في كل نوبة عمل بالقواعد المحدّدة في ShiftTemplate.Event المقابل.
  3. لا يتجاوز إجمالي عدد الموظفين المعيّنين لمجموعة نوبات العمل التي تم إنشاؤها من نموذج ShiftTemplate نفسه maximum_employee_count من هذا النموذج.
  4. تغطّي مجموعة الموظفين المعيّنين الطلب في كل فترة محدّدة.

الحقول
solution_status

ShiftGenerationSolutionStatus

حالة الحل الذي تم إرجاعه. إذا لم يكن solution_status بالقيمة SOLVED، ستكون القيمة employee_schedules فارغة.

employee_schedules[]

EmployeeSchedule

مجموعة من الورديات التي أنشأتها أداة الحلّ مع عدد الموظفين المخصصين لكل جدول زمني.

demand_coverage_violations[]

DemandCoverageViolation

مخالفات تغطية الطلب استنادًا إلى employee_counts المحدّدة في employee_schedules المحدّد. ويتم تجميع employee_demands المقدَّم في الطلب، وفي حال تداخل فاصلَين زمنيَّين من نوع employee_demand، يتم جمع الطلب على الجزء المتداخل من الفاصل.

SolveShiftSchedulingRequest

طلب واجهة برمجة التطبيقات لجدولة القوى العاملة ويحدِّد الطلب على الأقل مجموعة من الموظفين ومجموعة نوبات العمل ومجموعة الأدوار المحتملة التي يمكن للموظف أداؤها ومجموعة من متطلبات التغطية. تحدد متطلبات التغطية، على مدى فترة زمنية، عدد الموظفين اللازمين لأداء كل دور. ويتم أيضًا تعيين الموظفين المكلفين بموردية عمل إلى دور واحد (واحد فقط) لهذا الوردية، ولا يمكن تعيين الموظفين إلى مناوبتين متداخلتين. يمكنك الاطّلاع على SolveShiftSchedulingResponse أدناه للحصول على مزيد من التفاصيل حول العوامل التي تجعل مهمة الوردية صالحة.

يمكن تحديد قيود جدولة إضافية لكل موظف لتقييد المشكلة بشكل أكبر. يتم منح جميع قيود الجدولة ومتطلبات التغطية مستوى أولوية (إلزامي، مرتفع، متوسط، منخفض). يجب أن تستوفي أداة الحلّ جميع القيود ذات مستوى الأولوية PRIORITY_MANDATORY. يمكن لأداة الحلّ انتهاك القيود ذات الأولوية الأخرى، ولكن يتم تقليل هذه الانتهاكات بترتيب الأولوية. اطّلِع على التعداد Priority للحصول على مزيد من التفاصيل حول كيفية التعامل مع مستويات الأولوية لكل قيد.

وستحاول أداة الحلّ زيادة قيم ShiftPreference.preference لكل موظف إلى أقصى حد بما يتجاوز القيود المحدّدة. لن تنتهك أداة الحلّ أي قيد لتلبية المزيد من التفضيلات، ولكنها ستنتهك القيد فقط إذا كان تعيين الجدولة غير ممكن في ظل القيود المحددة.

ملاحظة عن الوقت: يتم تحديد جميع الأوقات في المشكلة باستخدام رسالة التاريخ والوقت. تتضمّن هذه الرسالة حقل "المنطقة الزمنية". يُفترض أن تكون المنطقة الزمنية بالتوقيت العالمي المنسّق (UTC) ما لم يحدّد المستخدم غير ذلك. يجب تحديد رسائل التاريخ والوقت إلى دقائق فقط، ويتم تجاهل كل الثواني ووحدات nanos.

الحقول
request_id

string

مشكلة أو معرّف الطلب.

solve_parameters

SolveParameters

معلَمات للتحكم في حل فردي للمشكلة.

employees[]

Employee

ستتم جدولة جميع الموظفين المتاحين.

shifts[]

Shift

جميع الورديات لتشكيل الجدول الزمني.

coverage_requirements[]

CoverageRequirement

متطلبات التغطية لأفق التخطيط بالكامل يحدد ذلك عدد الموظفين الذين يجب عليهم أداء كل دور، أو يمتلكون مهارة، إما خلال فترة زمنية أو قائمة بمعرفات الورديات. يجب تحديد جميع متطلبات التغطية باستخدام فترات زمنية أو قائمة بأرقام تعريف الورديات (وليس كلاهما). لا يمكن أن تتداخل الفترات الزمنية (إذا توفّرت) لمتطلبات التغطية لكل موقع جغرافي معيّن. مستوى الأولوية التلقائي لكل من هذه القيود هو PRIORITY_MANDATORY لمتطلبات الدور وPRIORITY_LOW لمتطلبات المهارة. يُرجى الاطّلاع على تعداد Priority للحصول على مزيد من التفاصيل.

role_ids[]

string

قائمة بجميع الأدوار المحتملة لدى القوى العاملة. يجب أن يكون لكل موظف دور واحد على الأقل يمكن إسناده إليه في وردية. يشير الدور إلى مهمة وظيفية محددة أثناء المناوبة (أي ممرض مسجل، طاهٍ تنفيذي، نادل، إلخ). عندما يتم تعيين موظف إلى وردية، يتم أيضًا تعيينه إلى دور واحد محدد.

skill_ids[]

string

قائمة بجميع المهارات الممكنة عبر القوى العاملة. تشير المهارة إلى أي مؤهلات إضافية قد يمتلكها الموظف والتي لا تتعلق بوظيفة محددة قابلة للتعيين (مثل الشهادات واللغات التي يتحدثها وما إلى ذلك). يمكن أن تكون هذه القائمة فارغة. عندما يتم تعيين موظف لنوبة، يجب عليه تلبية جميع المهارات اللازمة لهذا الوردية.

location_ids[]

string

قائمة بجميع المواقع الجغرافية المحتملة لمجموعة الورديات في الجدول الزمني. يمكن أن تكون هذه القائمة فارغة. يمكن أن يكون تحديد مواقع مختلفة مفيدًا عندما يرغب مدير تمريض على سبيل المثال في جدولة العديد من الممرضات عبر وحدات مختلفة في المستشفى أو، على سبيل المثال، يريد مدير الفندق جدولة الموظفين عبر فنادق متعددة.

budget_requirements[]

BudgetRequirement

مواصفات الميزانية لمشكلة الجدولة. مستوى الأولوية التلقائي لكل من هذه المتطلبات هو PRIORITY_LOW. يُرجى الاطّلاع على تعداد Priority للحصول على مزيد من التفاصيل.

assignments_hint[]

ShiftAssignment

قم بتبديل المهام لاستخدامها كحل مؤقت (أي تلميح حل) لمشكلة الجدولة. يتم تجاهل تعديلات المهمة إذا كانت المهمة تتعارض مع متغيّر غير قابل للتعيين أو طلب جدولة.

SolveShiftSchedulingResponse

الاستجابة لواجهة برمجة التطبيقات لجدولة القوى العاملة. بالنسبة إلى كل ردّ، ستكون قيمة shift_assignments فارغة إذا كانت قيمة solution_status التي تم عرضها هي NOT_SOLVED_DEADLINE_EXCEEDED أو INFEASIBLE. إذا كانت قيمة السمة solution_status التي تم عرضها هي OPTIMAL أو FEASIBLE، سيتم عرض مهمة shift صالحة في shift_assignments. في ما يتعلّق بمهمة shift صالحة، تحتوي السمات التالية على:

  1. يتم تضمين كل معرّف موظف في مجموعة الموظفين المقدمة في الطلب.
  2. يتم تضمين كل رقم تعريف دور تم تعيينه للموظف في مجموعة من معرّفات الأدوار للموظف المعنيّ.
  3. يتم تضمين كل رقم تعريف نوبة عمل في مجموعة الورديات المحدّدة في الطلب.
  4. رقم تعريف الوردية ليس واحدًا من أرقام تعريف الورديات التي لا يمكن تعيينها للموظف المحدد.
  5. ولن يتم تعيين أي موظف إلى نوبتين متداخلتين مطلقًا.
  6. بالنسبة إلى الجدول الزمني المحدَّد، لم يتم انتهاك أي من القيود أو الطلبات ذات مستوى الأولوية PRIORITY_MANDATORY.

الحقول
request_id

string

رقم تعريف الطلب المرتبط به هذه الاستجابة.

solution_status

SolutionStatus

حالة الحل الذي تم إرجاعه. إذا لم يكن الحل سهل أو مثالي، فقد تكون الحقول الأخرى في هذا النموذج فارغة. إذا كانت الحالة NOT_SOLVED_DEADLINE_EXCEEDED، يعني ذلك أنّه تم الوصول إلى الحدّ الزمني المسموح به بدون العثور على حل مناسب أو تحديد ما إذا كان هناك حل ملائم أم لا. قد تكون الطلبات غير قابلة للتنفيذ إذا لم تتم تلبية جميع قيود مستوى الأولوية MANDATORY.

shift_assignments[]

ShiftAssignment

قائمة بكل المهام تحدّد كل سمة ShiftAssignment موظفًا والوردية التي تم إسنادها إليه والدور المسند إليه لأداء هذا الوردي.

status_message

string

إذا لم يكن solution_status هو الأمثل، قد يحتوي هذا الحقل على معلومات إضافية حول أداة الحلّ.