الگوریتم ژنتیک چیست؟

فهرست مطالب
Toggleتعریف الگوریتم ژنتیک
الگوریتم ژنتیک (Genetic Algorithm یا GA) یکی از روشهای بهینهسازی و جستجوی هوشمند در حوزه آموزش هوش مصنوعی است که با الهام از نظریه تکامل طبیعی چارلز داروین طراحی شده. این الگوریتم بهجای بررسی تکتک جوابهای ممکن برای یک مسئله (که گاهی غیرممکن یا بسیار زمانبر است)، با شبیهسازی فرایند تکامل زیستی، بهصورت هوشمندانه به سمت بهترین یا نزدیکترین جواب حرکت میکند.
تصور کنید بخواهید بهترین مسیر برای بازدید از 50 شهر را پیدا کنید. بررسی همه مسیرهای ممکن به معنای محاسبه میلیاردها حالت است که حتی برای کامپیوترهای پیشرفته هم زمانبره. الگوریتم ژنتیک مثل یک راهنمای هوشمند عمل میکند: با آزمونوخطای هدفمند، بهمرور جوابهای بهتری تولید میکند تا به نتیجهای نزدیک به بهینه برسد.
این الگوریتم در دسته الگوریتمهای تکاملی قرار میگیرد و بهخاطر انعطافپذیری و توانایی حل مسائل پیچیده، در حوزههای مختلفی مثل یادگیری ماشین، مهندسی، پزشکی، و حتی بازیسازی کاربرد دارد.

چرا به آن «ژنتیک» میگویند؟
اسم «ژنتیک» به این دلیل انتخاب شده که این الگوریتم از مفاهیم زیستشناسی و تکامل الهام گرفته:
- جمعیت (Population): مجموعهای از جوابهای ممکن که مثل گروهی از موجودات زنده هستند.
- ژنها (Genes): هر جواب از بخشهای کوچکتری تشکیل شده (مثل حروف، اعداد، یا ویژگیها).
- انتخاب طبیعی (Natural Selection): جوابهای بهتر (با کیفیت بالاتر) شانس بیشتری برای ادامه دارند.
- ترکیب (Crossover): ترکیب دو جواب برای تولید جواب جدید، مثل ترکیب ژنهای والدین در تولید فرزند.
- جهش (Mutation): تغییرات تصادفی کوچک که تنوع ایجاد میکنند و از گیر افتادن در جوابهای تکراری جلوگیری میکنند.
این فرایند شبیه تکامل موجودات زنده است: نسل به نسل، موجودات (یا جوابها) قویتر و سازگارتر میشوند. الگوریتم ژنتیک با تقلید از این مکانیسم، مسائل پیچیده را حل میکند.
🎓 اگر به الگوریتمهای الهامگرفته از طبیعت علاقهمندید، دوره آموزش یادگیری ماشین در ایرانپای به شما کمک میکند تا با مفاهیم پیشرفتهتر هوش مصنوعی آشنا شوید.
مراحل الگوریتم ژنتیک (گامبهگام)
برای درک بهتر، فرض کنید میخواهیم کلمه HELLO را با الگوریتم ژنتیک «حدس بزنیم». هر مرحله را با جزئیات و مثالهای ملموس توضیح میدهیم:
تولید جمعیت اولیه (Initial Population)
اولین قدم، ساختن یک مجموعه تصادفی از جوابهاست. این جوابها مثل موجودات اولیه هستند که قرار است تکامل پیدا کنند.
چگونه کار میکند؟ تعداد مشخصی (مثلاً 100) رشته تصادفی از حروف میسازیم.
مثال:
رشتههایی مثل XETRP, HAZLO, QELLO, PZZZZ.
جزئیات بیشتر: اندازه جمعیت (Population Size) معمولاً بین 50 تا 1000 است، بسته به پیچیدگی مسئله. جمعیت بزرگتر تنوع بیشتری ایجاد میکند، اما زمان محاسبات را افزایش میدهد.
چرا مهم است؟ این مرحله تنوع اولیه را فراهم میکند و پایهای برای تکامل بعدی است. بدون تنوع، ممکن است الگوریتم به جوابهای تکراری گیر کند.

ارزیابی یا محاسبه شایستگی (Fitness Function)
هر جواب را بررسی میکنیم تا ببینیم چقدر به هدف (کلمه HELLO) نزدیک است. تابع شایستگی (Fitness Function) امتیازی به هر جواب میدهد.
چگونه کار میکند؟ تعداد حروف درست در مکان درست را میشمریم.
مثال:
HXLLO → 4 حرف درست (H, L, L, O) → امتیاز 4
PZZZZ → 0 حرف درست → امتیاز 0
جزئیات بیشتر: تابع شایستگی قلب الگوریتم ژنتیک است. طراحی درست این تابع خیلی مهمه. مثلاً توی یه مسئله مسیر یابی، شایستگی میتونه فاصله کل مسیر باشه (کمتر = بهتر).
چرا مهم است؟ این امتیاز تعیین میکند کدام جوابها ارزش نگهداشتن دارند و کدامها باید حذف شوند.
🎓طراحی تابع شایستگی شباهت زیادی به تعریف معیارهای موفقیت در یادگیری ماشین دارد. برای یادگیری عمیقتر، دوره آموزش یادگیری عمیق در ایرانپای را از دست ندهید.
انتخاب (Selection)
در این مرحله، جوابهای بهتر (با امتیاز بالاتر) را انتخاب میکنیم تا نسل بعدی را بسازند. این شبیه انتخاب طبیعی در طبیعت است: قویترها میمانند.
چگونه کار میکند؟ جوابهایی با شایستگی بالا با احتمال بیشتری انتخاب میشوند.
روشهای رایج:
Roulette Wheel Selection: هر جواب مثل بخشی از یه چرخ رولت شانس انتخاب شدن داره. جوابهای بهتر، بخش بزرگتری از چرخ رو میگیرن.
Tournament Selection: چند جواب تصادفی مقایسه میشن و بهترینشون انتخاب میشه.
مثال:
HXLLO و HELXO به احتمال زیاد انتخاب میشن، اما PZZZZ احتمالاً حذف میشه.
جزئیات بیشتر: انتخاب نباید فقط بهترینها رو نگه داره، وگرنه تنوع کم میشه. برای همین گاهی جوابهای ضعیفتر هم شانس کمی برای انتخاب دارن.
چرا مهم است؟ این مرحله تضمین میکند که نسل بعدی از جوابهای باکیفیتتر ساخته شود، اما همچنان تنوع حفظ شود.
ترکیب یا بازترکیب (Crossover)
جوابهای انتخابشده را با هم ترکیب میکنیم تا جوابهای جدید بسازیم، مثل ترکیب ژنهای پدر و مادر در طبیعت.
چگونه کار میکند؟ یه نقطه تصادفی در رشته انتخاب میکنیم و دو جواب را از آن نقطه به بعد جابهجا میکنیم.
مثال:
والد 1: HELXO
والد 2: HXLLO
نقطه ترکیب: حرف سوم
فرزند: HELLO (سه حرف اول از والد 1، بقیه از والد 2)
جزئیات بیشتر: روشهای مختلفی برای ترکیب وجود داره، مثل ترکیب دو نقطهای (Two-Point Crossover) یا ترکیب یکنواخت (Uniform Crossover). انتخاب روش به نوع مسئله بستگی داره.
چرا مهم است؟ ترکیب باعث میشود ویژگیهای خوب دو جواب با هم ادغام شوند و جوابهای بهتری تولید شود.
جهش (Mutation)
برای جلوگیری از گیر کردن در جوابهای تکراری، تغییرات تصادفی کوچکی در بعضی جوابها ایجاد میکنیم.
چگونه کار میکند؟ به احتمال کم (مثلاً 1%) یک حرف را با یک حرف تصادفی عوض میکنیم.
مثال:
HELLO → HELLU (O به U تغییر کرده)
جزئیات بیشتر: نرخ جهش (Mutation Rate) باید متعادل باشه. اگه خیلی زیاد باشه، الگوریتم به جستجوی تصادفی تبدیل میشه. اگه خیلی کم باشه، تنوع کافی ایجاد نمیشه.
چرا مهم است؟ جهش تنوع را حفظ میکند و ممکن است به کشف جوابهای غیرمنتظره منجر شود.
تکرار مراحل
مراحل بالا (ارزیابی، انتخاب، ترکیب، جهش) بارها تکرار میشوند تا به جواب نهایی (مثل HELLO) برسیم یا به جوابی بسیار نزدیک به آن.
جزئیات بیشتر: تعداد تکرارها (Generations) به پیچیدگی مسئله بستگی داره. گاهی الگوریتم بعد از چند نسل متوقف میشه، حتی اگه به جواب دقیق نرسیده باشه، چون جواب بهدستآمده به اندازه کافی خوبه.
چرا مهم است؟ این تکرار باعث میشود الگوریتم بهمرور به جوابهای بهینهتر نزدیک شود.

مثال الگوریتم ژنتیک با پایتون
برای اینکه الگوریتم ژنتیک رو در عمل ببینی، یه کد پایتون ساده مینویسیم که کلمه HELLO رو پیدا کنه:
import random
# تنظیمات اولیه
TARGET = "HELLO" # کلمه هدف
POPULATION_SIZE = 100 # اندازه جمعیت
MUTATION_RATE = 0.01 # نرخ جهش
CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ " # کاراکترهای مجاز
# تولید یک جواب تصادفی
def create_individual():
return ''.join(random.choice(CHARS) for _ in range(len(TARGET)))
# محاسبه شایستگی
def fitness(individual):
return sum(1 for a, b in zip(individual, TARGET) if a == b)
# جهش
def mutate(individual):
return ''.join(
char if random.random() > MUTATION_RATE else random.choice(CHARS)
for char in individual
)
# ترکیب
def crossover(parent1, parent2):
pivot = random.randint(0, len(TARGET) - 1)
return parent1[:pivot] + parent2[pivot:]
# الگوریتم اصلی
population = [create_individual() for _ in range(POPULATION_SIZE)]
generation = 0
while True:
population.sort(key=fitness, reverse=True)
best = population[0]
print(f"Generation {generation} | Best: {best} | Fitness: {fitness(best)}")
if best == TARGET:
break
next_gen = population[:10] # نگهداشتن 10 جواب برتر
while len(next_gen) < POPULATION_SIZE:
p1, p2 = random.choices(population[:50], k=2)
child = crossover(p1, p2)
child = mutate(child)
next_gen.append(child)
population = next_gen
generation += 1
خروجی:
Generation 0 | Best: XLTWP | Fitness: 0
Generation 10 | Best: HXLLO | Fitness: 4
Generation 25 | Best: HELLO | Fitness: 5
توضیح: این کد با تولید رشتههای تصادفی شروع میکند و با تکامل، به کلمه HELLO میرسد. میتوانید این کد را اجرا کنید و ببینید چطور الگوریتم قدمبهقدم به جواب میرسد.
کاربردهای الگوریتم ژنتیک در دنیای واقعی
الگوریتم ژنتیک بهخاطر انعطافپذیری و توانایی حل مسائل پیچیده، در حوزههای مختلفی استفاده میشود. بیایید چند کاربرد کلیدی را با جزئیات بررسی کنیم:
1. یادگیری ماشین (Machine Learning)
- انتخاب ویژگی (Feature Selection): در مسائل یادگیری ماشین، معمولاً دادهها شامل صدها یا هزاران ویژگی هستند. الگوریتم ژنتیک کمک میکند بهترین ویژگیها (مثلاً سن، درآمد، یا موقعیت جغرافیایی در پیشبینی قیمت خانه) انتخاب شوند تا مدل دقیقتر و سریعتر باشد.
- تنظیم پارامترها (Hyperparameter Tuning): مدلهای یادگیری ماشین مثل شبکههای عصبی یا SVM پارامترهای زیادی دارند (مثل نرخ یادگیری یا تعداد لایهها). الگوریتم ژنتیک این پارامترها را بهینه میکند.
- مثال واقعی: در تشخیص بیماری از تصاویر پزشکی، الگوریتم ژنتیک میتواند بهترین ویژگیهای تصویر (مثل رنگ یا شکل سلولها) را انتخاب کند.
2. مهندسی داده (Data Engineering)
- بهینهسازی جریان داده: در سیستمهای کلانداده، الگوریتم ژنتیک برای تخصیص منابع (مثل سرورها) یا زمانبندی پردازش دادهها استفاده میشود.
- طراحی پایگاه داده: برای بهینهسازی ساختار جداول، ایندکسها، و کوئریها در پایگاههای داده بزرگ.
- مثال واقعی: در شرکتهای تجارت الکترونیک، الگوریتم ژنتیک برای مدیریت انبار و توزیع محصولات استفاده میشود.
📊اگر با دادههای بزرگ کار میکنید، دوره آموزش مهندسی داده به شما کمک میکند تا به یک متخصص حرفهای تبدیل شوید.
3. مسائل بهینهسازی (Optimization)
- زمانبندی (Scheduling): مثلاً چیدمان برنامه کلاسهای دانشگاه، شیفتهای کاری بیمارستان، یا برنامهریزی پروازها. الگوریتم ژنتیک تضمین میکند که منابع به بهترین شکل استفاده شوند و تداخلها به حداقل برسند.
- مسیر یابی (Routing): پیدا کردن کوتاهترین یا ارزانترین مسیر برای تحویل بستهها، سفر بین شهرها، یا حتی مدیریت ترافیک.
- مثال واقعی: شرکتهای لجستیک مثل آمازون از الگوریتمهای مشابه برای بهینهسازی مسیر تحویل بستهها استفاده میکنند.
4. طراحی و مهندسی
- طراحی مدارهای الکترونیکی: الگوریتم ژنتیک چیدمان قطعات را بهینه میکند تا مصرف انرژی کم و کارایی بالا برود.
- مهندسی مکانیک: طراحی قطعاتی مثل پرههای توربین که وزن کم و استحکام بالایی داشته باشند.
- مثال واقعی: در صنعت هوافضا، الگوریتم ژنتیک برای طراحی بال هواپیما با کمترین مقاومت هوا استفاده میشود.
5. بازیسازی و شبیهسازی
- هوش مصنوعی در بازیها: الگوریتم ژنتیک برای تکامل رفتار شخصیتهای بازی (مثل دشمنان یا NPCها) استفاده میشود تا استراتژیهای پیچیدهتری یاد بگیرند.
- شبیهسازیهای زیستی: مدلسازی رفتار موجودات در اکوسیستمهای مجازی، مثلاً برای مطالعه تغییرات محیطی.
- مثال واقعی: در بازیهای استراتژی مثل Civilization، الگوریتمهای تکاملی برای بهبود رفتار رقبا استفاده میشوند.
6. علوم زیستی و پزشکی
- طراحی دارو: پیدا کردن ترکیبهای شیمیایی بهینه برای تولید داروهای جدید.
- تحلیل ژنوم: بهینهسازی توالیهای DNA یا پروتئینها برای تحقیقات ژنتیکی.
- مثال واقعی: در مبارزه با سرطان، الگوریتم ژنتیک برای شناسایی ترکیبهای دارویی مؤثر استفاده شده.
7. اقتصاد و مدیریت
- مدیریت سرمایهگذاری: بهینهسازی سبد سهام برای کاهش ریسک و افزایش سود.
- پیشبینی بازار: مدلسازی رفتارهای پیچیده اقتصادی با دادههای بزرگ.
- مثال واقعی: بانکها از الگوریتم ژنتیک برای مدیریت ریسک و پیشبینی تغییرات بازار استفاده میکنند.

مزایا و معایب الگوریتم ژنتیک
مزایا
- انعطافپذیری بالا: برای مسائل خطی، غیرخطی، گسسته، یا پیوسته کار میکند.
- نیاز کم به اطلاعات اولیه: برخلاف روشهای ریاضی سنتی، نیازی به مشتق یا فرمولهای پیچیده ندارد.
- کشف جوابهای خلاقانه: بهخاطر جهش، گاهی جوابهایی پیدا میکند که روشهای دیگر نمیتوانند.
- پشتیبانی از مسائل چندهدفه: میتواند چندین هدف را همزمان بهینه کند (مثلاً کاهش هزینه و افزایش کیفیت).
معایب
- سرعت پایین در مسائل بزرگ: برای مسائل خیلی پیچیده، نیاز به تعداد زیادی نسل دارد.
- عدم تضمین جواب بهینه: ممکن است به جواب نزدیک به بهینه برسد، نه دقیقاً بهترین جواب.
- حساسیت به تنظیمات: پارامترهایی مثل نرخ جهش یا اندازه جمعیت باید با دقت تنظیم شوند.
- پیچیدگی محاسباتی: برای مسائل بزرگ، منابع محاسباتی زیادی مصرف میکند.
جمعبندی
الگوریتم ژنتیک یکی از جذابترین و قدرتمندترین ابزارهای هوش مصنوعی است که با الهام از طبیعت، مسائل پیچیده را به روشی هوشمندانه حل میکند. از پیدا کردن یک کلمه ساده مثل HELLO تا طراحی قطعات پیشرفته در هوافضا، این الگوریتم کاربردهای بیشماری دارد. یادگیری آن نهتنها درک شما از هوش مصنوعی را عمیقتر میکند، بلکه مهارتی ارزشمند برای حل مسائل واقعی در اختیارتان قرار میدهد.
🧠 میخواهید در هوش مصنوعی حرفهای شوید؟ با شرکت در دورههای هوش مصنوعی ایرانپای، از یادگیری ماشین تا مهندسی داده، مسیر متخصص شدن را با اطمینان طی کنید. همین حالا شروع کنید!
دیدگاهتان را بنویسید