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

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث

مسألة البائع المتجول (بالإنكليزية: Travelling salesman problem) هي إحدى أهم المسائل في علم التعقيد الحسابي ونظرية المخططات، ونص المسألة هو : وصل تاجر إلى دولة فيها 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) مخطوط (graph) عندما 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 سهلة[عدل]

  1. اذا كانت مصفوفة الأطوال مصفوفة مثلثة عُلوية اي \forall i \ge j , c_{ij} =0
  2. اذا كان المخطط , G , شجرة او مسار او دائرة او نجمة حينها أيضا يمكن حل المسألة بسهولة
  3. نعرف مصفوفة 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

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

توضيحات :

  1. من الواضح ان دالة الهدف هي مقياس لوزن الدائرة التي نريد ايجادها , وذلك لان كل  x_{ij} يمكن ان يكون 1 او 0 , اي ان ضلع يمكن ان تكون بالحل وبالتالي نضيف وزنها (وحينها  x_{ij}=1 ) او يمكن الا يكون بالحل ثم بالتالي  x_{ij}=0 اي انه لن نحسب وزن الضلع .
  2. القيود(Constraints) في السطر 1+2 هي تحدد ان كل رأس (vertex) نستخدمه مرة واحدة في الحل اي ان لكل رأس درجة الخروج ودرجة الدخول اليه على الاكثر 1 .
  3. اما القيد 3 فهو يدعى "الغاء المسارات الدائرية القصيرة" اي مسارات دائرية بطول اقل من n , وذلك لانه اذا كان هناك مسار دائري أقصر من n على مجموعة جزئية S من الرؤوس حينها سيحوي هذا المسار الدائري على |S| اضلاع , وحينها القيد 3 لن يتحقق لذا لا يمكن ان نجد حلا أقصر من المرغوب به , وانتبه أيضا ان مسار دائري بطول 1 لا يمكن ان يكون حلا وذلك حسب قيود 1+2 (وبالتالي كذلك ل-n-1) لذا فانه مسموح وضع القيد : 2 \le |S| \le n-2
  4. اما القيد الأخير فهو لبيان ان كل ضلع يمكن ان تكون بالحل الأمثل او لا : اذا كان الضلع في الحل حينها يكون قيمة المتغير 1 وخلاف ذلك 0 .
  5. يمكن استبدال قيد 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 على أسماء كاتبيها . وكان الحل باضافة متغيرات اضافية :

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

توضيح :

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

ملاحظات :

  1. تبين ان البرمجة الخطية MTZ اضعف من البرمجة الاولى لانه تم برهنة انه في بعض الحالات القيمة التي يمكن ان ينتجها MTZ تكون اقل منها في البرمجة الاولى .
  2. يمكن تقوية 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) لذا فان القيمة السفلى لمسألة البائع المتجول هي مسألة التلائم سوف نستخدم هذه المسألة لنركب خوارزمية بطريقة فرق تسد : سوف نستخدم الامور التالية :

  1.  z^* : أفضل قيمة ل TSP وجدناها حتى اللحظة .
  2.  z_h  : قيمة دالة الهدف لمسألة التلائم(AP) في الرأس h في شجرة البحث ,
  3.  \underline z_h  : قيمة سُفلى ل- z_h
  4.  I_h مجموعة الأضلاع ضمن الحل في الرأس h من شجرة البحث
  5.  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

تقريب مسألة البائع المتجول المترية[عدل]

الخوارزمية :

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

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

مصادر[عدل]

Gilbert، Laborte (1991)، The Traveling Salesman Problem:An overview of exact and approximate algorithms 

David، williamson؛ David، shmoys (2011)، The Design of Approximation Algorithms، ISBN 978-0521195270 

Vijay، Vazirani (2001)، Approximation Algorithms، ISBN 978-3540653677 

Alexander، Schrijver، On the history of combinatorial optimization