Часть, где я получаю сообщение об ошибке (точнее, где я получаю всплывающее сообщение с сообщением об ошибке отладки! 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.
Я попытался изменить линию, где он назначает старые гены новому человеку, но независимо от того, что я пытаюсь, я не могу заставить его работать.
Если кто-то может показать мне, где (или как) я баловаться, я был бы очень благодарен :)
Edit: Шагая через отладчик, я получаю следующее
http://prnt.sc/b0iprq Unhandled исключение в .... в LearnCPP.exe: Microsoft C++ исключения: станд :: out_of_range в ячейке памяти .....
другого редактирования: Просто чтобы быть ясно, именно это точная линия, где происходит преждевременное прекращение:
new_individuals[k].chromosomes[0].at(i) = individuals[father].chromosomes[0].at(i);
Лучший способ узнать, что не так, это пройти через ваш код с отладчиком. –
Я сделал, но это не делает его намного яснее для меня: \ http://prnt.sc/b0iprq - это то, что я получаю. В тексте: Необработанное исключение в .... в LearnCPP.exe: исключение Microsoft C++: std :: out_of_range в ячейке памяти ..... – Milan
Проверьте, соответствуют ли 'k' и' i' допустимые значения для доступа к элементам, когда вы достигните этой линии. –