public override void Repair() { var items = CandidateItem.Count; var selected = Genes.Count(p => p); while (CandidateItem.Zip(Genes, (item, b) => new { item, b }).Where(p => p.b).Sum(p => p.item.Size) > Capacity) { var deslect = _randomizer.IntLessThan(selected); for (int i = 0; i < items; i++) { if (Genes[i]) { if (deslect == 0) { Genes[i] = false; selected--; break; } deslect--; } } } }
void CalcFitness() { Fitness = CandidateItem.Zip(Genes, (item, b) => new { item, b }).Where(p => p.b).Sum(p => p.item.Value); }