#author("2018-11-20T16:23:27+09:00","","") [[卒論]] #author("2018-11-20T16:26:39+09:00","","") #include <stdio.h> #include <stdlib.h> /* rand() */ #include <time.h> /* srand() */ #include "mpi.h" #define NODE 50 /* 都市の数 */ #define MAX_DIST 30 /* 都市間の距離の最大値 */ #define GENOM 200 /* 遺伝子数 */ #define LIMIT 100000 /* 計算回数 */ #define EVOLUTION 1 /* 突然変異発生確率[%] */ #define MIG_INTERVAL 1000 /* 移住間隔[世代] */ #define MIG_RATE 15 /* 移住率[%] */ #define DEBUG1 0 /* 関数確認用 */ #define DEBUG2 0 /* 経路が正しいかどうか確認 */ #define WRITEFILE 1 /* ファイルへの書き込み用の出力 */ typedef struct { double dist[NODE]; /* town[now].dist[go] */ int flag; /* 訪問確認用旗 */ } TOWN; TOWN town[NODE]; typedef struct { double distance; /* 距離 */ int route[NODE+1]; /* 経路 */ int flag; /* 旗 */ } RESULT; RESULT result[GENOM]; int champ = 0; double fast = NODE * MAX_DIST; void func(void); /* 母集団生成 */ void makelist(void); /* 都市間の距離リスト作成 */ void tournament(int rank); /* 淘汰 */ void calc_dist(RESULT *res); /* 距離計算 */ void cross(void); /* 交叉 */ void variation(int np); /* 突然変異 */ void migrate(int rank, int np, MPI_Status *status); /* 移住 */ /* main **************************************************************/