個体値遺伝アルゴリズム

2号館でperlで説明されていたものをC的に記述してみます。
本来行いたかった処理

int stat[6] = { 0 , 1 , 2 , 3 , 4 , 5 } ; /* HP〜SDのかわり */
int iden[3] ;   /* ここに遺伝されるステータスをあらわす数が入ります */
int i, j, r;
for ( i = 0 ; i < 3 ; i++ ) {
  r = rand() % (6-i) ;                    /* 遺伝するステータス決定 */
  iden[i] = stat[r] ;                     /* 遺伝するものを記録 */
  for( j = r ; j < 5 ; j++)               /* 配列から削除 */
    stat[j] = stat[j+1];
}

RSFLの場合

int stat[6] = { 0 , 1 , 2 , 3 , 4 , 5 } ; /* HP〜SDのかわり */
int iden[3] ;   /* ここに遺伝されるステータスをあらわす数が入ります */
int i, j, r;
for ( i = 0 ; i < 3 ; i++ ) {
  r = rand() % (6-i) ;                    /* 遺伝するステータス決定 */
  iden[i] = stat[r] ;                     /* 遺伝するものを記録 */
  for( j = iden[i] ; j < 5 ; j++)         /* 配列から削除 */
    stat[j] = stat[j+1];
}

EmDPの場合

int stat[6] = { 0 , 1 , 2 , 3 , 4 , 5 } ; /* HP〜SDのかわり */
int iden[3] ;   /* ここに遺伝されるステータスをあらわす数が入ります */
int i, j, r;
for ( i = 0 ; i < 3 ; i++ ) {
  r = rand() % (6-i) ;                    /* 遺伝するステータス決定 */
  iden[i] = stat[r] ;                     /* 遺伝するものを記録 */
  for( j = i ; j < 5 ; j++)               /* 配列から削除 */
    stat[j] = stat[j+1];
}

まあ、EmDPについては想像に過ぎませんが・・