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; }
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; }
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; }