Esempio n. 1
0
        public override bool init(AGameGraph G, IntrusionGameParams Prm,
                                  APursuersPolicy initializedPursuers,
                                  UI.IPolicyGUIInputProvider Pgui,
                                  Dictionary <string, string> policyParams = null)
        {
            this.g              = (GridGameGraph)G;
            this.prm            = (IntrusionGameParams)Prm;
            this.pgui           = Pgui;
            this.activeStrategy = ((PPDPatrol)initializedPursuers).ActiveStrategy;


            //if (pgui.hasBoardGUI())
            //    policyParams.AddRange(argNames, pgui.ShowDialog(argNames.ToArray(), "StraightForwardIntruderPolicy init", null));

            //delayBetweenIntrusions = int.Parse(
            //    Utils.ParsingUtils.readValueOrDefault(
            //        policyParams,
            //        AppConstants.Policies.StraightForwardIntruderPolicy.DELAY_BETWEEN_INTRUSIONS,
            //        AppConstants.Policies.StraightForwardIntruderPolicy.DELAY_BETWEEN_INTRUSIONS_DEFAULT));


            Point target = g.getNodesByType(NodeType.Target).First();

            //Point topRight = target.subtruct(prm.r_e / 2, prm.r_e / 2);
            sensitiveArea = prm.SensitiveAreaSquare(target); //new GameLogic.Utils.Grid4Square(topRight, prm.r_e-1);
            myRand        = new ThreadSafeRandom().rand;
            return(prm.IsAreaSquare);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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
        }
Esempio n. 4
0
        /// <summary>
        /// constructs pursuers policy object, and returns its theoretical optimizer's output
        /// </summary>
        /// <param name="pursuersPolicy"></param>
        /// <param name="graph"></param>
        /// <param name="gameParams"></param>
        /// <param name="processArgs"></param>
        /// <returns></returns>
        public static Dictionary <string, string> getPursuersPolicyTheoreticalOptimizerResult(string pursuersPolicy,
                                                                                              AGameGraph graph,
                                                                                              IGameParams gameParams,
                                                                                              Dictionary <string, string> processArgs)
        {
            // construct a dummy policy, just to make the one-time calculation of preprocess
            APursuersPolicy initPP          = ReflectionUtils.constructEmptyCtorType <APursuersPolicy>(pursuersPolicy);
            var             theoryOptimizer = initPP.constructTheoreticalOptimizer();

            if (theoryOptimizer == null)
            {
                return(new Dictionary <string, string>());
            }

            theoryOptimizer.init(graph, gameParams, processArgs);
            theoryOptimizer.process();
            return(theoryOptimizer.optimizationOutput);
        }