private AgentModel[] GenerateAgents(AgentModelFactory agentFactory, AgentModel[] survivors) { var agentModels = new List <AgentModel>(NumberOfAgents); foreach (var survivor in survivors) { survivor.Generation++; } agentModels.AddRange(survivors); //create the agents for (int x = 0; x < NumberOfAgents - survivors.Length; x++) { //Create the agent model var agentModel = agentFactory.Create(); agentModels.Add(agentModel); } return(agentModels.ToArray()); }
private void Run() { var random = new Random(); var agentModelFactory = new AgentModelFactory(_instructionFactory, MemorySize, NumberOfInstructions); Task.Run(() => { AgentModel[] survived = new AgentModel[] {}; for (int generationIndex = 0; generationIndex < 100; generationIndex++) { AgentModel[] toRun = GenerateAgents(agentModelFactory, survived); Console.WriteLine($"Generation {generationIndex} starting...."); FoodX = (int)(random.NextDouble() * 800) + 100; FoodY = (int)(random.NextDouble() * 800) + 100; Console.WriteLine($" Food is at ({FoodX}, {FoodY})"); survived = RunAgents(toRun); string message = $" Generation {generationIndex} complete - {survived.Length} survived with max generation {survived.Max(a => a.Generation)}!"; Console.WriteLine(message); } Console.WriteLine("Survivors:"); foreach (var agent in survived.OrderByDescending(a => a.Generation)) { Console.WriteLine($" Agent {agent.Id} - generation {agent.Generation}"); } }); }