| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using System;
- using System.Collections.Generic;
- namespace MultiAgentSystemPCL
- {
- public delegate void EnvironmentUpdated(List<Waste> _waste, List<WasteAgent> _agents);
- public class WasteEnvironment
- {
- List<Waste> wasteList;
- List<WasteAgent> agents;
- public Random randomGenerator;
- double MAX_WIDTH;
- double MAX_HEIGHT;
- protected int nbIterations = 0;
- public event EnvironmentUpdated environmentUpdatedEvent;
- public WasteEnvironment(int _nbWaste, int _nbAgents, double _width, double _height, int _nbWasteTypes)
- {
- if (randomGenerator == null)
- {
- randomGenerator = new Random();
- }
- MAX_WIDTH = _width;
- MAX_HEIGHT = _height;
- wasteList = new List<Waste>();
- for (int i = 0; i < _nbWaste; i++)
- {
- Waste waste = new Waste(randomGenerator.NextDouble() * MAX_WIDTH, randomGenerator.NextDouble() * MAX_HEIGHT, randomGenerator.Next(_nbWasteTypes));
- wasteList.Add(waste);
- }
- agents = new List<WasteAgent>();
- for (int i = 0; i < _nbAgents; i++)
- {
- WasteAgent agent = new WasteAgent(randomGenerator.NextDouble() * MAX_WIDTH, randomGenerator.NextDouble() * MAX_HEIGHT, this);
- agents.Add(agent);
- }
- }
- public void Update()
- {
- foreach (WasteAgent agent in agents)
- {
- agent.UpdateDirection(wasteList);
- agent.UpdatePosition(MAX_WIDTH, MAX_HEIGHT);
- }
- nbIterations++;
- if (nbIterations % 500 == 0)
- {
- wasteList.Reverse();
- }
- if (environmentUpdatedEvent != null)
- {
- environmentUpdatedEvent(wasteList, agents);
- }
- }
- internal Waste TakeWaste(Waste _goal)
- {
- if (_goal.Size == 1)
- {
- wasteList.Remove(_goal);
- return _goal;
- }
- else
- {
- _goal.Decrease();
- Waste load = new Waste(_goal);
- return load;
- }
- }
- internal void SetWaste(Waste _goal)
- {
- _goal.Increase();
- }
- }
- }
|