C ++ Проблемы заполнения структур значениями из другой структуры - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблема с попыткой выяснить, почему я не получаю правильную функциональность с помощью фрагмента кода. Я искал вокруг, чтобы попытаться найти решение, однако я не смог этого сделать. Ниже приведен пример моего кода:

//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]

Кажется, я не могу понять, почему у меня возникает эта проблема, поскольку код выглядит так, как будто он должен работать? Любая помощь будет принята с благодарностью, так как я серьезно борюсь с ней!

1 Ответ

0 голосов
/ 14 ноября 2018

Правило содержит только 5 значений в cond, а не 10, как вы показываете. Только ваш код, который печатает значения rulebase[0], является неправильным, то есть превышает границы массива и печатает - в дополнение к cond -значениям rulebase[0] - значения out и cond следующее правило, которое - в памяти - будет следующим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...