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.ConnectNodes(Node_i, Node_j); } } return(net); }
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.ConnectNodes(Node_i, Node_j); } } return net; }
public override Network create() { Network net = new Network(); List <INode> nodes = new List <INode>(); INode n = NodeCreate(); nodes.Add(n); net.AddNode(n); while (net.Nodes.Count() < NodeNum) { List <INode> newnodes = new List <INode>(); foreach (var node in nodes) { int k = SelectK() - node.Neighbours.Count; for (int i = 0; i < k; i++) { var newnode = NodeCreate(); newnodes.Add(newnode); net.AddNode(newnode); net.ConnectNodes(node, newnode); //満杯になったら抜ける if (!(net.Nodes.Count() < NodeNum)) { break; } } //満杯になったら抜ける if (!(net.Nodes.Count() < NodeNum)) { break; } } if (newnodes.Count == 0) { break; } nodes = newnodes; } return(net); }
public override Network create() { Network net = new Network(); List<INode> nodes = new List<INode>(); INode n = NodeCreate(); nodes.Add(n); net.AddNode(n); while (net.Nodes.Count() < NodeNum) { List<INode> newnodes = new List<INode>(); foreach (var node in nodes) { int k = SelectK() - node.Neighbours.Count; for (int i = 0; i < k; i++) { var newnode = NodeCreate(); newnodes.Add(newnode); net.AddNode(newnode); net.ConnectNodes(node, newnode); //満杯になったら抜ける if (!(net.Nodes.Count() < NodeNum)) break ; } //満杯になったら抜ける if (!(net.Nodes.Count() < NodeNum)) break ; } if (newnodes.Count == 0) break; nodes = newnodes; } return net; }
public override Network create() { //RandomPool.Get("envset").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.ConnectNodes(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("envset").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("envset").Next(notNeighbour.Count)); net.ConnectNodes(pivot, nextPartner); } RandomPool.Get("envset").Init(); return(net); }
public override Network create() { //RandomPool.Get("envset").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-1; i++) { //degreeが偶数じゃないとちゃんと働きません!!つか奇数ってどうやるの!? for (int j = 1; j <= degree/2; j++) { int index = i + j; if (index >= NodeNum) {//indexが範囲を超えていたら、一周回らせて収める index = index - NodeNum; } net.ConnectNodes(Nodes[i], Nodes[index]); } } List<AgentIO> sensorAgents = new List<AgentIO>(); //センサーエージェントの一覧を求める foreach (var node in net.Nodes) { if ((node as AgentIO).HasSensor) { sensorAgents.Add(node as AgentIO); } } /* pの割合のリンクをreconnectする。*/ //rewireするべきlinkをみつける var linksToRewire = SelectLinksToRewire(net.Links); foreach (var link in linksToRewire)//それぞれのリンクを張り替える { //リンクをはずす。 net.DisconnectNode(link); //軸はどっちか INode pivot = (RandomPool.Get("envset").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("envset").Next(notNeighbour.Count)); net.ConnectNodes(pivot, nextPartner); } //Nodes[NodeNum -1]に,全員をつながせたい //2014_0707:n人と繋がるように(NodeNum - n)に変更 //2014_0708:全員と繋げるためにリンクの張替え後に移動しました //2014_0901leaderNodeをランダムに繋げるように設定 //for (int i = 0; i < 30; i++) //{ // Node[0]と,LeaderNodesをつなぐ // int o = RandomPool.Get("envset").Next(linkNum);//leaderと繋がるノード // if (o != l) // { // net.ConnectNodes(Nodes[o], Nodes[l]); // } int l = RandomPool.Get("envset").Next(linkNum);//leaderノード int k = 0; int o = 0; while (o >= 0&&k != 30) { o = RandomPool.Get("envset").Next(linkNum);//leaderと繋がるノード if (o != l) { net.ConnectNodes(Nodes[o], Nodes[l]);//leaderとNodeをランダムに繋ぐ k++; } } // RandomPool.Get("envset").Init();///ここでノード指定?環境のノードっぽい return net; }
public override Network create() { //RandomPool.Get("envset").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.ConnectNodes(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("envset").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("envset").Next(notNeighbour.Count)); net.ConnectNodes(pivot, nextPartner); } RandomPool.Get("envset").Init(); return net; }