public void update(SimulatorExperiment engine, Environment environment) { if (first) { distances = new double[environment.POIPosition.Count, engine.robots.Count]; for (int v = 0; v < environment.POIPosition.Count; v++) { for (int w = 0; w < engine.robots.Count; w++) { distances[v, w] = radius; } } first = false; return; } double dist = 0; for (int k = 0; k < engine.robots.Count; k++) { Robot r = engine.robots[k]; for (int j = 0; j < environment.POIPosition.Count; j++) { dist = EngineUtilities.euclideanDistance(r.location, new Point2D(environment.POIPosition[j].X, environment.POIPosition[j].Y)); if (dist < distances[j, k]) { distances[j, k] = dist; } } } }
double IFitnessFunction.calculate(SimulatorExperiment engine, Environment environment, out double[] objectives) { objectives = null; /* double a = 0; * * grid = ((GridCollision)((MultiAgentExperiment)engine).collisionManager).grid; * * int dim = grid.coarseness; * for (int x = 0; x < dim; x++) * { * for (int y = 0; y < dim; y++) * { * int gx = (int)((double)x * grid.gridx) + (int)(grid.gridx / 2.0); * int gy = (int)((double)y * grid.gridy) + (int)(grid.gridy / 2.0); * if ((environment.AOIRectangle.Contains(gx, gy))) * a += grid.grid[x, y].viewed; * } * }*/ double fit = 0; if (allLeft) { for (int j = 0; j < engine.robots.Count; j++) { if (!environment.AOIRectangle.Contains((int)engine.robots[j].location.x, (int)engine.robots[j].location.y)) { fit += 50; } else if (!engine.robots[j].collide_last) { fit += 10.0 * (1.0 - (EngineUtilities.euclideanDistance(engine.robots[j].location, environment.goal_point) / 145.0)); } } } return(accum + fit); }