読者です 読者をやめる 読者になる 読者になる

やってみた

C言語のソースを使って実験
特に何の問題を解かす訳でもない
純粋に遺伝子に見立てた数値の合計が大きい
個体を選択するという代物
100世代くらいだとまだ最適解にはならない

10000世代くらいまで回すと遺伝子の要素が全て10という
最適解に辿り着く


C言語のライブラリ呼べるならきっと
Visual StudioC#を使った方が良い
gccc++までMacコンパイル出来る環境を構築したけど
3Dモデルを扱うならDirectXを使用するのが個人的には近道な気がする

走らせたサンプルのソースコードはこちら

#include
#include
#include
#define N 100//個体数
#define L 10//遺伝子長
#define MAX 10//遺伝子の構成単位に入る値の最大値

void roulette(int fit, int ro, int elite);
int main(void)
{
int now[N][L],//現在の世代
next[N][L],//次世代
fit[N],//各個体の適応度
r[3],//乱数格納用
ro[2];//ルーレット選択で選ばれた2個体を格納

int best, elite, h, i, j, ge, st, en;
srand(time(NULL));

printf("Generation = ");
scanf("%d", &ge);

for (i=0; i best){
best = fit[i];
elite = i;//最優秀の個体の番号を得る
}
}

for (j=0; j= en);

for (j=0; j, int ro, int elite)
{
int i;
double sumf, p[N];

fit[elite] = 0;//エリート選択で選ばれたものは選択対象外に
for (i=0, sumf=0; i