вторник, 6 мая 2008 г.

Трансформация популяции.

В конце каждой эпохи генетической оптимизации производим трансформацию популяции. Цель трансформации - передать дальше лучшие свойства.

Делаем в несколько этапов:

1. сортировка
2. перемешивание
3. скрещивание
4. мутирование
5. ограничение


// Код на С

void trans_pop(int pop_cnt,
int *pop_ind,
double *pop_kach,
int gen_len,
double *pop,
double mu,
double flash,
int *best_num)
{
int k, p , p2, p3 ;
double *b1,*b2 ;

sort_pop(pop_cnt,pop_ind,pop_kach) ;

*best_num = pop_ind[pop_cnt-1] ;

p = pop_cnt/2 ;
mix_ind(pop_ind,p) ;
mix_ind(pop_ind+p,p) ;

p = pop_cnt/4 ;
p2 = p * 2 ;
p3 = p * 3 ;

for( k=0 ; k<p ; k++ )
{
#define IND(k) (pop_ind[k])
#define GEN(k) (pop+IND(k)*gen_len)

b1 = GEN(k) ;
b2 = GEN(k+p) ;

xver(b1,b2,GEN(k+p2),GEN(k+p3),gen_len) ;

#undef IND
#undef GEN

mutate(b1,gen_len,mu,flash) ;
mutate(b2,gen_len,mu,flash) ;

ogr(b1,gen_len) ;
ogr(b2,gen_len) ;
}
}

Комментариев нет: