private HashSet <ushort> DnaToUsedNodes(BitArray dna) { using (var mstNodes = new PooledList <int>(dna.Length + TargetNodes.Count)) using (var mst = new MinimalSpanningTree(mstNodes, Distances)) { for (var i = 0; i < dna.Length; i++) { if (dna[i]) { mstNodes.Add(i); } } var searchSpaceNodeCount = mstNodes.Count; for (var i = 0; i < TargetNodes.Count; i++) { mstNodes.Add(TargetNodes[i].DistancesIndex); } if (_orderedEdges != null) { mst.Span(_orderedEdges); } else { mst.Span(StartNode.DistancesIndex); } return(GetSkillNodeIds(mstNodes, searchSpaceNodeCount, mst.SpanningEdges)); } }
private void SetBestDnaAndSolution() { _bestDna = _ga.GetBestDNA(); var usedNodes = DnaToUsedNodes(_bestDna); _bestSolution = Extend(usedNodes); Return(usedNodes); }