protected override void addRandomPieceOfFood(AgentsEnvironment env) { if (regenerateFood) { Food food = createRandomFood(env.Width, env.Height); env.Add(food); owner.Dispatcher.Invoke(() => { owner.Agents.Add(new FoodPresenter(food)); }); } }
public override void notify(AgentsEnvironment env) { var e = getEatenFood(env); owner.Dispatcher.Invoke(() => { foreach (var a in owner.Agents.ToArray()) { if (e.Any(f => a.agent == f)) { owner.Agents.Remove(a); } } }); base.notify(env); }
public TokenMangementTest() { _env = new AgentsEnvironment(); }
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(); }
public virtual void Interact(AgentsEnvironment env) { }