예제 #1
0
        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());
        }
예제 #2
0
        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}");
                }
            });
        }