我正在处理字典以及它们彼此引用的最大问题。我需要创建一个深度克隆(像这样的smth命名)。
我使用 population 作为我存储图形的初始字典,然后我需要从 Population 中获取元素,更改它们,写入 childPopulation 然后一些计算和更改的元素变为分数。 Finnaly我需要合并 population 和 score 词典。
问题在于,当我从 population 更改元素时,它们会因此而改变。我需要一些如何创建 population 的副本,而这些副本将不会被初始化引用。
population = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();
addElement(p1, initialGraph);
Run(initialGraph, p1);
double scoreBest = RMSECalc();
population.Add(initialGraph, scoreBest);
while (scoreBest >= 1.0)
{
childPopulation = new List<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>>();
var parentList = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();
foreach (var parent in population)
{
childPopulation.Add(Mutate(parent.Key));
}
GetBestSolution(childPopulation);
scores = scores.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
if (scores.First().Value < scoreBest)
scoreBest = scores.First().Value;
scores.ToList().ForEach(x => population.Add(x.Key, x.Value));
population.Take(50);
scores = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();
childPopulation = new List<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>>();
}