Example #1
0
        static void Main(string[] args)
        {
            RandomPool.Declare("envset", 0);
            //RandomPool.Get();

            NetworkGenerator generator = new WSmodelNetworkGenerator(100, 8, 0.12);
            generator.NodeCreate += () => new Node();
            //          =  generator.NodeCreate += createNode;
            Network net = generator.create();

            //Console.WriteLine(net);

            //NetworkGenerator generator2 = new LeaderNetworkGenerator(100, 8, 0.12, 30);
            //環境を作る
            //generator2.NodeCreate += () => new Node();
            //Network leaderNet = generator2.create();
            //double c = LeaderNetworkGenerator.cluster(leaderNet.Nodes.ElementAt(0),leaderNet);
            //Console.WriteLine(leaderNet);

            for (int i = 0; i < net.Nodes.Count(); i++)
            {
                double C = WSmodelNetworkGenerator.cluster(net.Nodes.ElementAt(i), net);
                Console.Write("clusters{0} = ", i);
                Console.WriteLine( + C);
            }
        }
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();
        }
Example #3
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();
        }