مسئله فروشنده دوره‌گرد: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
InternetArchiveBot (بحث | مشارکت‌ها)
نجات ۲ منبع و علامت‌زدن ۰ به‌عنوان مرده.) #IABot (v2.0
برچسب‌ها: جایگزین شد حذف حجم زیادی از مطالب منبع‌دار برداشتن بخش بزرگی از صفحه ویرایشگر دیداری
خط ۱:
[[پرونده:Salesman.PNG|بندانگشتی|چپ| 290px|اگر فروشنده دوره‌گرد از نقطه A شروع کند و فواصل بین نقاط مشخص باشد، کوتاه‌تربن مسیر که از تمام نقاط یکبار بازدید می‌کند و به A بازمی‌گردد کدام است؟]]
 
'''مسئله فروشنده دوره‌گرد''' {{انگلیسی|Travelling salesman problem، به‌اختصار: TSP}} مسئله‌ای مشهور است که ابتدا در [[سده ۱۸ (میلادی)|سده ۱۸]] مسائل مربوط به آن توسط [[ویلیام همیلتون]] و [[توماس کرکمن|چوریو]] مطرح شد و سپس در [[دهه ۱۹۳۰ (میلادی)|دهه ۱۹۳۰]] شکل عمومی آن به وسیله ریاضیدانانی مثل [[کارل منگر (اقتصاددان)|کارل منگر]] از [[دانشگاه هاروارد]] و [[هاسلر ویتنی]] از [[دانشگاه پرینستون]] مورد مطالعه قرار گرفت.
 
شرح مسئله بدین شکل است که:
:تعدادی شهر داریم و هزینه رفتن مستقیم از یکی به دیگری را می‌دانیم. مطلوب است کم‌هزینه‌ترین مسیری که از یک شهر شروع شود و از تمامی شهرها دقیقاً یکبار عبور کند و به شهر شروع بازگردد.
 
تعداد جواب‌های شدنی مسئله، برابر است با <math>\frac{1}{2}(n-1)!</math> برای n>۲ که n تعداد شهرها می‌باشد. در واقع این عدد برابر است با تعداد [[دور همیلتونی|دورهای همیلتونی]] در یک [[گراف کامل]] با n رأس.
 
== مسئله‌های مرتبط ==
مسئله فروشنده دوره گرد یا Traveling Salesman Problem (به اختصار TSP)، یکی از مسائل بسیار مهم و پرکاربرد در علوم کامپیوتر و تحقیق در عملیات است.
 
سه روش کلی برای کد کردن راه حل‌های مسئله TSP ارائه شده‌است که در الگوریتم‌های مختلفی قابل استفاده هستند. راه حل‌های سه‌گانه عبارتند از:
 
الف) نمایش جواب به صورت رشته گسسته جایگشتی که در الگوریتم‌های زیر قابل استفاده است:
[[الگوریتم ژنتیک]] یا Genetic Algorithms (به اختصار GA)
شبیه‌سازی تبرید یا Simulated Annealing (به اختصار SA)
[[الگوریتم جستجوی ممنوعه|جستجوی ممنوعه]] یا Tabu Search (به اختصار TS)
جستجوی همسایگی متغیر یا Variable Neighborhood Search (به اختصار VNS)
بهینه‌سازی کلونی مورچگان یا Ant Colony Optimization (به اختصار ACO)
جستجوی هارمونی یا Harmony Search (به اختصار HS)
و سایر الگوریتم‌های بهینه‌سازی گسسته
 
ب) نمایش جواب به صورت کلیدهای تصادفی یا Random Key که در الگوریتم‌های زیر قابل استفاده است:
[[الگوریتم ژنتیک]] یا Genetic Algorithms (به اختصار GA)
بهینه‌سازی ازدحام ذرات یا Particle Swarm Optimization (به اختصار PSO)
الگوریتم رقابت استعماری یا Imperialist Competitive Algorithm (به اختصار ICA)
تکامل تفاضلی یا Differential Evolution (به اختصار DE)
بهینه‌سازی مبتنی بر جغرافیای زیستی یا Bio-geography Based Optimization (به اختصار BBO)
استراتژی‌های تکاملی یا Evolution Strategies (به اختصار ES)
برنامه‌ریزی تکاملی یا Evolutionary Programming (به اختصار EP)
و سایر الگوریتم‌های بهینه‌سازی پیوسته
 
پ) نمایش جواب به شکل ماتریس‌های شبیه فرومون که توسط تمامی الگوریتم‌های اشاره شده در مورد (ب) قابل استفاده می‌باشد.
* مسئله معادل در [[نظریه گراف]] به این صورت است که یک [[گراف وزن‌دار]] کامل داریم که می‌خواهیم کم‌وزن‌ترین دور همیلتونی را پیدا کنیم.
* [[مسئله تنگراه فروشنده دوره‌گرد]] {{انگلیسی|Bottleneck traveling salesman problem، به‌اختصار: bottleneck TSP}} مسئله‌ای بسیار کاربردی است که در یک گراف وزن‌دار کم‌وزن‌ترین دور همیلتونی را می‌خواهد که شامل سنگین‌ترین یال باشد.
* تعمیم‌یافته مسئله فروشنده دوره‌گرد دارای ایالت‌هایی است که هر کدام حداقل یک شهر دارند و فروشنده باید از هر ایالت دقیقاً از یک شهر عبور کند. این مسئله به «مسئله سیاست‌مدار مسافر» نیز شهرت دارد.
 
== الگوریتم‌ها ==
مسئله فروشنده دوره‌گرد جزء مسائل [[ان‌پی سخت]] است. راه‌های معمول مقابله با چنین مسائلی عبارتند از:
* طراحی الگوریتم‌هایی برای پیدا کردن جواب‌های دقیق که استفاده از آن‌ها فقط برای مسائل با اندازه کوچک صورت می‌گیرد.
* استفاده از [[الگوریتم مکاشفه‌ای|الگوریتم‌های مکاشفه‌ای]] که جواب‌هایی به‌دست می‌دهد که احتمالاً درست هستند.
* پیدا کردن زیرمسئله‌هایی از مسئله یا به عبارت دیگر تقسیم مسئله به مسئله‌های کوچکتر، تا بتوان الگوریتم‌های مکاشفه‌ای بهتر و دقیق‌تری ارائه داد.
 
=== الگوریتم‌های دقیق ===
سرراست‌ترین راه حل امتحان کردن تمامی [[جایگشت]]های ممکن برای پیدا کردن ارزان‌ترین مسیر است که چون تعداد جایگشت‌ها !n است، این راه حل غیرعملی می‌شود. با استفاده از [[برنامه‌نویسی پویا]] مسئله می‌تواند با [[مرتبه زمانی]] <math>n^2 2^n</math> حل شود. راه‌های دیگر استفاده از [[الگوریتم‌های انشعاب و تحدید]] برای ۴۰ تا ۶۰ شهر، استفاده از [[برنامه‌نویسی خطی]] برای کوچکتر از ۲۰۰ شهر و استفاده از [[روش برش-صفحه]] برای اندازه‌های بزرگ است.
 
=== الگوریتم‌های مکاشفه‌ای ===
[[الگوریتم تقریبی|الگوریتم‌های تقریبی]] متنوعی وجود دارند که خیلی سریع جواب‌های درست را با احتمال بالا به‌دست می‌دهند که می‌توان آن‌ها را به صورت زیر دسته‌بندی کرد:
* مکاشفه‌ای سازنده
* بهبود تکراری
** مبادله دوبه‌دو
** مکاشفه‌ای ''k''-opt
** مکاشفه‌ای ''V''-opt
* بهبود تصادفی
 
=== پیچیدگی محاسباتی الگوریتم فروشنده دوره گرد ===
این الگوریتم به‌طور مستقیم در مرتبه زمانی(!O(n حل می‌شود اما اگر به روش برنامه‌نویسی پویا برای حل آن استفاده کنیم مرتبه زمانی آن (O(n^2*2^n خواهد شد که جز مرتبه‌های نمایی است. باید توجه داشت علی‌رغم آنکه مرتبه نمایی مذکور زمان بسیار بدی است اما همچنان بسیار بهتر از مرتبه فاکتوریل می‌باشد.
شبه کد الگوریتم فوق به صورت زیر است که در آن تعداد زیر مجموعه‌های یک مجموعه n عضوی ۲ به توان n می‌باشد و for اول یک ضریب n را نیز حاصل می‌شود که به ازای تمام شهرهای غیر مبدأ می‌باشد و حاصل
(n*(2^n را پدیدمی‌آورد؛ بنابراین برای جستجوی کمترین مقدار نیاز به یک عملیات خطی از مرتبه n داریم که در زمان فوق نیز ضرب می‌شود و در نهایت زمان (n^2)*(2^n) را برای این الگوریتم حاصل می‌کند.
 
{{چپ‌چین}}
<pre>
C({1},1) = 0
for (S=2 to n)
for All Subsets S subset of {1,2,3,...} of size S and containing1
C(S,1) = &
for All J member of S , J<>1
C (S , J) = min { C (S - { J } , i) + D i,J: i member of S , i <> J }
return min j C ({1 . . . n}, J) + D J,1
</pre>
{{پایان چپ‌چین}}
 
== شبه کد مسئله فروشنده دوره گرد ==
مسئله:یک تور بهینه برای یک گراف وزن دار و جهت دار مشخص نمایید. وزن‌ها اعدادی غیر منفی هستند
 
ورودی:یک گراف وزن دار و جهت دار و n تعداد گره‌های گراف. گراف با یک ارائه دو بعدی w مشخص می‌شود که سطرها و ستون‌هایش از ۱ تا n شاخص دهی شده‌اند و در ان [w[i][j معرف وزن لبه از گره iام به گره jام است.۴
 
خروجی:یک متغیر minlength که مقدار ان طول تور بهینه است و یک ارائه دو بعدی p که یک تور بهینه را از روی ان می‌توان ساخت . سطرهای p از ۱ تا n و ستون‌های ان با تمامی زیر مجموعه‌های {v-{v1 شاخص دهی شده‌اند . [P[i][A شاخص اولین گره بعد از vi بر روی کوتاهترین مسیر از viتاvj است که از تمام گره‌های A دقیقاً یکبار می‌گذرد.
 
{{چپ‌چین}}
<pre>
* Void travel ( int n ,
* const number W[][],
* index p[][],
* number&minlength
* )
* {
* Index i, j, k;
* number D[1..n][subset of V-{vi}];
* for (i= 2 ; i<=n;i++)
* D[i][∅} = w[i][1];
* for(k=1; k<=n-2 ; k++)
* for (all subsets A v-{v1} containing k vertices
* for (i such that j≠1 and vi is not in A){
* D[i][A] = minimum (W[i][j]+ D[vj][A-{vj}]);
* P[i][A]= value of j that gave the minimum
* }
* D[1][v-{vi}]= minimum (W[1][j]+ D[vj][V-{v1}];
* P[1][V-{v1}]= value of j that gave the minimum ;
* Minlength = D[1][V-{v1}];
* }
 
</pre>
{{پایان چپ‌چین}}
الگوریتم جستجوی ممنوعه یا Tabu Search یا به اختصار TS، یکی از قوی‌ترین الگوریتم‌ها در زمینه حل مسائل بهینه‌سازی، به خصوص مسائل بهینه‌سازی مبتنی بر گراف و مسائل بهینه‌سازی ترکیباتی (Combinatorial Optimization) است. این الگوریتم در اواخر دهه ۱۹۸۰ و توسط گلووِر (Glover) و همکارانش ارائه گردید. غالباً یکی از مسائلی که برای حل آن‌ها از الگوریتم TS استفاده می‌شود، مسئله فروشنده دوره گرد یا TSP است. این الگوریتم پاسخ‌های بسیار مناسبی را برای انواع مسائل گسسته به خصوص مسئله TSP ارائه می‌کند!
 
== جستارهای وابسته ==
* [[مسئله پل‌های کونیگسبرگ]]
* [[مسئله پستچی چینی]]
* [[مسئله مسافر کانادایی]]
 
== منابع ==
{{پانویس}}
* {{یادکرد-ویکی
|پیوند = http://en.wikipedia.org/wiki/Travelling_salesman_problem
|عنوان = Travelling salesman problem
|زبان = انگلیسی
|بازیابی = ۲ ژوئیه ۲۰۰۸
}}
{{چپ‌چین}}
* Schrijver, Alexander. "On the history of combinatorial optimization (till 1960)," Handbook of Discrete Optimization (K. Aardal, G.L. Nemhauser, R. Weismantel, eds.), Elsevier, Amsterdam, ۲۰۰۵، pp.&nbsp;1–68. [http://homepages.cwi.nl/~lex/files/histco.ps PS], [http://homepages.cwi.nl/~lex/files/histco.pdf PDF]
* S. Arora (1998). "[http://graphics.stanford.edu/courses/cs468-06-winter/Papers/arora-tsp.pdf Polynomial Time Approximation Schemes for Euclidean Traveling Salesman and other Geometric Problems]". Journal of ACM, ۴۵ (۱۹۹۸), pp.&nbsp;۷۵۳–۷۸۲.
{{پایان چپ‌چین}}
 
=== [منابع برای مطالعه بیشتر] ===
{{چپ‌چین}}
* P. Berman (2006). Marek Karpinski, "[http://eccc.hpi-web.de/eccc-reports/2005/TR05-069/revisn01.pdf ۸/۷-Approximation Algorithm for (۱٬۲)-TSP]", Proc. 17th ACM-SIAM SODA (2006), pp.&nbsp;۶۴۱–۶۴۸.
* [https://web.archive.org/web/20030803002954/http://www.research.att.com/~dsj/papers/HKsoda.pdf David S. Johnson]
* [https://web.archive.org/web/20071025205411/http://users.cs.cf.ac.uk/Antonia.J.Jones/Papers/EJORHeldKarp/HeldKarp.pdf Christine L. Valenzuela and Antonia J. Jones]
{{پایان چپ‌چین}}
 
== پیوند به بیرون ==
{{ویکی‌انبار-رده|Traveling salesman problem}}
* [https://web.archive.org/web/20131231001341/http://mathworks.ir/matlab-learning/48-neuralnetworks/306-tsp-nn-matlab حل مسئله فروشنده دوره گرد با شبکه عصبی در متلب ]
{{چپ‌چین}}
* [https://web.archive.org/web/20170325123309/http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/ Gerhard Reinelt TSPLIB Databases]
* [http://www.tsp.gatech.edu/index.html Traveling Salesman Problem] at Georgia Institute of Technology
* [http://www.vias.org/simulations/simusoft_travsalm.html Solution of the Traveling Salesman Problem using a Kohonen Map]
* [http://www.e-nuts.net/en/self-organizing-map Kohonen Neural Network] applied to the Traveling Salesman Problem (using three dimensions).
{{پایان چپ‌چین}}
 
[[رده:مسئله فروشنده دوره‌گرد]]
[[رده:الگوریتم‌های گراف]]
سطر ۱۴۸ ⟵ ۶:
[[رده:مسئله‌های محاسباتی در نظریه گراف]]
[[رده:نظریه گراف]]
مادر او فروشنده با این مسلش