現在、私はランダムなTourオブジェクト(Traveling Salesman)のリストを生成しようとしています。私はコードをデバッグすると、すべて正常に動作しますが、コードを実行する(またはコードのこのセクションを実行するだけでも)私のリストはすべて同じオブジェクトでいっぱいです。デバッグしていないときにリストオブジェクトが再利用される
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();
}
パスがランダムな順序で常にあるので、私はシャッフルが働いている知っています。問題はPath for the Tourがforループにデバッグする場合にのみ更新されることです。たとえば、私のpopulationSize
が10で、5回にわたってデバッグした場合、5つの無作為化されたツアーを持つ人口があります。最後の5回のツアーは、最後にデバッグしたものと同じになります。ここで何が起きてるの? newTour
オブジェクトはデバッグ時にのみリセットされますが、C#を実行すると同じオブジェクトを何度も何度も使用していますか?
ありがとうございました。これが私に答えました。 Random()オブジェクトは毎回同じ結果を返していましたが、クラス内にプライベートな静的Random()を作成して解決しました。 –