我在C#(.NET)中有一个实现遗传算法的应用程序。
它有一个带有“个人”数组的“人口”类(另一个类),也有一个“基因”对象数组。问题是,在打印Population数组的内容时,除非我调试Individual类构造函数,否则它不会显示正确的值。如果不进行调试,则将其数组的全部大小填充相同的第一个“个人”对象。除了放置断点外,我什么也没做,它显示正确的值。
人口构造函数:
public Population(int populationSize, bool initial,int noOfReq)
{
population = new Individual[populationSize];
if (initial)
{
for (int i = 0; i < populationSize; i++)
{
Individual ind = new Individual(noOfReq,true);
population[i] = ind;
}
}
}
个体构造器
public Individual(int noOfReq, bool initial)
{
req = new Gene[noOfReq];
if (initial)
{
Random rand = new Random();
//Randomly assign the Req to a value between 0 and 2
for (int gene = 0; gene < noOfReq; gene++)
{
Gene newGene = new Gene();
req[gene] = newGene;
req[gene].name = "R" + gene;
req[gene].cost = rand.Next(1, 10);
int r = rand.Next(3);
req[gene].value= r;
}//if initial
}
如何解决这个问题?
注意:
Random rand = new Random(); int r = rand.Next(3);
在个人数组中的每个元素处填充Gene对象。