Esempio n. 1
0
        private void InitEdges(int iMaxEdges)
        {
            int i = 0, j = 0;

            for (i = 0; i < Length; i++)
            {
                for (j = 0; j < Width; j++)
                {
                    int iEdges = RandomGenerator.Next(iMaxEdges - 1) + 1;
                    while (iEdges > 0)
                    {
                        int iEdge = RandomGenerator.Next(Width);
                        if (!m_aEdges[i, j, iEdge])
                        {
                            m_aEdges[i, j, iEdge] = true;
                            iEdges--;
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        //implements a two cycle map
        private int AssignStacksToAgents()
        {
            //first we create a cycle of all but one
            m_lAgentStacks = new List <List <int> >();
            int        iCurrentStack = 0;
            bool       bSmallAgent   = false;
            List <int> lStacks       = null;

            for (int i = 0; i < Arms - 1; i++)
            {
                double dRand = RandomGenerator.NextDouble();
                bSmallAgent = dRand < 0.0;

                int cStacks = 0;
                if (bSmallAgent)
                {
                    cStacks = RandomGenerator.Next(2) + 3;
                }
                else
                {
                    cStacks = RandomGenerator.Next(MaxStacksPerAgent / 2) + MaxStacksPerAgent / 2 + 3;
                }
                lStacks = new List <int>();
                for (int j = 0; j < cStacks; j++)
                {
                    lStacks.Add(iCurrentStack + j);
                }
                m_lAgentStacks.Add(lStacks);
                iCurrentStack += cStacks - 1;
            }
            m_lAgentStacks.Last().Add(0);
            int iConnectStack1 = RandomGenerator.Next(iCurrentStack / 2);
            int iConnectStack2 = RandomGenerator.Next(iCurrentStack / 2) + iCurrentStack / 2;


            //now we cut the cycle in half
            lStacks = new List <int>();
            lStacks.Add(iConnectStack1);
            lStacks.Add(iCurrentStack + 1);
            lStacks.Add(iConnectStack2);
            m_lAgentStacks.Add(lStacks);

            m_lPublicStacks = new List <int>();
            for (int iStack = 0; iStack < iCurrentStack + 1; iStack++)
            {
                int cReachingArms = 0;
                foreach (List <int> l in m_lAgentStacks)
                {
                    if (l.Contains(iStack))
                    {
                        cReachingArms++;
                    }
                }
                if (cReachingArms > 1)
                {
                    m_lPublicStacks.Add(iStack);
                }
            }


            return(iCurrentStack + 2);
        }