Exemplo n.º 1
0
        public void init(APursuersPolicy pursuerJointPolicy, IEvadersPolicy evadersJointPolicy)
        {
            TotalDistancesToSink = 0;
            MinDistanceToSink    = double.MaxValue;
            currentRound         = 0;
            IsFinished           = false;
            EliminatedRouters    = new List <PointF>();
            rand        = new ThreadSafeRandom();
            routersAlg  = (AdvRoutingRouterPolicyBase)evadersJointPolicy;
            pursuersAlg = (AdvRoutingPursuersPolicyBase)pursuerJointPolicy;
            pursuerTurn = false;

            routerIdxToPoint = routersAlg.getInitialNetwork();
            sink             = routersAlg.sink;
            var allRoutersSet = new HashSet <PointF>();

            routerPointToIdx = new Dictionary <PointF, int>();
            o_C = new List <PointF>();

            if (routerIdxToPoint.Count == 0)
            {
                finishGame();
                InitialDistanceToSink = double.MaxValue;
                TotalDistancesToSink  = double.MaxValue;
                transferredData       = 0;
                return;
            }

            for (int r = 0; r < routerIdxToPoint.Count; ++r)
            {
                routerPointToIdx[routerIdxToPoint[r]] = r;
                allRoutersSet.Add(routerIdxToPoint[r]);
            }
            allRouters = new GoE.Utils.PointDataStructs.PointFSet(routerIdxToPoint);


            HashSet <PointF> connectedToSink = new HashSet <PointF>();

            checkConnectivityRec(sink, allRoutersSet, connectedToSink);
            connectedToSink.Remove(sink);

            if (Params.singleSourceRouter)
            {
                InitialDetectedRouter = routersAlg.SourceRouter;
            }
            else
            {
                InitialDetectedRouter = connectedToSink.ToList().chooseRandomItem(rand.rand);//routerIdxToPoint[rand.Next(0, routerPointToIdx.Count)];
            }
            InitialDistanceToSink = InitialDetectedRouter.subtruct(sink).distance(new PointF(0, 0));

            pursuersAlg.setInitialDetectedRouter(InitialDetectedRouter);
        }
Exemplo n.º 2
0
        /// <summary>
        /// expects initialized policies
        /// </summary>
        public void init(APursuersPolicy ipursuerJointPolicy,
                         IEvadersPolicy ievadersJointPolicy)
        {
            this.Pi_p        = (AGoEPursuersPolicy)ipursuerJointPolicy;
            this.Pi_e        = (AGoEEvadersPolicy)ievadersJointPolicy;
            state            = new GameState();
            remainingEvaders = gm.A_E.Count;
            pursuerTurn      = true;
            myRand           = new EvolutionaryStrategy.ThreadSafeRandom().rand;

            initGameState();

            Pi_p.setGameState(t, O_c, O_d1.Union(O_d2));

            IsFinished  = false;
            sinks       = gr.getNodesByType(NodeType.Sink);
            sinksSearch = new GoE.Utils.Algorithms.PointSet(sinks);


            AccumulatedEvadersReward = 0;
            if (transmitPoints == null || currentlyAllocatedTransmitPointsRE != gm.r_e)
            {
                // we don't count reward as written in the paper(in the game end), to improve performance
                //HashSet<Point> transmitPoints = new HashSet<Point>();
                //GoE.Utils.AlgorithmUtils.PointSet transmitPoints;
                List <Point> dummytransmitPoints = new List <Point>(sinks.Count * (2 * gm.r_e * (gm.r_e + 1) + 1));
                // tells from where an evader may transmit so the transmission reaches a sink
                foreach (var s in sinks)
                {
                    var tmpTransmitPoints = gr.getNodesWithinDistance(s, gm.r_e);
                    foreach (var p in tmpTransmitPoints)
                    {
                        //transmitPoints.Add(p);
                        dummytransmitPoints.Add(p);
                    }
                }

                currentlyAllocatedTransmitPointsRE = gm.r_e;
                transmitPoints = new PointSet(dummytransmitPoints);
                transmitPoints.removeDupliacates();
            }

            dataInSink = new GoE.GameLogic.Utils.DataUnitVec();
            dataInSink.Add(DataUnit.NIL);
            dataInSink.Add(DataUnit.NOISE); // we add NIL and noise so we don't count them as new units
        }