
در این بخش به تشریح سورس کد الگوریتم ژنتیک واقعی در متلب پرداخته شده است. الگوریتم ژنتیک یکی از الگوریتم های پرکاربرد و محبوب برای حل مسائل سخت می باشد و به وفور از این الگوریتم استفاده می شود. مفهوم آسان و قابل درک این الگوریتم آن را به عنوان الگوریتم پرکاربرد در زمینه های الگوریتم های تکاملی بدل کرده است در ادامه توضیحات کاملی درباره الگوریتم ژنتیک پیوسته ارائه می شود.
برنامهنویس: تیم برنامه نویسی پی استور
متشکل از اساتید و فارغ التحصیلان رشته های فنی - مهندسی
تیم برنامه نویسی پی استور یکی از اولین گروه های تشکیل شده در مجموعه آموزشی پی استور می باشد. این تیم از اساتید مجرب و فارغ التحصیلان رشته های فنی و مهندسی تشکیل شده که در زمینه های مختلف برنامه نویسی و تهیه سورس کد فعال هستند.
الگوریتم ژنتیک
الگوریتم ژنتیک روشی براي بهینه سازي با جستجوي وسیع است و کارکرد آن بر اصول انتخاب طبیعی حاکم بر ژنتیک طبیعی استوار است. ایده این الگوریتم از نظریه تکامل داروین الهام گرفته شده است. اگرچه این الگوریتم روشی براي جستجوي تصادفی است، ویژگی هاي خاص آن موجب می شود که نتوان آن را یک جستجوي تصادفی ساده قلمداد کرد. در این الگوریتم اطلاعات تاریخی از چگونگی تکامل، به شکلی کارا استخراج شده و در روند جستجو استفاده می شود. الگوریتم ژنتیک روشی قدرتمند بوده و بر روي دسته وسیعی از مسائل بهخوبی عمل می کند.
الگوریتم ژنتیک واقعی که بر اساس ایده ي تکامل بیولوژیکی در طبیعت عمل می نمایند، بر روي جمعیتی از راه حل های بالقوه یا کروموزوم ها که هر یک می توانند بهعنوان پاسخی از مسئله تلقی شوند، با اعمال عملگرهای ژنتیکی به جستجوي راه حل نهایی می پردازند. در الگوریتم ژنتیکی، بسیاري از مکانیزم هایی که در زیست شناسی وجود دارد، نظیر انتخاب ژن برتر، ترکیب ژن ها، جهش ژن ها، مهاجرت افراد جمعیت، محلی بودن گونه ها و … شبیه سازي می شوند. در این الگوریتم ها، جستجو بر روي مجموعه هايی از راه حل ها بهصورت موازي انجام می شود، درحالیکه در روش هاي سنتی جستجو بهصورت ترتیبی است.
نحوه کار الگوریتم
در آغاز الگوریتم، تعدادي از افراد بهعنوان جمعیت اولیه و معمولاً بهصورت تصادفی ساختهشده و معیاري از کیفیت به نام تابع هدف یا برازندگی براي تک تک آن ها ارزیابی می شود. اگر شرط رسیدن به جواب برقرار نباشد (به جواب بهینه نرسیده باشیم)، نسل بعدي با انتخاب والدین بر اساس میزان برازندگی آن ها تولید می شود. در هر نسل، بهترین هاي آن نسل انتخاب می شوند و پس از زادوولد، مجموعه جدیدي از فرزندان را تولید می کنند.
کروموزوم هاي موجود در جمعیت بر اساس مقدار برازندگی بهعنوان والد انتخاب می شوند. سپس تولید مثل، بین جفت کروموزوم ها انجام می گیرد تا فرزندان ایجاد شوند و فرزندان با احتمالی ثابت دچار جهش می شوند. سپس میزان برازندگی فرزندان جدید محاسبهشده و جمعیت جدید، از جایگزینی فرزندان با والدین ایجاد می شود و جمعیت ایجادشده جدید بهعنوان نسل بعدي شناخته میشود و فرایند تکرار می شود. در این فرایند، افراد مناسب تر با احتمال بیشتري در نسل هاي بعد باقی خواهند ماند و این فرایند تا برقرار شدن شرط خاتمه تکرار می شود.
الگوریتم زمانی پایان خواهد یافت که بهبودي بر روي جواب ها صورت نگیرد و یا اینکه تعداد مشخصی نسل تولید شود. مراحل کلی یک الگوریتم ژنتیک می تواند بهصورت شکل زیرباشد.
تعریفها
الف) ژن: مقدار کد شده هر متغیر را ژن گویند.
ب)کروموزوم: به رشته یا دنباله اي از ژن ها که بهعنوان شکل کد شده یک جواب ممکن (مناسب یا نامناسب) از مسئله موردنظر به کار می رود کروموزوم گویند.
ج) جمعیت: در هر مرحله تکرار از الگوریتم ژنتیکی تعدادي مشخص از کروموزوم ها مورد ارزیابی قرار می گیرد. به مجموعه این کروموزوم ها جمعیت می گویند.
د) عدد برازندگی: مناسب بودن یا نبودن را با معیاري که باهدف(مورد بهینهسازی) رابطه دارد میسنجند.
ه) عملگر جابجایی یا ترکیب Crossover: این عملگر براي زوجی از کروموزوم ها اعمال می شود. نوعی از این عملگر، دو کروموزوم را بهطور تصادفی از یک نقطه شکسته و بخش هاي شکسته دو کروموزوم را جابه جا می کند. بدین ترتیب دو کروموزوم جدید به وجود می آید. به دو کروموزوم اولیه کروموزوم هاي والد و به دنباله هاي جدید هنگامیکه عملگر جابه جایی بر آنها اعمال گردد دنباله هاي فرزند گویند.
و) عملگر جهش: این عملگر روي یک دنباله منفرد عمل می کند بهاینترتیب که با احتمال کوچکی به نام احتمال جهش هر ژن از کروموزوم ها را تغییر می دهد.
ز) کروموزوم فرزند: به دنباله اي که پس از عمل جابه جایی و عمل جهش به دست می آید کروموزوم فرزند می گویند.
ح) جایگذاري: پسازآنکه فرزندان جدید، با استفاده از جمعیت قدیمی ساخته شدند و میزان شایستگی آنها نیز تعیین گردید، می بایست یک نسل جدید از میان فرزندان و والدین موجود انتخاب شوند.
ط) عملگر انتخاب: براي ایجاد افراد نسل جدید، از عملگر انتخاب استفاده میشود. اولین قدم در این راه تعیین شایستگی تکتک افراد جمعیت هست.
ي) مرحله تولید: به هر بار تولید یک جمعیت جدید یک مرحله تولید گویند.
سورس کد الگوریتم ژنتیک واقعی در متلب
clc; clear; close all; %% Problem Definition CostFunction=@(x) Costfun(x); % Cost Function nVar=10; % Number of Decision Variables VarSize=[1 nVar]; % Decision Variables Matrix Size VarMin=-10; % Lower Bound of Variables VarMax= 10; % Upper Bound of Variables %% GA Parameters MaxIt=500; % Maximum Number of Iterations nPop=100; % Population Size pc=0.7; % Crossover Percentage nc=2*round(pc*nPop/2); % Number of Offsprings (also Parnets) gamma=0.4; % Extra Range Factor for Crossover pm=0.3; % Mutation Percentage nm=round(pm*nPop); % Number of Mutants mu=0.1; % Mutation Rate %% Main Loop for it=1:MaxIt % Calculate Selection Probabilities if UseRouletteWheelSelection P=exp(-beta*Costs/WorstCost); P=P/sum(P); end % Crossover popc=repmat(empty_individual,nc/2,2); for k=1:nc/2 % Select Parents Indices if UseRouletteWheelSelection i1=RouletteWheelSelection(P); i2=RouletteWheelSelection(P); end if UseTournamentSelection i1=TournamentSelection(pop,TournamentSize); i2=TournamentSelection(pop,TournamentSize); end if UseRandomSelection i1=randi([1 nPop]); i2=randi([1 nPop]); end % Select Parents p1=pop(i1); p2=pop(i2); % Apply Crossover [popc(k,1).Position, popc(k,2).Position]=Crossover(p1.Position,p2.Position,gamma,VarMin,VarMax); % Evaluate Offsprings popc(k,1).Cost=CostFunction(popc(k,1).Position); popc(k,2).Cost=CostFunction(popc(k,2).Position); end popc=popc(:); % Mutation popm=repmat(empty_individual,nm,1); for k=1:nm % Select Parent i=randi([1 nPop]); p=pop(i); % Apply Mutation popm(k).Position=Mutate(p.Position,mu,VarMin,VarMax); % Evaluate Mutant popm(k).Cost=CostFunction(popm(k).Position); end % Create Merged Population pop=[pop popc popm]; %#ok % Sort Population Costs=[pop.Cost]; [Costs, SortOrder]=sort(Costs); pop=pop(SortOrder); % Update Worst Cost WorstCost=max(WorstCost,pop(end).Cost); % Truncation pop=pop(1:nPop); Costs=Costs(1:nPop); % Store Best Solution Ever Found BestSol=pop(1); % Store Best Cost Ever Found BestCost(it)=BestSol.Cost; % Show Iteration Information disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]); end
برای دانلود سورس کد کامل الگوریتم ژنتیک واقعی محصول را خریداری کنید به محض خرید لینک دانلود در دسترس خواهد بود.
درباره محصول
سورس کد الگوریتم ژنتیک واقعی در Matlab 2017 نوشته و اجرا شده است این سورس کد توسط تیم پشتیبانی پی استور تست و اجرا شده است. کیفیت محصول توسط پی استور تضمین می شود و محصول دارای نشان تضمین کیفیت پی استور می باشد. برای دانلود محصول آن را خریداری فرمایید به محض خرید لینک دانلود در دسترس خواهد بود.
مباحث مرتبط با الگوریتم ژنتیک
تاکنون 256 نفر این محصول را تهیه کرده اند و 1 نظر برای آن ثبت شده است.
نظرات و دیدگاه ها
قوانین ثبت دیدگاه
- لطفاً دیدگاه های خود را فارسی تایپ کنید.
- دیدگاه های نامرتبط به مطلب تایید نخواهد شد.
- از درج دیدگاه های تکراری پرهیز نمایید.
- سوالات تخصصی خودتان را از طریق تیکت پشتیبانی مطرح کنید.
قیمت 29,000 تومان
تاریخ انتشار: | 13 بهمن 1397 |
---|---|
تاریخ بروزرسانی: | 10 خرداد 1398 |
حجم فایل: | 2.8 کیلوبایت |
فرمت فایل | m. در قالب متلب |
نسخه: | 1.0 |
شناسه اثر: | ندارد |
هماهنگی با: | Matlab 2017 و بالاتر |
1 بازخورد (مشاهده نظرات)
قیمت: 29,000 تومان
سینا ابراهیمی
ممنون از سایت خوبتون. من چطور می تونم این الگوریتم رو تو مسئله تعیین تعداد بهینه توربین ها استفاده کنم؟
مدیریت و پشتیبانی
با سلام
در استفاده از الگوریتم ژننیک برای مسائل بهینه سازی 2 مسئله مهم است.
1- نگاشت مسئله
2-تعیین تابع تناسب
در نگاشت مسئله باید ابتدا مسئله بصورت یک کروموزوم کد گذاری شود. چگونگی انجام این کار توسط شما باید ایجا بشه تابع Create Model در این سورس کد نحوه تبدیل مسئله به کروموزوم رو نشون میده. در تعیین تابع تناسب نیز باید مشخص کنید جوابی که مثلا یک کروموزوم میده با کروموزم دیگه چه ارزشی داره یا نحوه مقایسه دو جواب با تابع تناسب که CostFun هست انجام میشه.
بقیه کدها همون کدهای ژنتیک هستن و برای هر مسئله ای یکسان هست.