private static void initializeGeneticAlgorithm( int populationSize, int parentalChromosomesSurviveCount, OptimizableNeuralNetwork baseNeuralNetwork) { Population <OptimizableNeuralNetwork> brains = new Population <OptimizableNeuralNetwork>(); for (int i = 0; i < (populationSize - 1); i++) { if (baseNeuralNetwork == null) { brains.Add(NeuralNetworkDrivenAgent.randomNeuralNetworkBrain()); } else { brains.Add(baseNeuralNetwork.Mutate()); } } if (baseNeuralNetwork != null) { brains.Add(baseNeuralNetwork); } else { brains.Add(NeuralNetworkDrivenAgent.randomNeuralNetworkBrain()); } ga = new GeneticAlgorithm <OptimizableNeuralNetwork, double>(brains, TournamentEnvironmentFitness.Calculate); ga.ParentChromosomesSurviveCount = parentalChromosomesSurviveCount; }
private void MenuItem_Click(object sender, RoutedEventArgs e) { var rx = Rnd.NextDouble(); var ry = Rnd.NextDouble(); var ra = Rnd.NextDouble(); var agent = new NeuralNetworkDrivenAgent(rx, ry, ra); environment.Add(agent); Agents.Add(new ConsumerPresenter(agent) { X = 1000.0 * rx, Y = 1000.0 * ry, Angle = 360.0 * ra }); }
public MainWindow() { InitializeComponent(); Agents = new ObservableCollection <AgentPresenter>(); initializeGeneticAlgorithm(5, 1, null); const int w = 600; const int h = 400; environment = new AgentsEnvironment(w, h); environment.AgentEvent += new RenderObserver(this).notify; NeuralNetwork brain = ga.GetBest(); for (int i = 0; i < 15; i++) { int x = Rnd.Next(w); int y = Rnd.Next(h); double direction = Rnd.NextDouble() * 2 * Math.PI; NeuralNetworkDrivenAgent agent = new NeuralNetworkDrivenAgent(x, y, direction); agent.setBrain(brain); Agents.Add(new ConsumerPresenter(agent)); environment.Add(agent); } for (int i = 0; i < 10; i++) { Food food = createRandomFood(w, h); environment.Add(food); Agents.Add(new FoodPresenter(food)); } new Thread(() => { while (true) { try { Thread.Sleep(50); if (play) { environment.timeStep(); Dispatcher.Invoke(() => { foreach (var pres in Agents) { pres.X = pres.agent.X * 1000 / w; pres.Y = pres.agent.Y * 1000 / h; var cons = pres as ConsumerPresenter; if (cons != null) { cons.Angle = (cons.agent as NeuralNetworkDrivenAgent).Angle * 180 / Math.PI; } } }); } } catch { break; } } }).Start(); }