# Readme.txt # http://www.eva.ie.u-ryukyu.ac.jp/~tnal/research/Program/sampleprogram.html ■課題内容 GAでナップサック問題を解く. その際,各遺伝子操作オペレータ(選択,交叉,突然変異) を実装した場合(1)と実装しない場合(2),2種類の実験を 行い,得られた結果の違いから各オペレータの役割を考察する. サンプルプログラムは上記URLを参照のこと. ■環境 OS:BSD/OS 4.0.1 コンパイラ:gcc version 2.7.2.1 ■ファイル 1-1-KP_List.data-10 # 実行例 1-1-KP_List.data-10.end # 実行例の最終結果 1-1-KP_List.data-10.max # 実行例の最大適応度推移 KP_List.data # 荷重ファイル KP.h # ナップサック問題の定義 parameter.h # GAパラメータの定義 Makefile KP.c # 荷重ファイルを読み込む calc_fitness.c # 適応度計算 ga.c # メイン関数 initialize_gene_binary.c # 初期集団作成 kp.exe # 実行ファイル mutation_binary.c # 突然変異 random2.c # 乱数生成 roulette_selection.c # ルーレット選択 singlepoint_crossover.c # 一点交叉 run_ga.sh # 実行結果の切り出し ■コンパイル例 選択+交叉+突然変異を実装 prompt> make 選択のみ実装 prompt> make OPTION="-DSELECTION" 交叉のみ実装 prompt> make OPTION="-DCROSSOVER" 突然変異のみ実装 prompt> make OPTION="-DMUTATION" 選択+交叉を実装 prompt> make OPTION="-DSELECTION -DCROSSOVER" 選択+突然変異を実装 prompt> make OPTION="-DCROSSOVER -DMUTATION" ■実行方法 実行時に, 1)初期集団作成用シード値(下記の例では1), 2)GAオペレータ用シード値(同様に1), 3)荷重ファイル(同様にKP_List.data), 4)終了世代数(同様に10) を引数として渡す. □例 prompt> run_ga.sh 1 1 KP_List.data 10 ■実行結果 〜, 〜.max, 〜.end という3種類のファイルが作成される. 「〜」はシード値や荷重ファイル名によって異なり, 前述の実行例だと,「1-1-KP_List.data-10」となる. 〜:実験結果の全出力 〜.max:実験結果から,各世代毎の最大適応度を切り出した結果 〜.end:実験結果から,最大適応度となる個体の出力結果 ■最大適応度推移のグラフ表示方法 prompt> gnuplot gnuplot> plot "1-1-KP_List.data-10.max" with line