Package google.research.optimization.v1

الفهرس

التحسين

واجهة برمجة تطبيقات من نظام أساسي واحد تعرض مجموعة من أدوات حلّ التحسين لمسائل أبحاث العمليات عالية المستوى MOE: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 على "صحيح" إلى حدوث خطأ.

model_parameters

ModelSolveParametersProto

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

SolveMathOptModelResponse

ردّ على حل أحادي عن بُعد في MathOpt.

الحقول
result

SolveResultProto

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

messages[]

string

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

SolveShiftGenerationRequest

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

الحقول
solver_config

SolverConfig

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

shift_templates[]

ShiftTemplate

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

employee_demands[]

EmployeeDemand

مطلوبة. يشير هذا المقياس إلى إجمالي طلبات الموظفين التي يجب أن تشملها الورديات الناتجة عن "shift_templates". يجب أن تكون فواصل DateTime المحدّدة في كل EmployeeDemand منفصلة وقد تكون غير متجاورة.

SolveShiftGenerationResponse

الردّ على مشكلة "إنشاء نوبات العمل" إذا كانت قيمة 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

مجموعة من نوبات العمل التي تم إنشاؤها بواسطة أداة الحلّ بالإضافة إلى عدد الموظفين المعيَّنين لكل جدول زمني

SolveShiftSchedulingRequest

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

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

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

ملاحظة حول الوقت: يتم تحديد جميع الأوقات في المشكلة باستخدام الرسالة DateTime. تحتوي هذه الرسالة على حقل منطقة زمنية. يُفترض أن تكون المنطقة الزمنية حسب التوقيت العالمي المنسَّق ما لم يحدّد المستخدم خلاف ذلك. يجب تحديد رسائل التاريخ والوقت بالدقائق فقط، ويتم تجاهل كل الثواني والنانو.

الحقول
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 هي الخيار الأمثل، قد يحتوي هذا الحقل على معلومات إضافية حول أداة الحلّ.