Evolutionary Algorithms
تطوّر الخوارزميات التطورية مجموعة من الحلول المرشحة عبر الانتقاء والعبور والطفرات. يتناول هذا الموضوع أنواعها الرئيسية والبرمجة واستخداماتها العملية.
الخوارزميات التطورية (EAs) هي مجموعة من خوارزميات التحسين التي تحاكي الانتقاء الطبيعي. تحتفظ هذه الخوارزميات بمجموعة من الحلول المرشحة، وتقيّم كل حل بدالة لياقة، وتتيح لأفضل المرشحين إنتاج ذرية عبر إعادة التركيب والطفرات العشوائية، ثم تكرر العملية لأجيال عديدة كي تتجه المجموعة نحو حلول أفضل. لا تحتاج الخوارزمية التطورية إلا إلى تقييم المرشح، لا إلى حساب تدرج، لذا تصلح للمسائل التي لا يستطيع الانحدار المتدرج التعامل معها: الخيارات المتقطعة، والأهداف غير القابلة للاشتقاق أو المشوشة، وفضاءات البحث الوعرة المليئة بالأمثلية المحلية. لذلك تُعد الخوارزميات التطورية أداة معيارية في ضبط المعلمات الفائقة، والبحث عن بنية الشبكات العصبية، والتصميم الهندسي، والجدولة.
آلية عمل الخوارزميات التطورية#
تتكون كل خوارزمية تطورية من العناصر نفسها:
- التمثيل: يُشفّر كل مرشح على هيئة جينوم، مثل سلسلة من البتات أو متجه من الأعداد الحقيقية أو شجرة برنامج.
- التهيئة: يكون الجيل الأول عشوائيًا عادةً، وقد تُزرع فيه أحيانًا حلول معروفة بجودتها.
- تقييم اللياقة: تقيّم دالة اللياقة كل مرشح وفق الهدف الجاري تحسينه.
- الانتقاء: تزداد احتمالية أن يصبح المرشحون الأعلى لياقة آباءً. فمثلًا، يختار الانتقاء بالبطولة الأفضل من بين بضعة مرشحين عشوائيين، وينسخ النخبوية أفضل مرشح كما هو إلى الجيل التالي.
- التنوع: يجمع العبور أجزاءً من أبوين، وتُجري الطفرة تغييرات عشوائية صغيرة كي تواصل المجموعة الاستكشاف.
في التعلم الآلي (ML)، تكون دالة اللياقة غالبًا مقياس تحقق مثل الدقة أو متوسط الدقة (mAP)، لذا يعني تقييم المرشح تدريب نموذج واختباره، وهي الخطوة الأعلى كلفة بفارق كبير. وتتكرر الحلقة حتى تنفد الميزانية أو يتوقف تحسن اللياقة:
يحدد ضغط الانتقاء وقوة الطفرة التوازن بين الاستغلال والاستكشاف. يتقارب الانتقاء القوي مع طفرات صغيرة بسرعة، لكنه قد يعلق عند أمثلية محلية، بينما يستكشف الانتقاء الضعيف مع طفرات كبيرة نطاقًا واسعًا لكنه يهدر التقييمات.
الأنواع الرئيسية للخوارزميات التطورية#
- الخوارزميات الجينية (GAs): تشفّر المرشحين على هيئة سلاسل، غالبًا من البتات، وتعتمد كثيرًا على العبور. وضع John Holland صياغتها الرسمية في كتابه الصادر عام 1975 Adaptation in Natural and Artificial Systems.
- استراتيجيات التطور (ES): تحسّن متجهات من الأعداد الحقيقية باستخدام طفرات غاوسية تتكيف أحجام خطواتها أثناء التشغيل. وتُعد CMA-ES، التي تتعلم مصفوفة التغاير الكاملة لتوزيع الطفرات، من أقوى الطرق العامة لمسائل الصندوق الأسود المستمرة.
- البرمجة الجينية: تطوّر برامج أو تعبيرات رياضية ممثلة في صورة أشجار، وتُستخدم للانحدار الرمزي والتصميم الآلي للبرامج.
- التطور العصبي: يطوّر أوزان الشبكات العصبية، وأحيانًا بنيتها أيضًا. وأظهرت OpenAI في عام 2017 أن استراتيجيات التطور التي تعمل على أكثر من ألف عامل متوازٍ يمكنها تدريب إنسان آلي ثلاثي الأبعاد على المشي في 10 دقائق، بوصفها بديلًا قابلًا للتوسع للتعلم المعزز.
خوارزمية جينية في الشيفرة#
تسأل مسألة حقيبة الظهر عن العناصر التي ينبغي حزمها لتعظيم القيمة الإجمالية دون تجاوز حد الوزن، وهي مسألة متقطعة لا تملك تدرجًا. تطوّر خوارزمية NumPy الجينية هذه 50 جينومًا ممثلًا بسلاسل بتات، ببت واحد لكل عنصر، باستخدام الانتقاء بالبطولة والعبور المنتظم وطفرة قلب البتات والنخبوية، ثم تقارن الإجابة بجميع الاختيارات الممكنة وعددها 1,048,576:
import itertools
import numpy as np
rng = np.random.default_rng(0)
# Knapsack problem: pick from 20 items to maximize total value within a weight limit of 200
values, weights, limit = rng.integers(10, 100, 20), rng.integers(5, 50, 20), 200
def fitness(pop):
"""Return each selection's total value, or 0 if it exceeds the weight limit."""
return np.where(pop @ weights <= limit, pop @ values, 0)
population = rng.random((50, 20)) < 0.2 # 50 random genomes, one bit per item
for generation in range(100):
scores = fitness(population)
# Tournament selection: each parent is the better of two random genomes
pairs = rng.integers(50, size=(50, 2))
parents = population[np.where(scores[pairs[:, 0]] > scores[pairs[:, 1]], pairs[:, 0], pairs[:, 1])]
# Uniform crossover with the next parent, then flip each bit with probability 0.05
children = np.where(rng.random((50, 20)) < 0.5, parents, np.roll(parents, 1, axis=0))
children ^= rng.random((50, 20)) < 0.05
children[0] = population[scores.argmax()] # elitism: keep the best genome
population = children
all_selections = np.array(list(itertools.product([0, 1], repeat=20)))
print(f"GA best: {fitness(population).max()}, true optimum: {fitness(all_selections).max()}")تطبع الخوارزمية GA best: 811, true optimum: 811. وقد وجدت أفضل حزمة ممكنة بعد 5,000 تقييم للياقة، أي نحو 0.5% من مليون اختيار اضطر أسلوب القوة الغاشمة إلى فحصها.
تطوير المعلمات الفائقة#
تتفاعل إعدادات التدريب مثل معدل التعلم وأوزان دالة الخسارة وشدة زيادة البيانات بطرق لا يمكن لأي معادلة التنبؤ بها، كما أن كل مرشح يتطلب تشغيل تدريب كاملًا، ما يجعل البحث التطوري مناسبًا. تستخدم طريقة tune() في Ultralytics YOLO هذا النهج مع نماذج YOLO26: تختار كل دورة أبًا من أفضل تسع إعدادات حتى الآن، مع ترجيح الاختيار بحسب اللياقة، وتُحدث طفرات في نحو نصف المعلمات الفائقة الـ26 ضمن مساحة البحث الافتراضية بخطوات غاوسية متناسبة مع نطاقات البحث، ثم تدرّب نموذجًا وتسجل لياقته، وهي mAP50-95 في كشف الكائنات. وبعد 30 نتيجة، تتبع بعض الطفرات أيضًا مصفوفة التغاير لأفضل 20% من الإعدادات، مقتبسةً بذلك من CMA-ES. ويعرض دليل ضبط المعلمات الفائقة مساحة البحث كاملةً:
from ultralytics import YOLO
# تحميل نموذج YOLO26 nano مُدرَّب مسبقًا
model = YOLO("yolo26n.pt")
# تطوير المعلمات الفائقة: 30 دورة، تدرّب كل منها إعدادًا واحدًا متحوّرًا لمدة 10 عصور
model.tune(data="coco8.yaml", epochs=10, iterations=30, plots=False)يكتب المُضبِّط كل إعداد ولياقته إلى tune_results.ndjson ويحفظ الإعداد الفائز في best_hyperparameters.yaml، ليكون جاهزًا لتمريره إلى تشغيل تدريب كامل.
تطبيقات أخرى#
- البحث عن بنية الشبكات العصبية: نتج AmoebaNet من Google عن التطور المنظّم، وهو خوارزمية تطورية تعتمد الانتقاء بالبطولة وتستبعد النماذج الأقدم بدلًا من الأسوأ، وحقق دقة top-1 بلغت 83.9% على ImageNet في عام 2018.
- التصميم الهندسي: حملت مهمة Space Technology 5 التابعة لـNASA في عام 2006 هوائيًا بنطاق X صممه حاسوب بالتطور، وكان شكله غير المنتظم من أسلاك مثنية يضاهي أداء هوائي مصمم بالطرق التقليدية.
- اكتشاف الخوارزميات: يجمع AlphaEvolve، الذي أعلنت عنه Google DeepMind في مايو 2025، بين نماذج Gemini التي تقترح تعديلات على الشيفرة ومقيّمين آليين وقاعدة بيانات تطورية للبرامج. وقد استعادت إحدى خوارزميات الجدولة الإرشادية التي طوّرها موارد حوسبة تعادل في المتوسط 0.7% من إجمالي موارد الحوسبة العالمية للشركة في مراكز بيانات Google.
الخوارزميات التطورية مقارنةً بالأساليب ذات الصلة#
- الانحدار المتدرج: يتبع تدرج دالة خسارة قابلة للاشتقاق، وهو أكثر كفاءة بكثير في تدريب أوزان الشبكات التي تضم ملايين المعلمات. وتناسب الخوارزميات التطورية المسائل ذات المعلمات القليلة أو التقييمات المكلفة أو التي لا تملك تدرجًا.
- ذكاء السرب: تحرّك طرق مثل تحسين سرب الجسيمات مجموعة دائمة من الوكلاء عبر فضاء البحث، ويعدّل كل وكيل موقعه استنادًا إلى أفضل نتيجة له وإلى نتائج جيرانه، دون استبدال الأجيال أو العبور أو الطفرة.
- التحسين البايزي: يلائم نموذجًا احتماليًا للهدف ويختار كل تجربة تالية حيث يتوقع النموذج أكبر تحسن؛ ما يتطلب تقييمات أقل من الخوارزمية التطورية في فضاءات البحث الصغيرة والملساء، لكنه أقل قابلية للتوسع مع كثرة المعلمات والعوامل المتوازية.










