我目前遇到了一个问题,我尝试生成一个随机旅游对象(Traveling Salesman)的列表。当我通过代码进行调试时,一切正常,但是当我运行代码(或者甚至运行这段代码)时,我的列表中充满了所有相同的对象。C#List对象在不调试时被重用
for (int i = 0; i < populationSize; i++)
{
var newTour = new Tour(distanceCalculator);
newTour.GenerateIndividual();
this.Tours[i] = newTour;
newTour = null;
}
的GenerateIndividual
方法是Tour
物体填满了城市旅游的一个方法,然后随机化它:
public void GenerateIndividual()
{
Path = new List<Location>(new Location[GenericGraph.NumberOfLocations()]);
// Loop through all our destination cities and add them to our tour
for (int cityIndex = 0; cityIndex < GenericGraph.NumberOfLocations(); cityIndex++)
{
SetLocation(cityIndex, GenericGraph.LocationList[cityIndex]);
}
// Randomly reorder the tour
Path = Path.Shuffle().ToList();
}
我所知道的洗牌正在因为路径总是以随机顺序。问题是只有当我调试到for循环时,路径中的Tour才会更新。例如,如果我的populationSize
是10,并且我调试了5次,我将会有一个随机5个游览的人口,然后最后的5个游览将与我调试过的最后一个相同。这里发生了什么? newTour
对象只在我调试时才被重置,但是当我运行C#时一遍又一遍地使用同一个对象?
谢谢你的帮助,这导致我的答案。 Random()对象每次都会得到相同的结果,我通过在类中创建一个私有静态Random()来解决它。 –