تصميم الـ fitness function
الـ fitness function (دالة الملاءمة) مش تفصيلة في التنفيذ. دي صياغة المسألة نفسها — وتصميمها الوحش هو أكتر سبب منتشر لفشل الـ genetic algorithm.
كل اللي يقدر يشوفه
البحث مبيشوفش مسألتك. بيشوف الرقم الواحد اللي الـ fitness بترجّعه لكل candidate، وبعدين الـ selection بيكتّر أي حاجة بتاخد رقم عالي. ودي الآلية كلها.
كافئ النتيجة
وإنت بتطوّر duty cycle لـ sensor، هيبقى مغري تكافئ «سيب الراديو مقفول» لأنك عارف إنه بيصرف البطارية. وهتاخد ده بالظبط: راديو مقفول، وبطارية كويسة، ومفيش بيانات.
توزيع الـ sensors
- 40 موقع مرشّح على 200 خلية grid، لكل موقع مجموعة تغطية وتكلفة
- الـ candidate هو string من 40 bit — الـ bit i بيساوي 1 لو الموقع i اتستخدم
- أول fitness: الخلايا المتغطّية. فالكسبان بيختار تقريبًا كل حاجة
- مفيش حاجة في الـ fitness دي بتجيب سيرة الفلوس، فالبحث عمره ما اهتم بيها
الـ weighted sums
اطوي الأهداف في رقم واحد بـ weights بتختارها مسبقًا — بعد ما تعمل rescaling لكل هدف، وإلا الوحدات بتاعتك هي اللي هتقرّر الـ weights بدالك.
الـ Pareto front
- الحل a بيهيمن على b لما ميبقاش أوحش في أي حتة ويبقى أحسن في حتة ما
- الحلول اللي مفيش حاجة بتهيمن عليها بتكوّن الـ non-dominated set
- رجّع انتشار من الـ trade-offs، وبعدين سيب البني آدم يختار
- الـ weighted sum عمره ما بيوصل للأجزاء الـ concave من سطح الـ trade-off
نظرة على NSGA-II
- الـ non-dominated sorting — قسّم الـ population لـ fronts؛ الـ rank الأقل بيكسب
- الـ crowding distance — الفيصل عند التعادل جوه الـ front؛ بيفضّل المناطق المتفرّقة فالـ front بيفضل منتشر
- الـ elitism بالدمج — اجمع الـ parents والأبناء، وبعدين رتّب، وبعدين قُص
التعامل مع الـ constraints
- الـ penalty — اطرح حد بيكبر مع الانتهاك؛ فالـ genes اللي مش feasible بتنجو
- الـ rejection — أوحش fitness ممكنة. مالهاش لازمة لما الحلول الـ feasible تبقى نادرة
- الـ repair — خلّيه feasible، وبعدين قيّمه
- operators بتحافظ على الـ feasibility — مينفعش يتبني ابن مش صالح
- بلّغ عن الـ feasibility لوحدها بعيد عن الـ fitness
الـ premature convergence
crossover بين نسختين شبه متطابقين بيرجّع نفس الفرد، فمبيفضلش غير الـ mutation للجديد — random walk بطيء. ومن بره بيبان زي run خلصت.
- أحسن fitness ناقص المتوسط بتنهار بدري
- عدد الـ genotypes المختلفة بيقع بحدّة
- ترددات الـ alleles لكل gene بتتشبّع عند 0 أو 1
خلّي الـ population متنوّعة
- قلّل الـ selection pressure — tournaments أصغر، أو rank selection
- علّي الـ mutation، بشكل adaptive لما مقياس التنوّع ينزل
- الـ fitness sharing — الزحمة بتتعاقب على إنها زحمة (Goldberg، 1989)
- الـ crowding replacement — الابن بياخد مكان الأشبه بيه
- الـ restarts والجزر — احفظ أرشيف elitist، وسيب الـ subpopulations تبعد عن بعض
الميزانية بالتقييمات
100 فرد على 200 جيل يساوي 20,000 تقييم. وبثانيتين لكل تقييم ده أكتر من إحداشر ساعة على core واحد — حساب بيتعمل قبل الـ run مش بعدها.
أهم النقط
- الـ fitness هي صياغة المسألة — اتّهمها الأول
- كافئ النتيجة، مش السلوك اللي إنت مفترض إنه بيطلّعها
- الـ weighted sums محتاجة rescaling؛ وNSGA-II بترجّع front بدل كده
- الـ constraints: penalty، أو rejection، أو repair، أو operators متقدرش تكسرها
- راقب التنوّع، وقاوم ضياعه قبل ما الـ run تبطّل تتحسّن
- الـ caching والـ subsampling والتوازي — فالتقييمات هي اللي بتكلّفك