У меня проблема с попыткой выяснить, почему я не получаю правильную функциональность с помощью фрагмента кода. Я искал вокруг, чтобы попытаться найти решение, однако я не смог этого сделать. Ниже приведен пример моего кода:
//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]
Тогда следующее правило будет заполнено следующими значениями в решении таким же образом.
Проблема, с которой я столкнулся, заключается в том, что код, по-видимому, заполняет массив 'cond' каждого правила всеми значениями в решении, в отличие от желаемого способа, описанного выше. Например, когда я печатаю гены в 'rulebase [0]', я получаю:
[0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1]
В отличие от:
[0, 0, 1, 0, 1]
Кажется, я не могу понять, почему у меня возникает эта проблема, поскольку код выглядит так, как будто он должен работать? Любая помощь будет принята с благодарностью, так как я серьезно борюсь с ней!