Example #1
0
        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();
        }
Example #2
0
        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();
        }