遺伝的アルゴリズムの交叉方法
Posted: 2013年10月17日(木) 17:37
TSPを解く遺伝的アルゴリズムの交叉についてアルゴリズムがプログラムに書き直せないので、ご教授ください。
単純に5都市の問題として考えています。
定義1:親1の巡回路を(1,2,3,4,5)、親2の巡回路を(2,1,3,5,4)とします。tourという2次元配列には巡回路が入っています。
例えばtour[parent1][]=(1,2,3,4,5)、tour[parent2][]=(2,1,3,5,4)といった具合です。
定義2:子は1次元配列で構成されており、出発都市のみランダムで決定されております。
また、アルゴリズムに従い、どちらの親の都市を受け継ぐか決定しています。
例えば、出発都市が3と決定しているとし、どちらの親の都市を受け継ぐか決まっているとすると、
child[]=(3,親1,親1,親2,親1)という風になっており、この親の判定は1か2でマークされています。
つまり、プログラム上のchildは、child[]=(3,1,1,2,1)というような配列になっています。
まとめると、親1の巡回路を(1,2,3,4,5)、親2の巡回路を(2,1,3,5,4)、子の出発都市を3とする。
この時(1,1,2,1)の順番で親の都市が選択された場合、子の巡回路は、(3,1,2,5,4)となります。
この親1、親2の振り分けの部分がプログラムではうまく書くことができません。
もうすでにchildに入れられた都市が重複して入れられてしまうのです。
雑なアルゴリズムですが、よろしくお願いします。
また、質問があれば何なりとお答えしますのでよろしくお願いします。
iはループの判定に、city_numは今回5都市ですので5です。
単純に5都市の問題として考えています。
定義1:親1の巡回路を(1,2,3,4,5)、親2の巡回路を(2,1,3,5,4)とします。tourという2次元配列には巡回路が入っています。
例えばtour[parent1][]=(1,2,3,4,5)、tour[parent2][]=(2,1,3,5,4)といった具合です。
定義2:子は1次元配列で構成されており、出発都市のみランダムで決定されております。
また、アルゴリズムに従い、どちらの親の都市を受け継ぐか決定しています。
例えば、出発都市が3と決定しているとし、どちらの親の都市を受け継ぐか決まっているとすると、
child[]=(3,親1,親1,親2,親1)という風になっており、この親の判定は1か2でマークされています。
つまり、プログラム上のchildは、child[]=(3,1,1,2,1)というような配列になっています。
まとめると、親1の巡回路を(1,2,3,4,5)、親2の巡回路を(2,1,3,5,4)、子の出発都市を3とする。
この時(1,1,2,1)の順番で親の都市が選択された場合、子の巡回路は、(3,1,2,5,4)となります。
この親1、親2の振り分けの部分がプログラムではうまく書くことができません。
もうすでにchildに入れられた都市が重複して入れられてしまうのです。
雑なアルゴリズムですが、よろしくお願いします。
また、質問があれば何なりとお答えしますのでよろしくお願いします。
iはループの判定に、city_numは今回5都市ですので5です。