C++ c++;遗传算法变异误差
我的遗传算法中的变异函数有问题。我也不太明白我做错了什么。我已经看过这段代码一段时间了,我认为逻辑是正确的,它只是没有产生我想要的结果 问题 当我输出位于子结构中的二进制数组时,如果任何位发生了变异,那么将更改一个随机数,而不是应该更改的那个 比如说C++ c++;遗传算法变异误差,c++,genetic-algorithm,mutation,C++,Genetic Algorithm,Mutation,我的遗传算法中的变异函数有问题。我也不太明白我做错了什么。我已经看过这段代码一段时间了,我认为逻辑是正确的,它只是没有产生我想要的结果 问题 当我输出位于子结构中的二进制数组时,如果任何位发生了变异,那么将更改一个随机数,而不是应该更改的那个 比如说 0000000是二进制字符串 第二天发生了突变 钻头 结果将是0001000 本节位于主管道内 for (int Child = 0; Child < ParentNumberInit; Child++) { cout <&
- 0000000是二进制字符串
- 第二天发生了突变 钻头
- 结果将是0001000
for (int Child = 0; Child < ParentNumberInit; Child++)
{
cout << endl;
mutation(child[Child],Child);
}
for(int-Child=0;Child 不能用这种方法来限制突变率。你需要将突变位与突变发生的概率分开
for (int z = 0; z < Binscale; z++)
{
if (rand() % 100 < MutationRate)
{
// flip bit
Child1.binary_code[z] += 1;
Child1.binary_code[z] %= 2;
}
}
你不能用这种方法来限制突变率。你需要将突变位与突变发生的概率分开
for (int z = 0; z < Binscale; z++)
{
if (rand() % 100 < MutationRate)
{
// flip bit
Child1.binary_code[z] += 1;
Child1.binary_code[z] %= 2;
}
}
试试这个:
void mutation(Parent& Child1,int childnumber)
试试这个:
void mutation(Parent& Child1,int childnumber)
你期望得到什么结果?你得到什么结果?你真的应该使用std::vector
而不是字符串。而且,mutation=0
没有任何作用,因为你在下一行将它设置为不同的值。你也没有修改任何内容,因为你正在将结构父对象的副本传递给de>突变
。突变率约为25(只是为了确保它有效)当我输出数组时,我希望看到与函数中已更改的位完全匹配的位的变化。你在哪里输出数组,在变异中还是在它的调用者中?重复Oli Charlesworth的问题:你希望更改哪一位?我发现很难相信会有任何变化是的,因为你通过值传递Child1
。你期望得到什么结果?你得到什么结果?你真的应该使用std::vector
而不是字符串。另外,mutation=0
没有任何作用,因为你在下一行中将它设置为不同的值。你也没有修改任何东西,因为y您正在将struct父项的副本传递给mutation
。变异率约为25(只是为了确保它有效)当我输出数组时,我希望看到与函数中已更改的位完全匹配的位的变化。你在哪里输出数组,在变异中还是在它的调用者中?重复Oli Charlesworth的问题:你希望更改哪一位?我发现很难相信会有任何变化是的,因为您是按值传递Child1
。请您再给我解释一下,我不太清楚understand@Will:事实上,这就是你所拥有的。我一开始误读了。@Will:你的变量突变有点标记错误。这不是突变本身,而是突变不会发生在某个特定个体上的概率一点。你现在能看到我的迪莱玛吗?我不明白逻辑上有什么错。的确。我应该称之为随机数。你能给我解释一下吗。我不太明白understand@Will:事实上,这就是你所拥有的。我一开始误读了。@Will:你的变量突变有点标记错误。它不是突变本身,是指某一特定部位不会发生突变的概率。你能看到我的dilema吗?我不明白逻辑中有什么错误。的确。我应该称之为随机数。将生成的每个随机数更改为1ha。将生成的每个随机数更改为1ha。
void mutation(Parent& Child1,int childnumber)