private void initEnv(string generatorstr,int agentNum, int sensorNum, int expectedDegree, double pRewire, int seed) { StopAnimation(); GeneratorCB.SelectedItem = generatorstr; AgentNumTB.Text = agentNum.ToString(); SensorNumTB.Text = sensorNum.ToString(); ExpectedDegreeTB.Text = expectedDegree.ToString(); PRewireTB.Text = pRewire.ToString(); SeedTB.Text = seed.ToString(); //環境つくるためのシードをセット これは環境つくるためのメソッドなのでOK. exp.SetEnvsetSeed(seed); //新しいネットワークジェネレータで //NetworkGenerator generator = new WSmodelNetworkGenerator(agentNum, expectedDegree, pRewire); NetworkGenerator generator = new WSmodelNetworkGenerator(agentNum, expectedDegree, pRewire); if (generatorstr == "WS") { generator = new WSmodelNetworkGenerator(agentNum, expectedDegree, pRewire); } else if (generatorstr == "BA") { generator = new BAModelNetworkGenerator(agentNum, 10,expectedDegree);//, pRewire); } else if (generatorstr == "Random") { generator = new RandomNetworkGenerator(agentNum, expectedDegree);//, pRewire); } else if (generatorstr == "Leader") { generator = new LeaderNetworkGenerator(agentNum, expectedDegree, pRewire,99);//, pRewire); } generator.NodeCreate += ()=> new AgentIO(); //新たな環境を構築 env = new OSEnvironment(generator , sensorNum); exp.Environment = env; //figurePanelネットワークのオブザーバ(まだ不完全)に環境を追加 figurePanel.Environment = env; //エージェントのビューも更新 figurePanel.calcAgentViews(); //エージェント表示モジュールは状態表示モジュールを参照(選択の情報を受け渡す) figurePanel.AgentStatePanel = agentStatePanel; //ファイルにネットワークの情報を表示 L.g("env").WriteLine("" + env); L.g("env").Flush(); }
static void DoExperiment( int EXP_ID, string algoStr, string netStr, int size, double h_trg, int expd, int envSeed,//環境のシード int linkNum, double cluster,//クラスタ係数 string dirname ) { //ディレクトリを作成 L.gDirectory(dirname); //出力するファイルを宣言 L.gDefine("roundacc,aveacc"); //条件を表示 { L.g("all").WriteLine(""); L.g("all").Write("envSeed: " + envSeed); L.g("all").Write(" EXP_ID: "+ EXP_ID); //実験IDを L.g("all").Write(" Algo: " + algoStr);//アルゴリズムの名前を表示 L.g("all").Write(" agentnum: " + size); L.g("all").Write(" linkNum: " + linkNum); L.g("all").Write(" cluster: " + cluster);//クラスタ係数 L.g("all").Write(" h_trg: " + h_trg); L.g("all").Write(" expd: " + expd); L.g("roundacc").WriteLine(""); } {//実験一回し Experiment exp = new Experiment(150,2000);//150ラウンド,2000ステップの実験 exp.SetEnvsetSeed(envSeed); exp.SetFactSeed(0); NetworkGenerator generator = null; //環境を作る if (netStr == "WS") { generator = new WSmodelNetworkGenerator(size, expd, 0.12); } else if (netStr == "BA") { generator = new BAModelNetworkGenerator(size, 4,2); } else if (netStr == "Random") { generator = new RandomNetworkGenerator(size,16); } //リーダーネットワークの導入 2014_0707追加 else if (netStr == "Leader") { generator = new LeaderNetworkGenerator(size, expd, 0.12, linkNum); } //シェルを作る generator.NodeCreate += ()=> new AgentIO(); //generateしてくれる。 OSEnvironment env = new OSEnvironment(generator, (int)(size * 0.05)); //エージェントに脳みそをいれてやる foreach (AgentIO agentIO in env.Network.Nodes) { agentIO.Algorithm = (AlgorithmFactory.CreateAlgorithm(algoStr, h_trg)); } //ファイルにネットワークの情報を表示 L.g("env").WriteLine("" + env); L.g("env").Flush(); exp.Environment = env; //実験を実行 var expResult = exp.Run(); } //ファイルに書き込み L.Flush(); }