SGAプログラムの並列化
2001年 9月21日
1.先週からの課題
先週からの課題として,2.研究報告
今週行ったこと
SGAプログラムの並列化
今週はようやくプログラムの改良を行った.移住の関数を作成しLAMを用いて作成した.
作成したプログラムを以下に示す.
//-------------------------------------------------------------------------
// 移住
//-------------------------------------------------------------------------
void migration(Individual* pop, int pop_size)
{
char send[send_pop];
char recv[send_pop];
int i,j;
MPI_Status stat;
if (g % send_interbal == 0){
for(i = 0; i < send_pop_size; i ++){
for(j = 0; j < glength / NVAR; j ++){
send[j + ((glength / NVAR) * i)] = pop[i].gene[j];
}
}
if(myid != 4){
MPI_Sendrecv(send,send_pop_size*(glength/NVAR),MPI_CHAR,
myid+1,1,recv,send_pop_size*(glength/NVAR),MPI_CHAR,myid,1,MPI_COMM_WORLD,&stat);}
else MPI_Sendrecv(send,send_pop_size*(glength/NVAR),MPI_CHAR,4-myid,1,recv,send_pop_size*(glength/NVAR),MPI_CHAR,myid,1,MPI_COMM_WORLD,&stat);
for(i = 0; i < send_pop_size; i ++){
for(j = 0; j < glength / NVAR; j ++){
pop[i].gene[j] = recv[j + ((glength / NVAR) * i)];
}
}
}
}
今回はLAMの勉強のためにコンパイル通すことに重点をおいたので移住トポロジーは単純に図のように
隣接する隣の島とのみと遺伝子の交換を行うものとした.また,移住させる個体は選択の際に選ばれた
ものの順(早いもの順)とした.
実際に測定に用いた初期値を示す.
世代数 | 100 |
個体数 | 100 |
交叉率 | 0.8 |
遺伝子長 | 20 |
突然変異率 | 0.05 |
設計変数 | 2 |
移住個体数 | 4 |
移住間隔 | 5 |
島数 | 4 |
本当はもっと多くの島数を使って実行したかったのだが,cambriaが利用できずにforteが非常に込み合っていたので
実行時間を考えて諦めた.4回ほど実行してみたが実行結果は
1回目 | 2回目 | 3回目 | 4回目 |
-0.0000000000 | -0.0000000000 | -0.0000000000 | -0.0000000000 |
-0.0000000000 | -0.0000000000 | -0.0000137928 | -0.0000000757 |
-0.0000000000 | -0.0000000000 | -0.0000137928 | -0.0000000000 |
-0.0000000000 | -0.0000000000 | -0.0000000000 | -0.0000000000 |
となった.ただ,通信がどのようになっているかなどの確認は行う時間がなかったため,実行結果のみとなったが,
精度が上がりこのような結果になったのか,通信に失敗して遺伝子情報が損なわれているのかなどは確認し
ていないので,確認してみなければならないと思う.
また,移住トポロジーについてももっと様々なパターンを検討して実装してみたいと考えている.それと,移住させる
個体はどのような個体がよいのかも検討しなければならないと思う.
isightの学習
isightに関してはDebianにインストールし福永君と共同で吉田純一さんにもらったサンプルの動作確認をしながら
利用方法を覚えている段階である.
ParallelGAゼミ
ParallelGAゼミは廣安先生に配布された資料を一通り読んでゼミの資料を作成する段階となっている.
3.今後の課題
ParallelGAゼミの開催
isightサンプルプログラムの考察
DGAの改良
など