در این پست پیاده سازی الگوریتم جستجوی ممنوعه TS برای حل مسئله فروشنده دوره گرد TSP در متلب قرار داده شده است. واژهٔ ممنوعه یا تابو از تُنگان زبان مردم جزایر پلینزی در اقیانوس آرام گرفته شدهاست. این واژه به معنای شیء مقدسی است که به دلیل قداست نباید آن را لمس کرد. بر اساس واژهنامهٔ وِبستر، امروزه این واژه در معنای «ممنوعیت ایجاد شده به دلیل فرهنگ اجتماعی برای ایجاد اقدام حفاظتی» یا «ممنوعیت چیزی که دارای ریسک است»، به کار میرود.
معنای اخیر واژهٔ تابو، با تکنیک جستجوی ممنوعه کاملاً سازگار است. ریسکی که در الگوریتم جستجوی ممنوعه از آن اجتناب میشود، خطر مسیرهای نامناسب است. در ادامه به توضیح این الگوریتم و سورس کد آن پرداخته می شود.
برنامهنویس: تیم برنامه نویسی پی استور
متشکل از اساتید و فارغ التحصیلان رشته های فنی - مهندسی
تیم برنامه نویسی پی استور یکی از اولین گروه های تشکیل شده در مجموعه آموزشی پی استور می باشد. این تیم از اساتید مجرب و فارغ التحصیلان رشته های فنی و مهندسی تشکیل شده که در زمینه های مختلف برنامه نویسی و تهیه سورس کد فعال هستند.
الگوریتم جستجوی ممنوعه (Tabu Search) (TS)
الگوریتم جستجوی ممنوعه (Tabu Search) (TS) یک استراتژی جستجوی حافظه ای می باشد که برای اولین بار توسط گلوور در سال 1986 مطرح شده است. این الگوریتم تقریبا مانند الگوریتم های جستجوی محلی کار می کند، با این تفاوت که برای جلوگیری از دور و تسلسل در جواب ها و افتادن در دام جوا ب های بهینه محلی، از مفهومی به نام فهرست ممنوع استفاده می کند.
جابه جایی از جواب جاری به جواب همسایه امکان پذیر زمانی انجام می شود که در فهرست تابو قرار نداشته باشد. در غیر اینصورت، جواب همسایه دیگری که در ارزیابی جواب های همسایه در رده بعدی قرار گرفته است، انتخاب شده و جابه جایی به آن صورت می گیرد. هرگاه ساختار همسایگی متقارن باشد، خطر افتادن در دور وجود دارد. نمودار جریان الگوریتم جستجوی ممنوعه بصورت زیر است.
حافظه الگوریتم میتواند از دو نوع recency و یا frequency باشد
حافظه recency :
حافظه کوتاه مدت در روش جستجوی ممنوع نوعی از جستجوی فعال را جهت یافتن بهترین جواب ها تشکیل می دهد و می توان اینگونه بیان نمود که هسته اصلی جستجوی ممنوع، در فرایند کوتاه مدت مجسم می شود. این حافظه لیستی با ابعاد N رکورد می باشد که N تا از آخرین حرکاتی را که الگوریتم با آن مواجه بوده است را به عنوان tabu نگهداری میکند.
حافظه frequency :
حافظه frequency که به عنوان حافظه بلندمدت شناخته می شود با اضافه نمودن اطلاعات تکمیلی دیگری از قبیل اینکه چند بار یک حرکت و یا جواب ممنوع جستجو شده است، مکمل حافظه recency می باشد. در حالت کلی جستجوی ممنوع با در نظر گرفتن حافظه بلند مدت و استراتژی های مرتبط با آن قوی تر میشود.
لیست ممنوع یا Tabu:
این لیست که دارای ابعادی ثابت یا متغیر می باشد، جابه جایی های منع شده را نگهداری می کند و کاربرد اصلی آن، پرهیز از همگرا شدن به جواب های بهینه محلی است. به عبارت دیگر، به کمک فهرست tabu جابه جایی به جوا بهایی که اخیراً جستجو شده اند، ممنوع خواهد شد و فقط بخش هایی از مجموعه جواب که پیش از این مورد بررسی قرار نگرفته، مد نظر خواهند بود. نحوه ورود و خروج جواب ها به فهرست ممنوع به صورت FIFO است.
مسئله فروشنده دورگرد TSP
مساله فروشنده دوره گرد Travelling salesman problem یا به اختصار TSP مساله اي است که شرح آن خيلي آسان مي باشد. تعريف آن بدين صورت است که تعداد متناهي شهر با هزينه پيمايش بين هر جفت از آنها داده مي شود و هدف مساله اين است که يک فروشنده دوره گرد تمامي اين شهرها را به گونه اي ملاقات کند که هر يک از اين شهرها را فقط يک بارملاقات کرده و دوباره به شهر آغازين برگردد با اين شرط که با کمترين هزينه پيمايش اين کار را انجام دهد.
به طور کلي هدف پيدا کردن کم هزينه ترين تور براي ملاقات همه شهرها و بازگشت به شهر آغازين حرکت است. مساله فروشنده دوره گرد در شکل ساده و اختصاري با نام TSP شناخته مي شود. شکل زیر يک نمونه جواب از مساله فروشنده دوره گرد که در سال 1591 براي 15 شهر از کشور آمريکا مطرح شد را نشان مي دهد که با روش شاخه وحد حل شد.
سور س حل مسئله فروشنده دوره گرد TSP با الگوریتم TS در متلب
در این بخش قسمتی از سورس برنامه حل مسئله فروشنده دوره گرد TSP با الگوریتم TS در متلب آماده شده است این سورس کد شامل 10 فایل می باشد که عبارتند از:
قسمتی از کد TabuSearch به صورت زیر است:
model = CreateModel(); CostFunction=@(tour) TourLength(tour, model); ActionList=CreatePermActionList(model.n); nAction=numel(ActionList); %% Parameters MaxIt=100; TL=round(0.5*nAction); %% Initialization empty_individual.Position=[]; empty_individual.Cost=[]; % Create Initial Solution sol=empty_individual; sol.Position=randperm(model.n); sol.Cost=CostFunction(sol.Position); % Initialize Best Solution Ever Found BestSol=sol; % Array to Hold Best Costs BestCost=zeros(MaxIt,1); % Initialize Action Tabu Counters TC=zeros(nAction,1); %% Main Loop for it=1:MaxIt bestnewsol.Cost=inf; % Apply Actions for i=1:nAction if TC(i)==0 newsol.Position=Action(sol.Position,ActionList{i}); newsol.Cost=CostFunction(newsol.Position); newsol.ActionIndex=i; if newsol.Cost<=bestnewsol.Cost bestnewsol=newsol; end end end % Update Current Solution sol=bestnewsol; % Update Tabu List for i=1:nAction if i==bestnewsol.ActionIndex TC(i)=TL; % Add To Tabu List else TC(i)=max(TC(i)-1,0); % Reduce Tabu Counter end end % Update Best Solution Ever Found if sol.Cost<=BestSol.Cost BestSol=sol; end % Save Best Cost Ever Found BestCost(it)=BestSol.Cost; % Show Iteration Information disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]); % Plot Best Solution figure(1); PlotSolution(BestSol, model); pause(0.01); % If Global Minimum is Reached if BestCost(it)==0 break; end end BestCost=BestCost(1:it);
برای دانلود مجموعه کامل و قابل اجرا در متلب الگوریتم جستجو ممنوع محصول را خریداری نمایید.
ویدئوی معرفی محصول
درباره محصول
سورس برنامه حل مسئله فروشنده دوره گرد TSP با الگوریتم جستجوی ممنوعه TS در متلب عنوان محصولی است که در این پست به آن پرداخته شده است. محصول در نرم افزار متلب نوشته شده و بصورت کامل توسط گروه پشتیبانی پی استور تست و اجرا شده است. محصول دارای نشان تضمین کیفیت پی استور می باشد. برای دانلود محصول آن را خریداری کنید. به محض خرید لینک دانلود در دسترس خواهد بود.
مباحث مرتبط با الگوریتم جستجوی ممنوعه TS
مباحث مرتبط با مسئله فروشنده دوره گرد
تاریخ انتشار: | 25 آبان 1397 |
---|---|
تاریخ بروزرسانی: | 25 اردیبهشت 1398 |
حجم فایل: | 3.5 کیلوبایت |
فرمت فایل | m. در قالب متلب |
نسخه: | 1.0 |
شناسه اثر: | ندارد |
هماهنگی با: | Matlab 2009 و بالاتر |
تاکنون 336 نفر این محصول را تهیه کرده اند و 1 نظر برای آن ثبت شده است.
نظرات و دیدگاه ها
قوانین ثبت دیدگاه
- لطفاً دیدگاه های خود را فارسی تایپ کنید.
- دیدگاه های نامرتبط به مطلب تایید نخواهد شد.
- از درج دیدگاه های تکراری پرهیز نمایید.
- سوالات تخصصی خودتان را از طریق تیکت پشتیبانی مطرح کنید.
قیمت 49,000 تومان
تاریخ انتشار: | 25 آبان 1397 |
---|---|
تاریخ بروزرسانی: | 25 اردیبهشت 1398 |
حجم فایل: | 3.5 کیلوبایت |
فرمت فایل | m. در قالب متلب |
نسخه: | 1.0 |
شناسه اثر: | ندارد |
هماهنگی با: | Matlab 2009 و بالاتر |
1 بازخورد (مشاهده نظرات)
قیمت: 49,000 تومان
علیرضا سلطانی
ممنون از این کد متلب که آماده کردید. واقعاً بهترین جوابی که تا حالا گرفتم برای حل مسئله فروشنده دوره گرد یا همون TSP با الگوریتم جستجوی ممنوعه بوده اکثراً در تکرار کمتر از 50 جواب مسئله رو پیدا می کنه. من با الگوریتم های زیادی مسئله TSP رو آزمایش کردم (ژنتیک، PSO، الگوریتم مورچگان، زنبور، گرگ خاکستری، وال، پروانه، شمع و پروانه، فاخته، قورباغه، ملخ و …) ولی بهترین جواب برای حل مسئله TSP همین الگوریتم TS هست. فقط از ادمین محترم خواهشمندم فیلم آموزش کد نویسی رو هم در کنار کد متلب قرار بدن چون من خیلی زحمت کشیدم تا از کد سر در بیارم.
از دوستان عزیر که در مورد حل مسئله با الگوریتم های فرا اکتشافی کار می کنن خواهش دارم اگه نتایجی بهتر برای حل مسئله TSP دارن بفرمایند تا استفاده کنیم. ممنون از مدیریت محترم.
مدیریت و پشتیبانی
ممنون از اینکه نتایج خودتون رو مورد نقد و بررسی قرار دادید. ایشالا نظرات شما رو به برنامه نویسان و مدرسان مجموعه انعکاس می دیم.