我在尝试找出为什么我无法通过一段代码获得正确功能时遇到问题。我环顾四周以尝试找到解决方案,但是,我未能做到这一点。下面是我的代码示例:
//Structs
typedef struct
{
int gene[60];
int fitness;
} individual;
typedef struct
{
int cond[5];
int out;
}rule;
//Array of individuals
individual population[P]
int function(individual solution){
int k = 0;
//Array of rules
rule rulebase[10]
for (int i = 0; i < 10; i++){
for (int j = 0; j < 5; j++){
rulebase[i].cond[j] = solution.gene[k++];
}
rulebase[i].out = solution.gene[k++];
}
for (int i = 0; i < 5; i++){
cout << rulebase[0].cond[i];
}
传递给函数的解决方案是“人口”中的第一个个体,并且基因数组仅包含二进制数,例如:
gene = [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1] //There will be 60 in total
所需的功能是用解决方案中找到的值填充规则库中的规则结构。例如,使用上面的示例,规则库中的第一条规则将在“ cond”数组中具有以下值:
[0, 0, 1, 0, 1]
和'out'将是解决方案中的下一个整数:
[1]
然后,下一个规则将以相同的方式用解决方案中的下一个值填充。
我遇到的问题是代码似乎用解决方案中的所有值填充了每个规则的“条件”数组,这与上述所需方法相反。例如,当我在'rulebase [0]'中打印基因时,我得到:
[0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1]
反对:
[0, 0, 1, 0, 1]
我似乎无法弄清楚为什么我会遇到这个问题,因为代码在我看来应该可以工作?由于我正在认真努力,任何帮助将不胜感激!
答案 0 :(得分:1)
一个规则在cond
中仅包含5个值,而不是您显示的10个值。只是您的代码会打印出错误的rulebase[0]
值,即它超出了数组范围并打印-除了cond
的{{1}}值之外,{{1的值下一条规则的}}和rulebase[0]
,在内存中紧随其后。