我得到错误的部分(更具体地说,我得到一个弹出窗口说 Debug error!Abort () 已被调用)是我尝试进行交叉的部分。
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);