Курсовая работа: Генетические алгоритмы в задаче оптимизации действительных параметров
Таблица 5: Симуляция выбора родителей
Хромосома отца | Хромосома матери |
3 | 1 |
5 | 2 |
3 | 5 |
2 | 5 |
5 | 3 |
Каждый потомок содержит информацию о генах и отца и от матери. Вообще говоря, это можно обеспечить различными способами, однако в нашем случае можно использовать т.н. "кроссовер" (cross-over). Пусть мать содержит следующий набор решений: a1,b1,c1,d1, а отец - a2,b2,c2,d2, тогда возможно 6 различных кросс-оверов (| = разделительная линия):
Таблица 6: Кроссоверы между родителями
Хромосома-отец | Хромосома-мать | Хромосома-потомок |
a1 | b1,c1,d1 | a2 | b2,c2,d2 | a1,b2,c2,d2 or a2,b1,c1,d1 |
a1,b1 | c1,d1 | a2,b2 | c2,d2 | a1,b1,c2,d2 or a2,b2,c1,d1 |
a1,b1,c1 | d1 | a2,b2,c2 | d2 | a1,b1,c1,d2 or a2,b2,c2,d1 |
Есть достаточно много путей передачи информации потомку, и кроссовер - только один из них. Расположение разделителя может быть абсолютно произвольным, как и то, отец или мать будут слева от черты. А теперь попробуем проделать это с нашими потомками
Таблица 7: Симуляция кроссоверов хромосом родителей
Хромосома-отец | Хромосома-мать | Хромосома-потомок |
(13 | 5,7,3) | (1 | 28,15,3) | (13,28,15,3) |
(9,13 | 5,2) | (14,9 | 2,4) | (9,13,2,4) |
(13,5,7 | 3) | (9,13,5 | 2) | (13,5,7,2) |
(14 | 9,2,4) | (9 | 13,5,2) | (14,13,5,2) |
(13,5 | 7, 3) | (9,13 | 5, 2) | (13,5,5,2) |
Теперь мы можем вычислить коэффициенты выживаемости (fitness) потомков.
Таблица 8: Коэффициенты выживаемости потомков (fitness)
Хромосома-потомок | Коэффициент выживаемости |
(13,28,15,3) | |126-30|=96 |
(9,13,2,4) | |57-30|=27 |
(13,5,7,2) | |57-30|=22 |
(14,13,5,2) | |63-30|=33 |
(13,5,5,2) | |46-30|=16 |
Средняя приспособленность (fitness) потомков оказалась 38.8, в то время как у родителей этот коэффициент равнялся 59.4. Следующее поколение может мутировать. Например, мы можем заменить одно из значений какой-нибудь хромосомы на случайное целое от 1 до 30. Продолжая таким образом, одна хромосома, в конце концов, достигнет коэффициента выживаемости 0, то есть станет решением. Системы с большей популяцией (например, 50 вместо 5-и сходятся к желаемому уровню (0) более быстро и стабильно.
5.1 Заголовок класса
#include <stdlib.h>
#include <time.h>
#include<stdio.h>
#define MAXPOP 25
struct gene
{
int alleles[4];
int fitness;
float likelihood; // Тест на равенство
operator==(gene gn)
for (int i=0;i<4;i++)
{
if (gn.alleles[i] != alleles[i]) return false;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8