#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 **************************************************************/