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