public Evolution(int populationCount, int variableCount, int valueCount, Random random) { Id = ObjectId.GenerateNewId(); ValueCount = valueCount; VariableCount = variableCount; Population = new List <MemberModel>(); Generation = 0; Done = false; TotalMembers = populationCount; Target = new MemberModel(); Target.Variables = new List <int>(); History = new List <int>(); for (var j = 0; j < variableCount; j++) { var value = random.Next(0, valueCount); Target.Variables.Add(value); } for (var i = 0; i < populationCount; i++) { var member = new MemberModel(); member.Variables = new List <int>(); for (var j = 0; j < variableCount; j++) { var value = random.Next(0, valueCount); member.Variables.Add(value); } member.SetFitness(Target); Population.Add(member); } Population = Population.OrderByDescending(p => p.Fitness).ToList(); Insert(); }
public MemberModel Couplement(MemberModel mate) { var baby = new MemberModel(); var random = new Random(); int crossIndex = random.Next(0, Variables.Count); bool activeParent = random.Next(0, 1) % 2 == 0; for (var i = 0; i < Variables.Count; i++) { if (activeParent) { if (i < crossIndex) { baby.Variables.Add(Variables[i]); } else { baby.Variables.Add(mate.Variables[i]); } } else { if (i < crossIndex) { baby.Variables.Add(mate.Variables[i]); } else { baby.Variables.Add(Variables[i]); } } } return(baby); }