Так что я смущен как ссылку на индексы массива индивидуумов. Существует класс людей, каждый из которых имеет набор генов и фитнес. Затем класс называется населением, которое представляет собой массив отдельных лиц. При создании объекта «Население», как вы относитесь к каждому человеку?Доступ к массивам в PNRG на основе генетического алгоритма? «нет соответствия для оператора []»
Ошибка возникает в MatingAlgorithm "турнирПопулярность [i] = oldPopulation [random% POPULATION_SIZE];" и main "nextGen [i] = child;"
Объяснение как то, что я делаю неправильно синтаксически, было бы действительно полезно.
Это исследовательский проект, поэтому я не могу предоставить общий доступ ко всему исходному коду. Но обеспечит как можно больше.
//GENETIC ALGORITHM PARAMETERS
const static int POPULATION_SIZE = 50;
const static double MUTATION_RATE = 1;//in percent
const static double CROSSOVER_RATE = 50;//in percent
const static int TOURNAMENT_SIZE = 4;
class Individual
{
//define characteristics of an individual
public:
unsigned long long genes;
double fitness;
//Getters and Setters
long long getGenes()
{
return genes;
}//getGenes
void setGenes(unsigned long long value)
{
genes = value;
}//SetGenes
double getFitness()
{
return fitness;
}//getFitness
void setFitness(double value)
{
fitness = value;
}//setFitness
};//Individual
class Population
{
public:
//CREATE A POPULATION OF INDIVIDUALS
Individual population[POPULATION_SIZE];
//initialize population
void initializePopulation()
{
//CODE HIDDEN
}//initialize population
};//Population
class MatingAlgorithm
{
public:
int random = rand();
Individual tournamentSelection(Population oldPopulation)
{
//MAKE A SUBPOPULATION OF TOURNAMENT INDIVIDUALS
Individual tournamentPopulation[TOURNAMENT_SIZE];
ошибка в этом блоке:
//RANDOMLY PICK FOUR INDIVIDUALS FROM THE POPULATION TO COMPETE
int i;
for(i = 0; i < TOURNAMENT_SIZE; i++)
{
tournamentPopulation[i] = oldPopulation[random % POPULATION_SIZE];
}//for
продолжает:
//TAKE ONLY THE FITTEST INDIVIDUAL
Individual fittest = tournamentPopulation[0];
for(i = 0; i < TOURNAMENT_SIZE; i++)
{
//IF THE CURRENT FITTEST IS WEAKER THAN THE NEXT INDIVIDUAL IN THE TOURNAMENT SUB POPULATION. DECLARE THE OTHER INDIVIDUAL THE NEW FITTEST
if(fittest.getFitness() < tournamentPopulation[i].getFitness())
{
fittest= tournamentPopulation[i];
}
}//for
return fittest;
}
//LOOP OVER POPULATION AND CREATE NEW INDIVIDUALS WITH CROSSOVER
Individual Crossover(Individual parent1, Individual parent2)
{
unsigned long long bit;
//Initialize Child
Individual child;
child.setGenes(0);
//CODE HIDDEN
return child;
}//crossover
void Mutate(Individual child)
{
//CODE HIDDEN
}//mutate
};//matingAlgorithm
int main()
{
cout<<"Starting...";
Population firstGen;
Population nextGen;
firstGen.initializePopulation();
MatingAlgorithm MA;
//PLACE NEW INDIVIDUALS IN NEW POPULATION;
for (int i = 0; i < POPULATION_SIZE; i++)
{
Individual parent1 = MA.tournamentSelection(firstGen);
Individual parent2 = MA.tournamentSelection(firstGen);
Individual child = MA.Crossover(parent1,parent2);
MA.Mutate(child);
ошибку на этой линии:
nextGen[i] = child;
продолжает
cout<<child.getGenes();
}
cout<<"code executed"<<endl;
return 0;
}//main
Короткий ответ: вам нужно реализовать 'operator []' для 'Population' – vu1p3n0x