У меня есть проблема с функцией мутации в моем генетическом алгоритме. Я тоже не могу понять, что я делаю неправильно. Я просмотрел этот код некоторое время, и я думаю, что логика правильная, это просто не приводит к результатам, которые я хочу.C++ Генетический алгоритм Ошибка мутации
Проблема Когда я вывожу двоичный массив, расположенный в дочерней структуре, если мутация произошла на любом из битов, тогда будет изменено случайное число, а не то, что должно быть.
, например
- 0000000 является двоичная строка
- мутация произошла на втором бит
- 0001000 будет результат
Этот раздел находится в главном.
for (int Child = 0; Child < ParentNumberInit; Child++)
{
cout << endl;
mutation(child[Child],Child);
}
Это функция мутации
void mutation(struct Parent Child1,int childnumber)
{
int mutation; // will be the random number generated
cout << endl << "Child " << (childnumber+1) << endl;
//loop through every bit in the binary string
for (int z = 0; z < Binscale; z++)
{
mutation = 0; // set mutation at 0 at the start of every loop
mutation = rand()%100; //create a random number
cout << "Generated number = " << mutation << endl;
//if variable mutation is smaller, mutation occurs
if (mutation < MutationRate)
{
if(Child1.binary_code[z] == '0')
Child1.binary_code[z] = '1';
else if(Child1.binary_code[z] == '1')
Child1.binary_code[z] = '0';
}
}
}
Это время выводится в основном как этот
for (int childnumber = 0; childnumber < ParentNumberInit; childnumber++)
{
cout<<"Child "<<(childnumber+1)<<" Binary code = ";
for (int z = 0; z < Binscale; z ++)
{
cout<<child[childnumber].binary_code[z];
}
cout<<endl;
}
Какой результат вы ожидаете? Какой результат вы получаете? –
Вы действительно должны использовать 'std :: vector' вместо строки. Кроме того, 'mutation = 0' ничего не делает, поскольку вы устанавливаете его в другое значение в следующей строке. Вы также ничего не меняете, потому что вы передаете копию 'struct Parent' в' mutation'. –
Скорость мутации составляет около 25 (просто чтобы убедиться, что она работает) Я ожидаю увидеть, когда я выведу массив, изменение битов, которое отлично соответствует тем, которые были изменены в функции. –