エラーが発生する部分 (より具体的には、Debug error! Abort () has been called というポップアップが表示される部分) は、クロスオーバーを実行しようとする部分です。
for (int i = 0; i < number_of_variables; i++)
{
int gene1 = gene_selection(rng);
std::cout << gene1 << " ";
if (gene1 == 0)
{
std::cout << "test 0";
new_individuals[k].chromosomes[0].at(i) = individuals[father].chromosomes[0].at(i);
}
else if (gene1 == 1)
{
std::cout << "test 1";
new_individuals[k].chromosomes[0].at(i) = individuals[mother].chromosomes[0].at(i);
}
}
「テスト 0」または「テスト 1」を表示するには十分ですが、実際には父/母からの遺伝子を new_individual に割り当てません。
古い遺伝子を新しい個体に割り当てるラインを変更しようとしましたが、何を試しても機能しません。
どこで(またはどのように)私が台無しになっているかを誰かが教えてくれたら、とても感謝しています:)
編集:デバッガーをステップ実行すると、次のようになります
http://prnt.sc/b0iprq での未処理の例外 .... LearnCPP.exe: Microsoft C++ 例外: std::out_of_range のメモリ位置 .....
別の編集:明確にするために、中止が発生するのはこの正確な行です:
new_individuals[k].chromosomes[0].at(i) = individuals[father].chromosomes[0].at(i);