Exemplo n.º 1
0
        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);
        }