مسألة البائع المتجول

تصغير|حلحلة لمعضلة البائع المتجول

**مسألة البائع المتجول**  هي إحدى أهم المسائل في علم التعقيد الحسابي ونظرية المخططات، ونص المسألة هو: وصل تاجر إلى دولة فيها n مدينة ويريد البائع أن يزور كل مدينة في الدولة مرة واحدة فقط وبأقل وقت سفر بين المدن. بالرغم من بساطة عرض المسألة فقد تبين أن هذه المسألة هي إحدى المسائل التي لا يُعرف لها خوارزمية تحلها بسرعة، أي أنه إذا كان هناك فقط 50 مدينة حينها يتطلب الأمر أكثر من ألف عام لايجاد الحل ! وقد وجدت هذه المسألة طريقها لنظرية التعقيد الحسابي حين أدرجها كارب في قائمته ال-21 لمسائل NP كاملة.

## تاريخ
تم الإشارة للمسألة للمرة الأولى في ألمانيا عام 1832 في كتاب «البائع المتجول الناجح» وكان كارل منجر هو أول رياضياتي كتب عن المسألة حيث أنه أراد  l(C)  حيث ان C هو مسطح بسيط في الفضاء المتري S وحسب التعريف هو:
 l(C)=sup\sum_{i=1}^{n-1}dist(x_i,x_{i+1})  
عندما القيم العُلية (supremum) نأخذها على كل اختيار  x_1,x_2,...,x_{n-1} على C حسب *الترتيب* الذي يضعه C, وما بينه منجر لحل هذه المسألة هو أننا نستطيع أن نفحص كل المجموعات الجزئية النهائية X ل-C أي  \exists n \in \mathbb{N}:X\subset C,|X|=n  وعندها نأخذ القيمة الدنيا لكل الترتيبات X . لذا عرف لكل مجموعة جزئية X, لفضاء متري S \lambda(X)  وهو طول المسار الأقصر الذي يمر من خلال، وقد برهن التالي:
  l(c)=sup_{X}\lambda(X)  
كما حاول أن يبرهن أن  \forall \epsilon > 0, \exists X\subset C : \lambda(X) \ge l(C) 
ونجح ببرهنة مبرهنة أقوى:
  l(c)=sup_{X}\kappa(X)  
عندما  \kappa(X)  هو الحد الأدنى للشجرة المتتدة في X .
نرى أأن  \lambda(X)  قريب جدا من مسألة البائع المتجول، وقد ذكر منجر هذه الصلة في عام 1930 في أحد محاضراته وحسب الوثائق في البداية سأل منجر إذا ما نستطيع أن نستبدل  \kappa(X)  بالحد الأدنى لشجرة ستاينير التي توصل X. وللمسألة الاقليدية تم إيجاد الحل في عام 1933 .
بين الأعوام 1930-1931 أمضى منجر في هارفرد كمحاضر زائر وفي أحد محاضراته بيَّن نتاجه التي عرضناها واحد الاقتراحات كانت من هاسلر ويتني وبعدها بعام ذكر هاسلر مسألة العبور على ال48 ولاية.
وفي عام 1940 ظهرت مقالات تدرس مسألة البائع المتجول في سياق مُختلف، ميلجرام في عام 1940 درس مسألة المسار الأقصر خلال مجموعة من النقاط في الفضاء المتري وقد درس هذه المسألة على مسطح جوردان الأدنى والتي تُغطي أي مجموعة من النقاط في الفضاء المتري وليست بالضرورة مجموعة نهائية والتي حينها المسار الأقصر قد لا يكون موجودا. اما فيجيس في نفس العام درس المسألة في مربع الوحدة وقد توصل فيربولونسكي إلى ان طوله اقل من  2+\sqrt{2.8 n } 
وقد اعطى ماهلانوبيس حدود دنيا للطول المتوقع ل-n نقاط عشوائية وقد أكمل هذا البحث جيسين عام 1942 .
وفي اخر الاربعينات وبداية الخمسينات ميلر فلود وقد كان في مؤسسة راند وهي مؤسسة بُحوث علمية حاول حلها بمساعدة علماء المؤسسة ولكن عبثا، وتم رصد جائزة لمن يساعد في حل المسألة (المسألة قد لا يوجد لها خوارزمية سريعة)
في عام 1954 اصدر فولكرسون وجونسون ودانتزيج مقال مهم في هذه المسألة وقد تطرقوا لخوارزميات لحل المسألة وقد أصبحت أساسية لاحقا في مسائل الاستمثال (combinatorial optimization)وقد استخدموا فيها المستويات القاطعة وبمساعدة البرمجة الخطية وطريقة السيمبلكس نجحوا في حل المسألة ل-49 ولاية. ولاحقا برهن كارب ان المسألة هي NP كاملة ومن حينها طور العلماء كثير من الطرق لحل المسألة بشكل مباشر مثل: البرمجة الخطية المختلطة وخوارزميات جينية...

## تعريف
ليكن  G=(V,A)  مخطوطا حيث تمثل V مجموعة الرؤوس (vertices) و-A مجموعة الأضلاع (edges). ولتكن C=(c_{ij}) مصفوفة الأوزان أو الأطوال أي أنه c_{ij} هو الوزن الذي على الضلع الذي بين i و- j أو طول الضلع. ومسألة البائع المتجول حينها تسأل إذا ما هناك دائرة تعبر في كل رأس مرة واحدة فقط حيث أن وزن الدائرة اقل ما يمكن؟

ملاحظات:
* تسمى الدائرة التي نريدها دائرة هاملتونية
* في بعض المسائل سيتعين علينا أن نميز بين مصفوفة أطوال متناظرة أي: \forall i,j \in V, c_{ij}=c_{ji}  وبين مصفوفة غير متناظرة
* خاصية غير الزامية للمصفوفة  C  هي خاصية متباينة المثلث وهي: \forall i,j,k \in V , c_{ij}+c_{jk} \ge c_{ik} 
وهذه الخاصية تتبين في مسألة البائع المتجول الاقليدية أي عندما تكون الرؤوس نقاط في  \mathbb{R}^2 والاطوال بين الرؤوس أي اطوال الأضلاع هو البعد الاقليدي أي انه إذا  v=(x_1,y_1) , u=(x_2,y_2)  حينها طول الضلع uv هو  d_{uv}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2} 

## NP كاملة
لقد تبين ان مسألة البائع المتجول هي مسألة كاملة بالنسبة ل-NP , بحيث انه يوجد دالة تحويل أو اختصار (reduction function) بين الحد الأدنى للدائرة الهاملتونية وهذه المسألة:
لنفرض انه معطى معنا مُدخل لمسألة الدائرة الهاملتونية (HC) نريد ان نبني اختصار بوقت حدودي والمُدخل لمسألة HC هو مُخطط  G=(V,A)  بحيث ان V=\{1,...,n\},A=\{(i,j)\} نبني مُدخل لمسألة TSP بالشكل التالي: نبني مُخطط G , بحيث ان مجموعة الرؤوس هي V اما مجموعة الأضلاع هي  A'=\{(i,j):i,j=1,...,n,i\neq j \}  و  c_{ij}=1  إذا  (i,j) \in A  و-  c_{ij}=\infty 
في سائر الأحوال، وحينها المخطط G يحوي دائرة هاملتونية إذا وفقط إذا قيمة مُدخل TSP هي n
## مسائل TSP سهلة
# إذا كانت مصفوفة الأطوال مصفوفة مثلثة عُلوية أي \forall i \ge j , c_{ij} =0 
# إذا كان المخطط، G , شجرة أو مسار أو دائرة أو نجمة حينها أيضا يمكن حل المسألة بسهولة
# نعرف مصفوفة C ان تكون صغيرة إذا:  \forall i \in \{1,...,n\},\exists a_i,b_i:c_{ij}=min\{a_i,b_j\} \forall i,j \in [n]  حينها إذا كانت مصفوفة الأطوال صغيرة يمكن حل المسألة بوقت O(n)
## خوارزميات دقيقة لحل المسألة
الحل المفهوم ضمنا وهو إنتاج كل المسارات الدائرية ثم اختيار الأفضل هو حل غير قابل للتشغيل بسرعة إذ ان تعقيده  O(n!)  وإذا كان فقط n=60 حينها سيكون هنالك احتمالات أكثر من ان نستطيع ان ننتجها (حدود الطاقة الحسابية للبشر على مر العصور هو  2^{80}  وهذا العدد اصغر بكثير من  60! ) ولان الحل الجشع لا يمكن انتاجه بجودة عالية وسرعة ملائمة تم تطوير الكثير من الوسائل لحل المسألة وسنعدد بعضها:
### البرمجة الخطية
طور فلكرسون وجونسون ودانتزيج هذه الطريقة وهي: لكل ضلع في المخطط نخصص متغير  x_{ij}  وهو 1 إذا وفقط إذا الضلع من ضمن الحل الأفضل للمسألة وقد كان تعريف مسألة البرمجة الخطية كالتالي:

\sum_{i\neq j} c_{ij} x_{ij}  **: Minimize **

**: Subject to**

#  \sum_{j=1}^n x_{ij}=1 ,i=1,...,n 
#
#  \sum_{i=1}^n x_{ij}=1 ,j=1,...,n 
#
#  \sum_{i,j\in S}^n x_{ij}\leq |S|-1,S\subset V ,2 \le |S| \le n-2
#
#  x_{ij} \in \{0,1\},i,j=1,...,n,i\neq j 

توضيحات:
# من الواضح ان دالة الهدف هي مقياس لوزن الدائرة التي نريد ايجادها، وذلك لان كل  x_{ij}  يمكن ان يكون 1 أو 0 , أي ان ضلع يمكن ان تكون بالحل وبالتالي نضيف وزنها (وحينها  x_{ij}=1 ) أو يمكن الا يكون بالحل ثم بالتالي  x_{ij}=0  أي انه لن نحسب وزن الضلع.
# القيود (Constraints) في السطر 1+2 هي تحدد ان كل رأس (vertex) نستخدمه مرة واحدة في الحل أي ان لكل رأس درجة الخروج ودرجة الدخول اليه على الأكثر 1 .
# اما القيد 3 فهو يدعى «إلغاء المسارات الدائرية القصيرة» أي مسارات دائرية بطول اقل من n , وذلك لانه إذا كان هناك مسار دائري أقصر من n على مجموعة جزئية S من الرؤوس حينها سيحوي هذا المسار الدائري على |S| اضلاع، وحينها القيد 3 لن يتحقق لذا لا يمكن ان نجد حلا أقصر من المرغوب به، وانتبه أيضا ان مسار دائري بطول 1 لا يمكن ان يكون حلا وذلك حسب قيود 1+2 (وبالتالي كذلك ل-n-1) لذا فانه مسموح وضع القيد: 2 \le |S| \le n-2
# اما القيد الأخير فهو لبيان ان كل ضلع يمكن ان تكون بالحل الأمثل أو لا: إذا كان الضلع في الحل حينها يكون قيمة المتغير 1 وخلاف ذلك 0 .
# يمكن استبدال قيد 3 بالقيد التالي:  \sum_{i \in S} \sum_{j \in \overline S} x_{ij} \ge 1 , S \subset V,2 \le |S| \le n-2 

لحل هذه المسألة الخطية يمكن استخدام أي وسيلة لحل المسائل الخطية على الاعداد الكاملة ولكن هذه الخوارزمية لا يمكن ان تحله بوقت حدودي إذ انه يوجد  n(n-1)  متغيرات و- 2n  قيود درجة (1+2) و  2^n-2n-2  قيود على طول المسارات (3) لذا فانه لا يمكن حلها بشكل مباشر ما يحتم علينا استخدام طرق أخرى.

لتخفيف كمية القيود كانت هناك حاجة لتغيير هذه البرمجة الخطية واستبدالها بمسألة خطية أخرى مع كمية قيود اقل وقد كان هذا وسميت البرمجة الخطية MTZ على أسماء كاتبيها. وكان الحل باضافة متغيرات اضافية:

#  u_i-u_j+(n-1)x_{ij} \le n-2 , \forall i,j \in \{2,...,n\},i\neq j 
#  1 \le u_i \le n-1 , \forall i \in \{2,...,n\} 

توضيح:
# القيد الأول منهما لضمان انه لا يوجد مسار دائري جزئي على المجموعات الجزئية:  S \subseteq V \setminus \{1\} لذا فانه لا يوجد مسارات دائرية جزئية طولها اقل من n
# القيد الثاني يضمن ان كل u_i  معرف بشكل واحد ووحيد لكل حل ممكن.

ملاحظات:
# تبين ان البرمجة الخطية MTZ اضعف من البرمجة الأولى لانه تم برهنة انه في بعض الحالات القيمة التي يمكن ان ينتجها MTZ تكون اقل منها في البرمجة الأولى.
# يمكن تقوية MTZ باضافة:  u_i-u_j+(n-1)x_{ij}+(n-3)x_{ij} \le n-2 , \forall i,j \in \{2,...,n\},i\neq j  بدل القيد الأول.

### [[التفريغ والتحديد|التفريع والتحديد]](Branch and Bound)
يمكن استخدام هذه الوسيلة لحل مسألة البائع المتجول (TSP). في مجال البرمجة الرياضياتية يمكن النظر إلى هذه الوسيلة من الجهة التالية: اولا تخفيف بعض القيود ثم أخذ الناتج وحله بطريقة سريعة وجيدة. حينها جودة وسيلة فرق تسد تكون من كمية الحد الأقصى لكل مجموعة قيود نقصيها. اما بالنسبة لمسألة TSP بداية يمكن تخفيف قيود 3 وارجاء باقي القيود والتي تشكل معا مسألة التلائم (assignment problem) والتي يمكن حلها بشكل دقيق بوقت  O(n^3)  لذا فان القيمة السفلى لمسألة البائع المتجول هي مسألة التلائم سوف نستخدم هذه المسألة لنركب خوارزمية بطريقة فرق تسد:
سوف نستخدم الأمور التالية:
#  z^* : أفضل قيمة ل TSP وجدناها حتى اللحظة.
#  z_h  : قيمة دالة الهدف لمسألة التلائم (AP) في الرأس h في شجرة البحث،
#  \underline z_h  : قيمة سُفلى ل- z_h 
#  I_h  مجموعة الأضلاع ضمن الحل في الرأس h من شجرة البحث
#  E_h  مجموعة الأضلاع التي ليست ضمن الحل في الرأس h من شجرة البحث

الخوارزمية:

**الخطوة 1 :** (الابتداء) حصِّل على قيمة اولية ل- z^* بمعنى ان نستخدم طريقة الحدس المهني (Heuristic) توصلنا للحل، ابدأ في الرأس 1 من شجرة البحث و: I_h=E_h=\emptyset  واحصل على z_1 بحل المسألة AP , إذا  z_1 \ge z^*  توقف: الحدس المهني يعطي الحل الأمثل. وإذا حل AP لا يحوي مسارات جزئية دائرية توقف لانه يعطي الحل الأمثل. خلاف هذا: ضع 1 في طابور

**الخطوة 2 :** (اختيار الرأس (vertex)) إذا الطابور فارغ، توقف. خلاف هذا اختر رأس (vertex) من الطابور.

**الخطوة 3 :** (تقسيم المسألة الجزئية) الحل الموجود في الرأس h هو حل غير جائز ويجب ازالته بتقسيم المسألة الحالية لمسائل متجاورة h_r التي تتميز بالمجموعتين  I_{h_r}  و-  E_{h_r} . وحتى نُنتج هذه التقسيمات، فليكن مسار دائري جزئي يحيث انه على الاقل s اضلاع لا تحويها  I_{h}  لنفرض ان هذه الأضلاع هي:  (i_1,j_1),...,(i_s,j_s) حسب الترتيب التي تظهر في المسار الجزئي وحينها انتج s مسائل جزئية عندما:

 I_{h_r}=
\begin{cases}

I_{h_r},\mbox{r=1}\\

I_h \cup \{(i_u,j_u):u=1,...,r-1\},r=2,...,s 
\end{cases} 


E_{h_r}=E_h \cup \{(i_r,j_r)\}, r=1,...,s 


نفذ الخطوات 4 حتى 6 لكل r=1,...,s

**الخطوة 4 :** احسب حد أسفل  \underline z_h ل-z_h عن طريق تخفيض عامود وسطر من مصفوفة الأوزان وإذا  \underline z_h \le z^*  أكمل للخطوة 5 خلاف هذا اعد الخطوة 4 عندما r=r+1 .

**الخطوة 5 :** حل المسألة الجزئية التي في  h_r  وإذا z_{h_r} \ge z^*  عد إلى 4 عندما r=r+1 .

**الخطوة 6 :** افحص إذا ما الحل الحالي يحوي على مسائل جزئية إذا كان كذلك ضع h_r في الطابور خلاف هذا: z^*=z_{h_r} احفظ المسار وإذا z^*=z_h اذهب إلى 2 .

## خوارزميات تقريب
وهي خوارزميات لا تعطي جواب دقيق ولكنها تعطينا جواب لنفرض انه S ونفرض انه *S هو الحل الأمثل حينها:  \alpha = \frac{S}{S^*} , هو البعد عن الجواب الأمثل. للاسف لمسألة البائع المتجول لا يوجد خوارزميات تقريب سريعة الا إذا NP=P , وهذا لانه إذا كان هناك واحدا كهذا فهو حتما سوف يحل مسألة المسار الدائري الهاملتوني، والأسوأ من هذا انه حتى إذا  \alpha = O(2^n)  سينتج عن هذا ان NP=P !
بالرغم من هذا فان مسألة البائع المتجول مع خاصية متباينة المثلثات (أو مسألة البائع المتجول المترية) يوجد لها خوارزميات تقرب الإجابة المثلى لذا سوف ننظر اولا لم لا يمكن تقريب TSP عمومًا ثم نقرب TSP مع خاصية متباينة المثلثات:

### صعوبة تقريب TSP
**نظرية:**  لكل دالة يمكن حسابها بوقت حدودي \alpha(n) , مسألة البائع المتجول لا يمكن تقريبها بمعامل \alpha(n) الا إذا NP=P .

**برهان:**  لنفرض من اجل التناقض ان هناك خوارزمية حدودية تقرب TSP بمعامل \alpha(n) سنسميه \mathcal{A} سوف نُري انه يمكن استخدام \mathcal{A} لكي نقرر مسألة المسار الدائري الهاملتوني (حينها NP=P).

الفكرة المركزية هي اختصار مسألة المسار الهاملتوني الدائري لمسألة البائع المتجول أي انه باعطائنا G نريد بناء مخطط كامل مع اوزان 'G بحيث أنَّ:

1- إذا G يوجد فيه مسار دائري هاملتوني حينها في 'G وزن حل مسألة البائع المتجول الأمثل هو n .

2- إذا G لا يوجد فيه مسار دائري هاملتوني حينها في 'G وزن حل مسألة البائع المتجول الأمثل هو أكثر من \alpha(n) n

لاحظ انه عندما نشعل الخوارزمية \mathcal{A} على المخطط 'G على الخوارزمية ان تعطينا جوابا على الأكثر \alpha(n) n في الحالة الأولى وفي الحالة الثانية جواب قيمته أكبر من \alpha(n) n لذا يمكن تقرير مسألة المسار الدائري الهاملتوني.

والاختصار هو كالتالي: لكل ضلع من اضلاع G ضع وزن 1 , وكل الأضلاع ليست اضلاع ل-G وزنها هو \alpha(n) n وهذا سوف يكون 'G .

يمكن ان نرى انه إذا في G يوجد مسار دائري هاملتوني حينها وزن TSP في 'G هو n , اما إذا G لم يحوِ مسار دائري هاملتوني فعليه استخدام ضلع واحدة على الاقل وزنها \alpha(n) n لذا فان وزن TSP يكون أكثر من \alpha(n) n
### تقريب مسألة البائع المتجول المترية
الخوارزمية:

# جد الشجرة الممتدة ذات الحد الأدنى (MST) ولنسمها T .
# ضاعف كل ضلع في T واحصل على مخطط اويلراني.
# جد مسار اويلراني  \mathcal{T}
# اخرج المسار الذي رؤوس G حسب ترتيب ظهورها في  \mathcal{T} . فلنسم المسائر الدائري الناتج C .

يمكن البرهنة بأن معامل هذه الخوارزمية هو 2 . يمكن تحسين هذه النتيجة ل-\frac32 باستخدام مسألة التلائم في المخططات والخوارزمية الناتجة تكون جدا مشابهة للموصفة اعلاه.

## مراجع

*
تصنيف:استعارات ترمز إلى أشخاص
تصنيف:استمثال توافقي
تصنيف:خوارزميات تعتمد على نظرية البيان
تصنيف:مسائل كثيرة حدود غير قطعية كاملة
تصنيف:نظرية البيان