برنامه نویسی ژنتیکی

الگوریتم ژنتیک ویکی‌پدیا، دانشنامهٔ آزاد

الگوریتم‌های ژنتیک به جای اینکه به طور مستقیم با مقادیر پارامترهای مسأله سروکار داشته باشند، با نمایشی کدبندی شده از مجموعه پارامترهای مسأله کار می‌کنند و جمعیتی متشکل از نقاط در یک فضای جستجو را برای یافتن جواب‌های مسأله جستجو می‌کنند. همچنین، بدون اینکه از اطلاعات «گرادیان» (Gradient) مرتبط با «تابع هدف» (Objective Function) مسأله اطلاعی داشته باشند، تابع هدف مسأله را بهینه‌سازی می‌کنند. بدین ترتیب، گروه دیگری از مخاطبان دوره آموزش الگوریتم ژنتیک شامل مهندسان و مدیران است. معمولاً الگوریتم‌های ژنتیک یک عدد احتمال اتصال دارد که بین ۰٫۶ و ۱ است که احتمال به وجود آمدن فرزند را نشان می‌دهد. اتصال ۲ کروموزوم فرزند ایجاد می‌کند، که به نسل بعدی اضافه می‌شوند. این کارها انجام می‌شوند تا این که کاندیدهای مناسبی برای جواب، در نسل بعدی پیدا شوند.

بله، الگوریتم‌های ژنتیک به عنوان یک روش بهینه‌سازی، قابل استفاده در وظایف یادگیری ماشین هستند. آن‌ها می‌توانند برای بهبود و تنظیم پارامترها، انتخاب ویژگی‌ها، طراحی مدل‌ها و حل مسائل پیچیده در یادگیری ماشین استفاده شوند. به بیان دیگر با پایان این دوره آموزشی و فراگیری مفاهیم پایه و اصولی در الگوریتم ژنتیک، طراحی الگوریتم ژنتیک مناسب با مسئله و پیاده سازی آن به کمک زبان برنامه نویسی پایتون مهارت اصلی شما خواهد بود. هوش مصنوعی می‌تواند برای بهینه‌سازی فرا پارامترهای الگوریتم‌های یادگیری ماشین یا شبکه‌های عصبی استفاده شود. انتخاب والدین بر اساس تابع تناسب مناسب یکی از محبوب‌ترین روش های انتخاب والدین است. در این حالت هر فردی با احتمالی متناسب با تابع تناسب خود می‌تواند پدر و مادر شود.

از آنجایی که عملیات جستجو از مجموعه‌ای از جواب‌ها (جواب‌های اولیه به طور تصادفی در فضای جواب پراکنده شده‌اند) در فضای جواب مسأله آغاز می‌شود، جستجوی قدرتمند و بدون بایاس در الگوریتم ژنتیک تضمین خواهد شد. در مرحله بعد، تمامی جواب‌های اولیه تولید شده مورد ارزیابی قرار می‌گیرند تا مقدار تابع هدف هر کدام از آن‌ها مشخص شود. الگوریتم ژنتیک، با وجود چالش‌ها و محدودیت‌هایی که دارد، یک ابزار قدرتمند و مؤثر برای حل مسئله‌های بهینه‌سازی پیچیده است. در این مقاله مفاهیم کلیدی مانند ژنوم، کروموزوم‌ها، تابع هدف و برازش، جهش، تلاقی و انتخاب را به‌دقت بررسی و الگوریتم ژنتیک را با استفاده از زبان برنامه‌نویسی پایتون پیاده‌سازی کردیم. سپس با استفاده از آن، مسئله معروف کوله‌پشتی ۰ و ۱ را نیز حل کردیم.

در هر بار چرخش این چرخ، هر نمونه‌ای که توسط نشانه‌گر چرخ نشان داده شود، برای قرار گرفتن در مخزن Mating Pool انتخاب می‌شود. برای شروع، زبان‌های ساده و پرکاربرد مثل Python یا JavaScript گزینه‌های خوبی هستند. اگر به توسعه وب علاقه دارید، تکنولوژی هایی مثل HTML، CSS، و JavaScript شروع خوبی است. اگر به تحلیل داده‌ها و هوش مصنوعی علاقه‌مندید، Python می‌تواند بهترین گزینه باشد. قبل از شروع، مشخص کنید چرا می‌خواهید برنامه‌نویسی یاد بگیرید و به چه چیزی می‌خواهید برسید.

در یک الگوریتم جستجو، تعدادی از راه حل‌های ممکن از یک مسئله در اختیار بوده و هدف یافتن بهترین راه حل ممکن در زمان محدود می باشد. تفاوت اصلی الگوریتم‌های تکاملی نسبت به الگوریتم‌های دیگر این است که این الگوریتم‌ها مبتنی بر جمعیت عمل می نمایند. در این الگوریتم ها، معمولا یک جمعیت اولیه ایجاد و سپس تکامل داده می شود. با گذشت زمان، الگوریتم ژنتیک روی یک راه حل تقریباً بهینه همگرا می‌شود. نه، یکی از مزایای الگوریتم‌های ژنتیک این است که نیاز به دانش دقیق دامنه ندارند.

اگر تنها از عملگر جهش در الگوریتم ژنتیک استفاده شود، الگوریتم بسیار کند می‌شود. استفاده از عملگر ترکیب، سبب سرعت بخشیدن به فرایند همگرایی در الگوریتم ژنتیک خواهد شد. عملیات ترکیب در سطح رشته انجام می‌شود و پس از انتخاب دو رشته یا کروموزوم والد، ژن‌های آن‌ها با یکدیگر مبادله می‌شوند تا کروموزوم‌های فرزند جدید شکل بگیرد. در عملگر ترکیب تک نقطه‌ای، یک ژن به شکل تصادفی، در امتداد یکی از دو رشته یا کروموزوم والد، به عنوان «محل ترکیب» (Crossover Site) در عملیات ترکیب انتخاب می‌شود. سپس، تمامی ژن‌های موجود در سمت راست محل ترکیب رشته اول، با ژن‌های متناظر آن‌ها در کروموزوم یا رشته دوم جا به جا می‌شوند. چگونگی انجام عمل ترکیب تک نقطه‌ای روی کروموزوم‌های والد (توسط عملگر متناظر آن در الگوریتم ژنتیک)، در شکل زیر نمایش داده شده است.

بنابراین، افراد دارای امتیاز بیشتر، شانس بیشتری برای جفت گیری و انتشار ویژگی‌های خود به نسل بعدی دارند؛ بنابراین، چنین استراتژی انتخابی، فشار انتخابی را به افراد متناسب‌تر در جمعیت اعمال می‌کند و در طول زمان افراد بهتری را تکامل می‌دهد. در آینده، ممکن است شاهد توسعه الگوریتم‌های تکاملی باشید که برای حل مسائل خاص مورد استفاده قرار بگیرند. این امر، نقض اصول پیاده‌سازی الگوریتم ژنتیک است که با هدف استفاده همه منظوره و بدون در نظر گرفتن دامنه مسائل قابل حل، توسعه داده شده‌اند. در صورتی که بتوانید جواب‌های کاندید یک مسأله را در قالب کروموزوم‌ها کدبندی کنید، به راحتی خواهید توانست از الگوریتم ژنتیک برای حل مسأله و مقایسه عملکرد (برازندگی) نسبی جواب‌های بهینه حاصل شده استفاده کنید. نمایش دقیق و مؤثر از متغیرهای مسأله و پیاده‌سازی ساز و کارهای با معنی برای ارزیابی برازندگی جواب‌های کاندید، مهم‌ترین عوامل در موفقیت در کاربردهای تولید شده از الگوریتم ژنتیک است. به عبارت دیگر، دو کپی از این رشته یا کروموزوم در جمعیت نسل بعد حضور خواهد داشت.

عضویت در انجمن‌ها و گروه‌های برنامه‌نویسی می‌تواند به شما کمک کند نگاه عمیق‌تری به دنیای برنامه‌نویسی پیدا کنید. در این جوامع می‌توانید از تجربیات دیگران استفاده کنید و بفهمید آیا فرهنگ و فضای کاری برنامه‌نویسان برای شما جذاب است یا نه. ✅ اگر حداقل ۴ یا ۵ مورد از این ویژگی‌ها را در خودتان می‌بینید، احتمال زیادی وجود دارد که برنامه‌نویسی برای شما مناسب باشد. اما اگر تعداد ویژگی‌های مشترک شما با نکات ذکر شده کمتر از ۳ مورد است، باید برای فهمیدن جواب این سوال که  آیا واقعاً برنامه‌نویسی مناسب شماست؟ در ادامه مقاله با ما همراه شوید تا نکات دیگری را نیز بررسی کنیم. اگر آدمی هستید که سریع ناامید می‌شوید یا حوصله زیادی برای بررسی دقیق جزئیات ندارید، شاید کار در زمینه برنامه‌‌نویسی برای شما چالش‌برانگیز باشد. اما اگر از تلاش و پیشرفت لذت می‌برید، این ویژگی به شما کمک می‌کند تا به یک برنامه‌نویس موفق تبدیل شوید.

الگوریتم‌های ژنتیک پدیده آمده‌اند تا برخی از فرایندهای مشاهده شده در «تکامل طبیعی» (Natural Evolution) را از طریق الگوریتم‌های کامپیوتری شبیه‌سازی کنند. فرایندهایی که بر اساس انجام عملیات روی کروموزوم‌ها (سیستم‌های ارگانیک جهت کدبندی کردن ساختار ژنتیکی موجودات زنده) شکل گرفته‌اند. در بسیاری از موارد، از الگوریتم‌های ژنتیک به عنوان الگوریتم‌های «بهینه‌ساز تابع» (Function Optimizer) یاد می‌شود؛ یعنی، الگوریتم‌هایی که برای بهینه‌سازی «توابع هدف» (Objective Functions) مسائل مختلف به کار می‌روند. البته، گستره کاربردهایی که از الگوریتم ژنتیک، برای حل مسئله در دامنه کاربردی خود استفاده می‌کنند، بسیار وسیع است. رویه انتخاب برای رقابت افراد در داخل جمعیت به کار می رود که بر اساس یک تابع شایستگی عمل می‌نماید. برای هر کروموزوم، یک مقدار مرتبط با شایستگی راه حل که نمایش می دهد، وجود دارد.

در محاسبات کامپیوتری، بر اساس این نظریه داروین روش‌هایی برای مسائل بهینه‌سازی مطرح شدند که همه این روش‌ها از پردازش تکاملی در طبیعت نشات گرفته‌اند. این منحنی دارای دو نقطه ماکزیمم می‌باشد؛ که یکی از آن‌ها تنها ماکزیمم محلی است. حال اگر از روش‌های بهینه‌سازی ریاضی استفاده کنیم مجبوریم تا در یک بازه بسیار کوچک مقدار ماکزیمم تابع را بیابیم؛ مثلاً از نقطه ۱ شروع کنیم و تابع را ماکزیمم کنیم. بدیهی است اگر از نقطه ۱ شروع کنیم تنها به مقدار ماکزیمم محلی دست خواهیم یافت و الگوریتم ما پس از آن متوقف خواهد شد. با ترکیب این مکانیسم‌های الهام گرفته از تکامل طبیعی، الگوریتم‌های ژنتیک می‌توانند به طور مؤثر فضاهای حل پیچیده را جستجو و بهینه کرده و امکان کشف راه‌حل‌های بهینه یا نزدیک به بهینه را برای طیف وسیعی از مسائل فراهم کنند.

البته تعداد این‌گونه ژن‌ها بسیار کم می‌باشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است؛ مثلاً ژن رنگ چشم می‌تواند به صورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد. علاوه بر «جهش» اتفاق دیگری که می‌افتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به «جهش» رخ می‌دهد چسبیدن دو کروموزوم از طول به یکدیگر و تبادل برخی قطعات بین دو کروموزوم است. این همان چیزیست که باعث می‌شود تا فرزندان ترکیب ژن‌های متفاوتی را (نسبت به والدین خود) به فرزندان خود انتقال دهند. هوش مصنوعی در مهندسی ژنتیک در توسعه وسایل نقلیه خودران برای بهینه‌سازی برنامه‌ریزی مسیر، کنترل وسیله نقلیه و همجوشی حسگرها استفاده می‌شوند. الگوریتم‌های تکاملی را می‌توان برای تکامل رفتارهای رانندگی و انطباق با شرایط مختلف رانندگی به کار گرفت.

البته در صورتی که تابع هدف به صورت حداقل سازی یک تابع هدف باشد، به هنگام کردن الگوریتم برای حداقل سازی کاری ساده ای است. هر تابع هزینه به راحتی قابل تبدیل به یک تابع شایستگی است مثلا با معکوس کردن تابع هزینه، می توانی یک تابع شایستگی متناسب آن ساخت. یک الگوریتم قطعی، یک مسئله بهینه سازی را از طریق تصمیم گیری قطعی حل می نماید(برای مثال الگوریتم جستجوی محلی و جستجوی ممنوع). در الگوریتم‌های فراابتکاری احتمالی، بعضی از قواعد احتمالی در فرایند جستجو مورد استفاده قرار می‌گیرد که می توان به الگوریتم انجماد تدریجی و الگوریتم ژنتیک اشاره کرد. در الگوریتم‌های قطعی، با داشتن یک راه حل اولیه و اجراهای متفاوت، تنها یک جواب نهایی بدست می‌آید و در حالی که در الگوریتم‌های تصادفی، با داشتن یک راه حل اولیه و اجرا‌های متفاوت، ممکن است که جواب‌های نهایی متفاوتی بدست آید.

آیا حس می‌کنید که از نوشتن کدها و دیدن نتیجه آن لذت می‌برید؟ یا اینکه احساس خستگی و سردرگمی می‌کنید؟ لذت بردن از فرآیند یادگیری یکی از نشانه‌های اصلی این است که برنامه‌ نویسی برای شما جذاب است. اگر عاشق گشت‌ و گذار در دنیای نرم‌افزارها، ابزارهای دیجیتال و فناوری‌های جدید هستید، این علاقه می‌تواند انگیزه شما برای پیشرفت در دنیای برنامه‌نویسی را افزایش دهد. کسانی‌که تکنولوژی را به چشم یک چالش جذاب می‌بینند، معمولا در این حرفه بهتر از دیگران عمل می‌کنند. شما باید راه‌حل‌هایی خلاقانه برای مشکلات پیدا کنید و گاهی رویکردهایی را در پیش بگیرید که دیگران به آن فکر نکرده‌اند. اگر برای مسائل روزمره زندگی خود خلاقیت زیادی به خرج می‌دهید و توانایی دیدن زوایای متفاوت را دارید، این یک امتیاز مثبت برای شما است.

بنابراین، در ادامه این مطلب، از عملگر ترکیب دو نقطه‌ای، به عنوان عملگر پیش‌فرض برای انجام عملیات ترکیب استفاده می‌شود. در این مرحله، معمولا یک «تابع جریمه خارجی» (Exterior Penalty Function) به کار گرفته می‌شود تا «مسأله بهینه‌سازی مقید» (Constrained Optimization Problem) به یک مسأله بهینه‌سازی «نامقید» (Unconstrained) تبدیل شود. چنین تبدیلی، بسته به مسائل بهینه‌سازی مختلف (مسائلی که قرار است جواب‌های بهینه آن‌ها تولید شود)، متفاوت خواهد بود. دلیل نام‌گزاری این نوع از برنامه‌نویسی ژنتیک، خطی بودن اجرای برنامه‌ها در آن است. توجه کنید که برنامه‌نویسی ژنتیک خطی با درخت خطی در برنامه‌نویسی ژنتیک درختی متفاوت است. با پیشرفت فناوری اطلاعات، دسترسی به منابع محاسباتی قدرتمندتر و افزایش قابلیت‌های ذخیره‌سازی داده‌ها، الگوریتم‌ ژنتیک قادر به حل مسائل بزرگ‌تر و پیچیده‌تر با دقت بالاتر شده‌ است.

روش‌های مختلفی برای الگوریتم‌های ژنتیک وجود دارند که می‌توان برای انتخاب ژنوم‌ها از آن‌ها استفاده کرد. الگوریتم ژنتیک قابلیت ترکیب با بیشتر الگوریتم های هوش مصنوعی را دارد و برای اهداف مختلفی از آن می‌توان استفاده کرد. متقاطع یا کراس اوورهای بسیار دیگری مانند Partially Mapped Crossover (PMX)، Order based crossover (OX2)، کراس اوور شافل، کراس اوور حلقه و غیره وجود دارد. در این مسئله، فروشنده باید در تمام شهرها گشت بزند و دقیقاً یک بار از هر شهر بازدید کند و به شهر شروع بازگردد و مسافت کل تور باید به حداقل برسد. راه حل TSP طبیعتاً ترتیب یا جایگشت همه شهرها است و بنابراین استفاده از نمایش جایگشت برای این مسئله منطقی است. مجموعه‌ای از تمام راه حل‌ها یا مقادیر ممکن که ورودی‌ها می‌توانند بگیرند فضای جستجو «Search Space» را تشکیل می‌دهند.

گونه‌های متکامل‌تری وجود دارند که نمی‌توان گفت صرفاً حاصل تکامل تدریجی گونه قبلی هستند. در بخش تحقیق و پژوهش نیز موضوعات و مباحث مهم علوم کامپیوتر و شبکه، محاسبات و الگوریتم، طراحی و برنامه نویسی وب در قالب مستندات، داکیومنت و ترجمه ارائه می‌شود و بخش آموزش‌های اصلی و رایگان ما در مجله پی استور است. مجموعه آموزشی پی استور، یکی از قدیمی‌ترین وب سایت‌های آموزشی ایران است که بیش از یک دهه از فعالیت آن سپری می‌ شود. فعالیت این مجموعه، در قالب ارائه دوره‌های آموزشی، فیلم آموزش، سورس کد و پاورپوینت آماده به عنوان ابزارهای آموزشی و کمک آموزشی می‌باشد. به عنوان مثال، در تصویر زیر، فرزندان جدید، جایگزین اعضای P1 و P10 از جمعیت می‌شوند که دارای شایستگی کم‌تری هستند.

کل فرایند برای نسل بعدی هم تکرار می‌شود، جفت‌ها برای ترکیب انتخاب می‌شوند، جمعیت نسل سوم به وجود می‌آیند و …این فرایند تکرار می‌شود تا این که به آخرین مرحله برسیم. کروموزوم را به عنوان ظرفی در نظر بگیرید که راه حل بالقوه ای برای مشکل در دست دارد. هر کروموزوم متشکل از ژن هایی است که جنبه های مختلف محلول را نشان می دهند. در زمینه بهینه سازی، یک ژن ممکن است یک پارامتر یا مقداری را نشان دهد که به حل نهایی کمک می کند. به عنوان مثال، اگر توزیع نقش های وزیر را در بین هشت فرد بهینه کنیم، هر ژن می تواند نقشی را که به وزیر خاصی اختصاص داده شده است، نشان دهد. رویداد دوم، که بیشتر از جهش رخ می‌دهد، «تقاطع | crossover» نامیده می‌شود.

این پیشرفت‌ها امکان پیاده‌سازی الگوریتم‌های پیچیده‌تر و کاربرد آن‌ها در مقیاس‌های وسیع‌تر را فراهم کرده است. به‌طور کلی، الگوریتم ژنتیک در پایتون به‌عنوان یک روش بهینه‌سازی مؤثر توانسته است در عرصه‌های متفاوتی ازجمله علم داده، مهندسی و برنامه‌نویسی نتایج چشمگیری را ارائه کند و به‌صورت مداوم در حال توسعه و بهبود است. این انتخاب به صورت تصادفی، با استفاده از یک احتمال متناسب با تابع برازندگی افراد انجام می گردد. بنابراین، همواره بهترین فرد شانس بیشتری برای انتخاب نسبت به فرد ضعیف تر دارد. جان هالند در سال ۱۹۷۵ اولین کتاب در مورد الگوریتم های ژنتیک را با عنوان انطباق در سیستم های طبیعی و مصنوعی نوشت.

در ادامه چند کاربرد هوش مصنوعی در الگوریتم‌های ژنتیک آورده شده است. اولین رویداد به عنوان «جهش | mutation» شناخته می‌شود، که در آن ژن‌های خاصی دستخوش تغییرات تصادفی می‌شوند. اگرچه تعداد ژن‌های جهش‌یافته معمولاً کم است، اما این تغییرات تصادفی نقش مهمی دارند. به عنوان مثال، ژن مسئول رنگ چشم می‌تواند به طور تصادفی منجر به این شود که فردی در نسل بعدی چشمان سبز داشته باشد، درحالی‌که نسل قبلی عمدتاً دارای چشمان قهوه‌ای بود. در بخش فیلم و دوره آموزشی به مباحث مختلفی ازجمله آموزش برنامه‌نویسی، الگوریتم بهینه‌سازی (الگوریتم ژنتیک، الگوریتم PSO، الگوریتم گرگ خاکستری، الگوریتم MFO و سایر موارد)، آموزش شبکه، صنایع غذایی و آموزش‌های پایه پرداخته می‌شود.

جهش برای حفظ و معرفی تنوع در جمعیت استفاده می شود و معمولاً با احتمال  pm  کم استفاده می‌شود. اگر احتمال بسیار زیاد باشد، الگوریتم ژنتیک به یک الگوریتم جستجوی تصادفی تبدیل می‌شود. با این حال، باید مراقب بود که در چند نسل از یک راه حل بسیار مناسب برای انتخاب والدین جلوگیری شود، زیرا این امر منجر به نزدیکی راه حل‌ها به یکدیگر در فضای جستجو می‌شود و در نتیجه منجر به از دست دادن تنوع «Variety» می‌شود. حفظ تنوع خوب در جمعیت برای موفقیت در الگوریتم ژنتیک بسیار مهم است. قبل از شروع بحث در مورد الگوریتم ژنتیک، ضروری است که با برخی از اصطلاحات اولیه که در طول آموزش الگوریتم ژنتیک استفاده می‌شود، آشنا باشید.

زیرا آن‌ها به طور تصادفی و تکاملی در فضای جواب حرکت می‌کنند و با تجمیع اطلاعات از جمعیت، به جواب‌های بهینه نزدیک‌تر می‌شوند. محاسبات نرم از محاسبات تقریبی برای حل مسائل استفاده می‌کند که نتیجه آن راه‌حل‌های خوب برای حل مسائل پیچیده محاسباتی می‌باشد. الگوریتم‌های تکاملی نوعی از محاسبات نرم می‌باشد که با نگرش به چرخه تکامل طبیعت، راه‌حل مسائل مهندسی و بهینه‌سازی را می‌یابند. جهانی که در آن زیست می‌کنیم گویی توسط یک برنامه کامپیوتری بی نظیر هدایت می‌شود. برنامه ای که میلیاردها سال پیش توسط پروردگار مقتدر و بی‌همتای ما طرح ریزی شده است.

اما اگر طول رشته به 5 افزایش پیدا کند، دقت قابل استحصال توسط کدبندی پنج بیتی، تقریبا برابر با یک سی و دوم (1/32) فضای جستجوی مسأله خواهد شد. همانطور که الفبا، واحدهای سازنده یک «زبان» (Language) را تعریف می‌کند، ترکیب با معنی از کروموزوم‌ها (و پایه‌های آن‌ها)، دستورالعمل‌های خاصی را برای سلول‌ها تولید می‌کند. کروموزوم‌های «والدین» (Parents) از طریق فرایند خاصی به نام «ترکیب یا آمیزش» (Crossover)، به طور تصادفی با یکدیگر مبادله می‌شوند. بنابراین، فرزندان برخی از ویژگی‌ها یا خصیصه‌های پدر و برخی از ویژگی یا خصیصه‌های مادر را به ارث می‌برند و از خود به نمایش می‌گذارند. مسیرهای دیگری مثل نویسندگی، آموزش یا هنرهای دیجیتال را نیز امتحان کنید و از تجربیات خود، مثل تقویت تفکر منطقی و حل مسئله، در انتخاب‌های جدید بهره بگیرید.

این عمل بر این فرض استوار است که هر عضو برای یک نسل محدود در جمعیت مجاز است که در آن اجازه تولید مثل داشته باشد، پس از آن هر چقدر هم که شایستگی‌اش هم خوب باشد، از جمعیت بیرون می‌رود. واضح است که یک عضو مناسب، قسمت بیشتری روی چرخ دارد و بنابراین هنگام چرخاندن چرخ، شانس بیشتری برای فرود آمدن در مقابل نقطه ثابت «Fixed Point» دارد. بنابراین، احتمال انتخاب یک عضو مستقیماً به تابع تناسب آن بستگی دارد. در برخی موارد، محاسبه تابع تناسب به طور مستقیم ممکن است به دلیل پیچیدگی‌های ذاتی مسئله در دست امکان پذیر نباشد. در چنین مواردی، متناسب با نیازهای خود، تقریبی از تابع تناسب را انجام می‌دهیم. جمعیت معمولاً به عنوان یک آرایه دو بعدی از اندازه جمعیت و اندازه کروموزوم تعریف می‌شود.

اگر احساس می‌کنید این چالش‌ها برایتان هیجان‌انگیز هستند و دوست دارید به نتیجه برسید، احتمالا برنامه‌نویسی شغل مناسبی برای شماست. اما اگر از این چالش‌ها خسته می‌شوید و کار را نیمه تمام رها می‌کنید، شاید نیاز باشد بیشتر درباره مسیرتان فکر کنید. این خروجی نشان‌دهنده کارایی بالای الگوریتم‌ ژنتیک در یافتن راه‌حل‌های بهینه برای مسائل پیچیده، مانند مسئله کوله‌پشتی، است که در آن تعادل میان وزن و ارزش اشیا بسیار مهم است. کتابخانه random برای تولید اعداد تصادفی و انجام‌دادن انتخاب‌های تصادفی استفاده می‌شود که برای طبیعت احتمالی الگوریتم‌های ژنتیکی ضروری است. تابع هدف که گاهی به‌عنوان تابع برازش شناخته می‌شود برای ارزیابی هر کروموزوم به کار می‌رود. این تابع میزان موفقیت هر راه‌حل را در حل مسئله مدنظر ارزیابی می‌کند.

با کمی دقت در این الگوریتم میتوان دید که طبیعت با استفاده از یک روش ساده گونه های نا مناسب را به تدریج حذف و در مقابل گونه های مناسب و بهینه را بیشتر تکثیر میکند و دائما هر نسل را از لحاظ خصوصیت های مختلف ارتقا میبخشد. در این بخش می‌خواهیم درستی پاسخ به‌دست‌آمده از روش الگوریتم‌ ژنتیک را با یک قطعه کد بررسی کنیم. همان‌طور که قبلا گفتیم، هر فرد با فهرست از ژن‌ها تعریف می‌شود که در این مسئله نشان‌دهنده انتخاب‌شدن یا انتخاب‌نشدن هر یک از اشیاست. همان‌طور که در شکل می‌بینید، به‌طور کلی، میزان برازندگی (خروجی تابع برازندگی) نسل‌های جدیدتر بیشتر از نسل‌های قدیمی است. میزان خوب‌بودن داشتن تعداد یک‌های بیش‌تر است؛ به‌همین دلیل، از تابع مجموع‌گیری (sum) روی بیت‌های هر فرد استفاده شده است. اگر تعداد متغیرهای تصمیم را از 10 به 100 افزایش دهیم، نمودار فراخوانی تابع هدف به شکل زیر درمی‌آید.

الگوریتم ژنتیک (Genetic Algorithm یا GA) یک الگوریتم از خانواده الگوریتم‌های تکاملی (Evolutionary Algorithms یا EA) است. این الگوریتم با الهام گرفتن از روند تکامل ژن برای افزایش شانس زیستن موجودات طراحی شده است. ویژگی‌های فیزیکی موجودات توسط ماده ژنتیک که DNA (Deoxyribonucleic Acid) نام دارد تنظیم می‌شود. DNA شامل تعداد زیادی ژن (Gene) است که هرکدام کنترل یک فرآیند را بر عهده دارد. ژن‌ها در طول زمان در نتیجه انتخاب طبیعی (Natural Selection) تغییر یافته و بهینه می‌شوند.

امروزه با پیشرفت تکنولوژی و دسترسی آسان به منابع محاسباتی قدرتمند، الگوریتم‌های ژنتیک در حال پیشرفت و کاربرد گسترده‌تری هستند. در ادامه الگوریتم ژنتیک که الگوریتمی است که از طبیعت الهام گرفته است و در رده الگوریتم‌های احتمالی، و تکراری با حافظه قرار می‌گیرد صحبت می‌شود. سپس الگوریتم ژنتیک این فرآیند را برای تعداد ثابتی از نسل‌ها یا تا زمانی که راه‌حل رضایت بخشی پیدا شود تکرار می‌کند. می‌توان مشاهده کرد که الگوریتم با 4200 بار فراخوانی تابع هدف، توانسته به خوبی به عدد 82 برسد. توجه داشته باشید که در این شرایط بیشترین مقدار ممکن برای تابع هدف برابر با 100 است. برای جهش یک عدد از این بازه انتخاب و به مقدار قبلی ژن اضافه می‌شود.

هم‌افزایی بین هوش مصنوعی و ژنتیک به پیشرفت در حوزه‌های مختلف ادامه می‌دهد و فرآیندهای بهینه‌سازی و تصمیم‌گیری را بهبود می‌بخشد. الگوریتم‌های ژنتیک اغلب برای حل مسائل بهینه‌سازی استفاده می‌شوند، مانند یافتن بهترین پارامترها برای مدل‌های یادگیری ماشین، بهینه‌سازی تخصیص منابع در لجستیک و تنظیم سیستم‌های پیچیده. هوش مصنوعی می‌تواند GA را با ارائه راه‌های هوشمندتر و کارآمدتر برای انتخاب، جهش و ترکیب مجدد افراد در جمعیت تقویت کند. سه عملگر معرفی شده برای انجام عملیات تولید مثل (انتخاب)، ترکیب و جهش، عملگرهای ساده و سر راستی هستند. عملگر جهش، ژن‌های کروموزوم‌ها را به شکل محلی تغییر می‌دهد و از این طریق، منجر به ایجاد جواب‌ها یا رشته‌ها یا کروموزوم‌های بهتر می‌شود. از دیدگاه زیست‌شناسی، برازندگی یک «مقدار کیفی» (Qualitative Value) است که بازده تولیدِ مثل کروموزوم‌ها را می‌سنجد.

چنین ویژگی مهمی در الگوریتم‌های ژنتیک، آن‌ها را تبدیل به الگوریتم‌های جستجوی «همه منظوره» (General purpose) کرده است. همچنین، از الگوریتم‌های ژنتیک برای جستجوی فضاهای جستجوی نامنظم و بی‌قاعده استفاده می‌شود. به طور کلی، از الگوریتم‌های ژنتیک برای حل مسأله در کاربردهایی نظیر بهینه‌سازی توابع، «تخمین پارامتر» (Parameter Estimation) و «یادگیری ماشین» (Machine Learning) استفاده می‌شود. الگوریتم‌ ژنتیک (Genetic Algorithm) یک رویکرد بهینه‌سازی و جست‌وجوی احتمالی است که از فرایندهای طبیعی تکامل بیولوژیکی الهام گرفته است. این الگوریتم‌ توانایی یافتن پاسخ‌های نزدیک به بهینه در مسائل پیچیده‌ای را دارد که شاید با روش‌های سنتی حل‌شدنی نباشند.

جمعیت اولیه نباید با استفاده از یک روش اکتشافی مقداردهی اولیه شود، زیرا این کار می‌تواند منجر به ایجاد راه‌حل های مشابه و تنوع بسیار کم در جمعیت شود. به طور تجربی مشاهده شده است که راه حل‌های تصادفی آن‌هایی هستند که جامعه را به سمت بهینه‌گی سوق می‌دهند. بنابراین، با مقدار دهی اولیه اکتشافی، ما فقط جمعیت را با چند راه حل خوب می‌بینیم، به جای پر کردن کل جمعیت با راه حل‌های مبتنی بر اکتشاف، بقیه را با راه حل‌های تصادفی پر می‌کنیم. برای برخی از مسائل زمانی که فضای راه‌حل متشکل از متغیرهای تصمیم بولی است (بله یا خیر)، نمایش باینری طبیعی است. اگر n مورد وجود داشته باشد، می‌توانیم یک راه حل را با یک رشته باینری از n عنصر نشان دهیم، جایی که عنصر X می گوید که آیا آیتم X انتخاب شده (۱) یا نه (۰). روش‌های سنتی مبتنی بر حساب دیفرانسیل و انتگرال با شروع از یک نقطه تصادفی و با حرکت در جهت گرادیان تا رسیدن به بالای تپه کار می‌کنند.

الگوریتم‌های ژنتیک یک احتمال تغییر کوچک و ثابت دارند که معمولاً درجه‌ای در حدود ۰٫۰۱ یا کمتر دارد. بر اساس این احتمال، کروموزوم‌های فرزند به‌طور تصادفی تغییر می‌کنند یا جهش می‌یابند، مخصوصاً با جهش بیت‌ها در کروموزوم ساختمان داده‌مان. در الگوریتم‌های ژنتیک ابتدا به‌طور تصادفی یا الگوریتمیک، چندین جواب برای مسئله تولید می‌کنیم. سپس با استفاده از عملگرهای الگوریتم ژنتیک پس از انتخاب کروموزوم‌های بهتر، کروموزوم‌ها را باهم ترکیب کرده و جهشی در آن‌ها ایجاد می‌کنیم. در نهایت نیز جمعیت فعلی را با جمعیت جدیدی که از ترکیب و جهش در کروموزوم‌ها حاصل می‌شود، ترکیب می‌کنیم. در نتیجه، الگوریتم ژنتیک ابزار قدرتمندی برای حل مسائل بهینه سازی است.

این متد با نام Maximize شناخته خواهد شد و در ورودی تابع برازندگی، حد پایین متغیرهای تصمیم، حد بالای متغیرهای تصمیم و سایر آرگومان‌های ورودی تابع برازندگی را دریافت خواهد کرد. الگوریتم های ژنتیک (GA) الگوریتم های جستجوگر مبتنی بر مفاهیم انتخاب طبیعی و ژنتیک هستند. GA زیرمجموعه ای از شاخه محاسبات بسیار بزرگتر است که به عنوان محاسبات تکاملی شناخته می شود. با این وجود می‌توانند درخت‌های بیان با اندازه‌های متفاوت را کدگذاری کنند. این بدان معناست که ناحیه‌های کدگذاری در بین ژن‌ها متفاوتند که به انطباق و تکامل یافتن ژن‌ها کمک می‌کند. الگوریتم‌های تکاملی نوعی از محاسبات نرم می‌باشد که با نگرش به چرخه تکامل طبیعت، ...

سایر جزئیات مهم احتمال ترکیب، احتمال جهش، اندازه جمعیت و تعداد تکرارها هستند. این مقادیر را می توان پس از ارزیابی عملکرد الگوریتم در چند دوره آزمایشی تنظیم کرد. الگوریتم های ژنتیک در کاربردهای مختلفی مورد استفاده قرار می گیرند. برخی از نمونه های برجسته برنامه نویسی خودکار و یادگیری ماشین هستند. آنها همچنین برای مدل‌سازی پدیده‌های اقتصاد، اکولوژی، سیستم ایمنی انسان، ژنتیک جمعیت و سیستم‌های اجتماعی مناسب هستند.

با استفاده از تولباکس ژنتیک، نه تنها صرفه‌جویی در زمان انجام مراحل مختلف الگوریتم ژنتیک خواهید داشت، بلکه از امکانات و قابلیت‌های آن برای انجام بهینه‌تر و سفارشی‌تر فرآیند الگوریتم ژنتیک نیز بهره‌مند خواهید شد. گاهی اوقات ژن‌ها براثر یک‌سری از عوامل و شرایط دچار جهش می‌شوند و ژن‌های جدیدی وارد جهان می‌شوند. مثلاً فرض کنید گونه خاصی از افراد، هوش بیشتری از بقیه افرادِ یک جامعه یا کولونی دارند. حال اگر این خصوصیت (هوش) ارثی باشد بالطبع در نسل بعدی همان جامعه تعداد افراد باهوش به دلیل زاد و ولد بیشترِ این‌گونه افراد، بیشتر خواهد بود. اگر همین روند را ادامه دهید خواهید دید که در طی نسل‌های متوالی دائماً جامعه نمونه ما باهوش و باهوش‌تر می‌شود. بدین ترتیب یک مکانیزم ساده طبیعی توانسته‌است در طی چند نسل عملاً افراد کم هوش را از جامعه حذف کند علاوه بر اینکه میزان هوش متوسط جامعه نیز دائماً در حال افزایش است.


برنامه نویسی زبان اسمبلی