Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;遗传算法变异误差_C++_Genetic Algorithm_Mutation - Fatal编程技术网

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)