You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

91 lines
2.5 KiB

#ifndef TSP_H_INCLUDED
#define TSP_H_INCLUDED
#define YES 1
#define NO 0
#define CITY_NUM 10 /* 都市数 */
#define POSITION_MAX 10 /* 都市座標の最大値 */
/* 以下のパラメータを調節する */
#define GENE_NUM 100 /* 個体数 */
#define ELETE 1 /* エリート戦略用 */
#define GENERATION 100 /* 進化世代数 */
#define MUTATION_RATIO 0.20 /* 突然変異確率 */
#define CROSSOVER_RATIO 0.3 /* 交叉確率 */ /* 本実験では不使用 */
#define SELECT_NUM 2 /* トーナメント方式で選ぶ遺伝子の数 */
/****************/
/* 構造体の定義 */
/****************/
/* 都市座標 */
typedef struct position_tag {
int x; /* x座標 */
int y; /* y座標 */
} Position;
/* 個体 */
typedef struct gene_set_tag {
int gene[CITY_NUM]; /* 遺伝子 */
double length; /* 経路長 */
double fitness; /* 適合度 */
} Gene_set;
/********************************/
/* 実験作成関数プロトタイプ宣言 */
/********************************/
/* 比較関数 */
int compare_fitness(const void *a, const void *b);
/* 突然変異 */
void mutation(Gene_set gene_group[GENE_NUM]);
/* 選択 */
void selection(Gene_set gene_group[GENE_NUM]);
/* トーナメント方式 */
void tournament(Gene_set gene_group[GENE_NUM]);
/* エリート戦略 */
void elete(Gene_set gene_group[GENE_NUM]);
/* 遺伝子個体を複写 */
void copy_gene_set(Gene_set *gene_set_to, Gene_set *gene_set_from);
/* 全遺伝子個体を複写 */
void copy_gene_group(Gene_set gene_group_to[GENE_NUM], Gene_set gene_group_from[GENE_NUM]);
/****************************/
/* 各関数のプロトタイプ宣言 */
/* 実体は tsp_public.c 内 */
/* main 関数内で使用 */
/****************************/
/* 都市をランダムに設定 */
void initial_city(Position city[CITY_NUM]);
/* 遺伝子をランダムに設定 */
void initial_gene(Gene_set gene_group[GENE_NUM]);
/* 適応度の初期設定 */
void initial_fitness(Gene_set *gene_ptr, Position city[CITY_NUM]);
/* 適応度の計算 */
void calculate_fitness(Gene_set *gene_ptr, Position city[CITY_NUM]);
/* 都市の座標を表示 */
void print_city(Position city[CITY_NUM]);
/* 各個体のデータを表示 */
void print_gene_group(Gene_set gene_group[GENE_NUM]);
/* 最良解を表示 */
void print_best_data(Gene_set gene_group[GENE_NUM]);
/* 最良値、平均値、最悪値を表示 */
void print_data(Gene_set gene_group[GENE_NUM]);
/* 最良個体のインデックスを取得 */
int get_best_gene(Gene_set gene_group[GENE_NUM]);
#endif /* define TSP_H_INCLUDED */