Ejemplo n.º 1
0
        public override Network create()
        {
            //完全グラフ

            //ネットワーク
            Network net = new Network();

            //エージェントを登録
            for (int i = 0; i < NodeNum; i++)
            {
                net.AddNode(NodeCreate());
            }

            //完全ネットを作成
            foreach (var Node_i in net.Nodes)
            {
                foreach (var Node_j in net.Nodes)
                {
                    if (Node_i == Node_j)
                        break;
                    net.ConnectNode(Node_i, Node_j);

                }

            }

            return net;
        }
Ejemplo n.º 2
0
        public override Network create()
        {
            RandomPool.Get("setenv").Init();

            Network net = new Network();

            INode[] Nodes = new INode[NodeNum];

            //エージェントを登録
            for (int i = 0; i < NodeNum; i++)
            {
                Nodes[i] = NodeCreate();
                net.AddNode(Nodes[i]);
            }

            //まずは輪っかをつくる
            for (int i = 0; i < NodeNum; i++)
            {
                //degreeが偶数じゃないとちゃんと働きません!!つか奇数ってどうやるの!?

                for (int j = 1; j <= degree/2; j++)
                {
                    int index = i + j;

                    if (index >= NodeNum)
                    {//indexが範囲を超えていたら、一周回らせて収める
                        index = index - NodeNum;
                    }

                    net.ConnectNode(Nodes[i], Nodes[index]);
                }
            }

            /* pの割合のリンクをreconnectする。*/

            //rewireするべきlinkをみつける
            var linksToRewire = SelectLinksToRewire(net.Links);

            foreach (var link in linksToRewire)//それぞれのリンクを張り替える
            {
                //リンクをはずす。
                net.DisconnectNode(link);

                //軸はどっちか
                INode pivot = (RandomPool.Get("setenv").NextDouble() <= 0.5 ? link.Node1 : link.Node2);

                //ご近所じゃないやつを探す
                var neighbourOfPivot = net.GetNeighbour(pivot);
                var allNodes = new List<INode>(net.Nodes);

                foreach (var node in neighbourOfPivot)
                {
                    allNodes.Remove(node);
                }
                allNodes.Remove(pivot);
                var notNeighbour = allNodes;

                //次のパートナーを選ぶ。
                INode nextPartner = notNeighbour.ElementAt(RandomPool.Get("setenv").Next(notNeighbour.Count));

                net.ConnectNode(pivot, nextPartner);
            }

            RandomPool.Get("setenv").Init();

            return net;
        }
Ejemplo n.º 3
0
        public override Network create()
        {
            Console.WriteLine("make random network!");
            //ネットワーク
            Network net = new Network();

            //ノードであるAgent
            for (int i = 0; i < NodeNum; i++)
            {
                net.AddNode(NodeCreate());//エージェントを選択可能にしたいよね
            }

            foreach (var Node_i in net.Nodes)
            {
                foreach (var Node_j in net.Nodes)
                {
                    if (Node_i == Node_j)
                    {
                        break;
                    }

                    double r = RandomPool.Get("setenv").NextDouble();

                    if (r < 0.3)
                    { //0.3の確率でコネクション作成

                        net.ConnectNode(Node_i, Node_j);
                    }
                }

                var nodes = net.Nodes;
                if (Node_i.Neighbours.Count() == 0)
                {
                    int r;
                    do
                    {
                        r = RandomPool.Get("setenv") .Next(NodeNum);
                    } while (nodes.ElementAt(r) == Node_i);

                    net.ConnectNode(Node_i, nodes.ElementAt(r));

                }
            }
            //まだ!!
            return net;
        }