يصف هذا القسم بعض خيارات أداة حل التوجيه.
حدود البحث
تؤدي حدود البحث إلى إنهاء أداة الحلّ بعد الوصول إلى الحدّ المحدّد، مثل الحد الأقصى لطول المدة أو عدد الحلول التي يتم العثور عليها. يمكنك ضبط حد بحث من خلال معلَمات البحث الخاصة بأداة الحل. يمكنك الاطّلاع على الحدود الزمنية المسموح بها للحصول على مثال.
يصف الجدول التالي حدود البحث الأكثر شيوعًا.
الاسم | Type | القيمة التلقائية | الوصف |
---|---|---|---|
solution_limit
|
int64 | كينت 64max | يقتصر على عدد الحلول التي يتم إنشاؤها أثناء البحث |
time_limit.seconds
|
int64 | كينت 64max | الحد بالثواني إلى الوقت المستغرَق : في البحث. |
lns_time_limit.seconds
|
int64 | 100 | الحد بالثواني إلى الوقت الذي تم قضاؤه في : عملية البحث المكتملة لكل مجاور بحث محلي |
استراتيجية الحلّ الأولى
استراتيجية الحل الأولى هي الطريقة التي تستخدمها أداة الحلّ للعثور على حلّ مبدئي. يسرد الجدول التالي خيارات first_solution_strategy
.
Option | الوصف |
---|---|
AUTOMATIC
|
يتيح أداة الحلّ اكتشاف الاستراتيجية التي سيتم استخدامها وفقًا للنموذج الذي يتم حلّه. |
PATH_CHEAPEST_ARC
|
بدءًا من العقدة "بدء"، عليك توصيلها بالعُقدة التي ينتج عنها شريحة المسار الأقل تكلفة، ثم توسيع المسار من خلال تكرار العُقدة الأخيرة التي تمت إضافتها إلى المسار. |
PATH_MOST_CONSTRAINED_ARC
|
يشبه PATH_CHEAPEST_ARC ، ولكن يتم تقييم الأقواس باستخدام أداة اختيار مستندة إلى المقارنة، وبالتالي سيتم تفضيل القوس الأكثر تقييدًا أولاً. لتخصيص أداة اختيار لنموذج التوجيه، استخدِم
طريقة ArcIsMoreConstrainedThanArc() . |
EVALUATOR_STRATEGY
|
يشبه PATH_CHEAPEST_ARC ، باستثناء أنّ تكاليف القوس
يتم تقييمها باستخدام الدالة التي تم تمريرها إلى
SetFirstSolutionEvaluator() . |
SAVINGS
|
خوارزمية التوفير (Clarke & Wright) مرجع كلارك، ج. & Wright, J.W. "جدولة المركبات من مستودع رئيسي إلى عدد من نقاط التسليم" ، أبحاث العمليات، مجلد 12, 1964، الصفحة 568-581. |
SWEEP
|
خوارزمية المسح الضوئي (Wren وHoliday). الإشارة إلى "أنتوني رين" و"آلان هوليداي" لأجهزة الكمبيوتر من واحد أو أكثر من مستودعات إلى عدد من عمليات التشغيل التشغيلية ربع سنوي (1970-1977)، مجلد 23، رقم 3 (أيلول (سبتمبر) 1972)، صفحة 333-344. |
CHRISTOFIDES
|
خوارزمية "كريستوفس" (في الواقع هي صيغة من خوارزمية "كريستوفديس" باستخدام مطابقة مطابِقة بدلاً من مطابقة قصوى)، ما لا يضمن عامل 3/2 من التقدير التقريبي لمندوب مبيعات متنقّل حسب المقياس يعمل على نماذج التوجيه العامة للمركبات من خلال تمديد مسار حتى لا يمكن إدراج عُقد عليه. تتمثّل مرجع "نيكو كريستوفيس" في تحليل أسوأ حالات الحالات الإرشادية الجديدة لمشكلة رجل المبيعات المسافرين، التقرير 388، المدرسة العليا العليا في الإدارة الصناعية، CMU، 1976. |
ALL_UNPERFORMED
|
جعل جميع العُقد غير نشطة. ولا يتم العثور على حل إلا إذا كانت العُقد اختيارية (وهي أحد عناصر التقييد الذي يفرضه الفصل مع تكلفة محدودة للعقوبة). |
BEST_INSERTION
|
ويمكنك بشكل منتظم إنشاء حلّ من خلال إدخال عقدة أرخص في موضعها الأرخص. وتستند تكلفة الإدراج إلى دالة التكلفة العالمية لنموذج التوجيه. اعتبارًا من عام 2022، لن تعمل هذه الميزة إلا على النماذج التي تتضمن عُقدًا اختيارية (مع تكاليف محدودة للعقوبات). |
PARALLEL_CHEAPEST_INSERTION
|
أنشِئ حلاً مُكرَّرًا من خلال إدراج عقدة أرخص
في موضعها الأقلّ تكلفة. وتستند تكلفة الإدراج إلى
دالة التكلفة المتعلّقة بالقوس. أسرع من BEST_INSERTION . |
LOCAL_CHEAPEST_INSERTION
|
ويمكنك بشكل منتظم إنشاء حلّ من خلال إدراج كل عقدة في موضعها الأرخص. وتستند تكلفة الإدراج إلى دالة التكلفة
القوسية. ويختلف عن PARALLEL_CHEAPEST_INSERTION حسب العقدة التي تم اختيارها لإدراجها، ويتم وضع العُقد هنا في ترتيب إنشائها. أسرع من PARALLEL_CHEAPEST_INSERTION . |
GLOBAL_CHEAPEST_ARC
|
وصِّل عقدتَين بشكل مكرر ينتجان شريحة المسار الأقل تكلفة. |
LOCAL_CHEAPEST_ARC
|
اختَر العقدة الأولى التي تليها بدون ربط، وربطها بالعقدة التي تنتج أرخص مسار. |
FIRST_UNBOUND_MIN_VALUE
|
اختَر العُقدة الأولى التي تحتوي على خلفية غير مرتبطة
ووصِّلها بالعقدة المتاحة الأولى. هذا يعادل استراتيجية
CHOOSE_FIRST_UNBOUND مع ASSIGN_MIN_VALUE (cf.
constraint_solver.h). |
حالة البحث
ويمكنك عرض حالة البحث باستخدام طريقة status
لنموذج التوجيه.
إليك رمز Python لطباعة حالة البحث:
print("Solver status: ", solver.status())
يؤدي هذا إلى طباعة عدد صحيح مع المعاني التالية:
القيمة | الوصف |
---|---|
0 |
ROUTING_NOT_SOLVED : لم يتم حل المشكلة بعد. |
1 |
ROUTING_SUCCESS : تم حل المشكلة بنجاح. |
2
|
ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED : تم حل المشكلة بنجاح بعد الاتصال بـ RoutingModel.Solve() ، باستثناء أنه لم يتم الوصول إلى تحسين محلي. يسمح لك تخصيص المزيد من الوقت بتحسين الحل. |
3 |
ROUTING_FAIL : لم يتم العثور على حل للمشكلة. |
4 |
ROUTING_FAIL_TIMEOUT : تم الوصول إلى الحدّ الزمني المسموح به قبل العثور على حلّ. |
5 |
ROUTING_INVALID : الطراز أو معلمات النموذج أو العلامات غير صالحة. |
6 |
ROUTING_INFEASIBLE : ثبت أنها غير قابلة للتنفيذ. |
خيارات البحث المحلي
يسرد الجدول التالي خيارات لاستراتيجيات البحث المحلي (تُعرف أيضًا باسم البيانات الوصفية). اطّلِع على القسم تغيير استراتيجية البحث للحصول على أمثلة حول ضبط هذه الخيارات.
Option | الوصف |
---|---|
AUTOMATIC |
تتيح أداة الحلّ اختيار المتغيّر الوصفي. |
GREEDY_DESCENT |
تقبل إجراء تحسينات على الجيران المحليين في شبكة البحث (خفض التكلفة) إلى أن يتم تحقيق الحد الأدنى المحلي. |
GUIDED_LOCAL_SEARCH |
استخدام البحث المحلي الإرشادية للهروب من الحد الأدنى المحلي. (cf. البحث المحلي الموجَّه) يُعد هذا عادةً أكثر الطرق متماثلة لتوجيه المركبات. |
SIMULATED_ANNEALING |
يُستخدم محاكاة التلذّب للهروب من الحد الأدنى المحلي (cf. محاكاة المحاكاة)). |
TABU_SEARCH |
استخدام ميزة "البحث باستخدام مفتاح التبويب (Tab)" للخروج من القيمة المصغّرة المحلية (cf. Searchu Search) |
GENERIC_TABU_SEARCH |
يتم استخدام بحث Tabu حول القيمة الموضوعية للحل لتجنُّب الحد الأدنى من النتائج المحلية. |
التحكم في النشر
الاسم | Type | القيمة التلقائية | الوصف |
---|---|---|---|
use_full_propagation
|
قيمة منطقية | صحيح | استخدام القيود مع النشر الكامل في نموذج التوجيه (بدلاً من النشر الخفيف فقط) فالانتشار الكامل أمر ضروري فقط عند استخدام البحث أولاً أو العمق في النماذج التي تتطلب نشرًا قويًا لإكمال قيمة المتغيرات الثانوية. سيؤدي تغيير هذا الإعداد إلى "صحيح" إلى إبطاء عملية البحث في معظم الحالات وزيادة استهلاك الذاكرة في جميع الحالات. |