Beispiel #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);
            }
        }
Beispiel #2
0
 public void PlaySteps(int steps, int playstep_seed)
 {
     RandomPool.Declare(SeedEnum.PlayStepSeed, playstep_seed);
     for (int i = 0; i < steps; i++)
     {
         this.MyAlgo.PlayOneStep(this.MyNetwork, this.MyAgentSet, InfoEnum.Green, InfoEnum.Red);
     }
 }
Beispiel #3
0
        public I_AgentSet Generate(int agent_seed, AgentInitMode mode)
        {
            List <I_Agent> agent_list = new List <I_Agent>();

            RandomPool.Declare(SeedEnum.AgentSeed, agent_seed);
            foreach (var node in this.MyNetwork.NodeList)
            {
                var agent = new AgentFactory().Generate(node, this.InitOpinion, this.GreenSigma, this.RedSigma, mode);
                agent_list.Add(agent);
            }
            return(new BaseAgentSet(agent_list, agent_seed));
        }
Beispiel #4
0
        public I_Network Generate(int network_seed, bool seed_enable)
        {
            RandomPool.Declare(SeedEnum.LayoutSeed, network_seed);
            var state = 0;

            switch (state)
            {
            case 0:
                Console.WriteLine("-----");
                Console.WriteLine("ok Start Network Generation");
                var delete_success = ConvertNetwork.DeleteNetworkOutput();
                if (!delete_success)
                {
                    goto default;
                }

                var python_success = this.RawGenerate(network_seed, seed_enable);
                if (!python_success)
                {
                    goto default;
                }

                var raw_edge_list = ConvertNetwork.GetRawEdgeList();
                var node_num      = ConvertNetwork.GetRawNodeNum();
                var network_enum  = this.MyNetworkEnum;
                if (raw_edge_list == null || node_num == 0 || network_enum == NetworkEnum.Void)
                {
                    goto default;
                }

                Console.WriteLine("ok Load Raw Network");
                Console.WriteLine("ok Node: " + node_num);
                Console.WriteLine("ok Edge: " + raw_edge_list.Count);
                Console.WriteLine("ok NetworkEnum: " + network_enum.ToString());
                Console.WriteLine("ok Network Seed: " + network_seed);
                var network = new NetworkFactory().Generate(node_num, raw_edge_list, network_enum, network_seed);
                if (network == null)
                {
                    goto default;
                }

                Console.WriteLine("ok Success Network Generation");
                return(network);

            default:
                Console.WriteLine("no Failure Network Generation");
                return(null);
            }
        }
Beispiel #5
0
        public void Run()
        {
            this.MakeFileAndFolder();

            RandomPool.Declare(SeedEnum.RoundSeed, this.RoundSeed);
            RandomPool.Declare(SeedEnum.PlayStepSeed, this.RoundSeed);

            Console.WriteLine(this.PrintObject());
            this.MyAlgo.MyOSMLog.StartRecordRounds(this.OutputRoundFilePath);
            for (int current_round = 1; current_round <= this.TotalRounds; current_round++)
            {
                this.MyAlgo.RunOneRound(this.MyNetwork, this.MyAgentSet, current_round, this.RoundSteps);
            }
            this.MyAlgo.MyOSMLog.StopRecordRounds();
        }
Beispiel #6
0
        public void StartRound(int?seed = null)
        {
            //ラウンドの数字を進める
            Round++;

            //ステップははじめにもどす
            Step = 0;

            //何も渡されなければ、ラウンドIDをシードにする。
            if (seed == null)
            {
                seed = Round;
            }

            RandomPool.Declare("sensor", seed.Value);
        }
Beispiel #7
0
 public void SetSensorSeed(int s)
 {
     RandomPool.Declare("sensor", s);//ちゃんとinitEnvでseedの設定してるよ
 }
Beispiel #8
0
 public void SetFactSeed(int s)
 {
     RandomPool.Declare("fact", s);//ちゃんとinitEnvでseedの設定してるよ
 }
Beispiel #9
0
 public void SetEnvsetSeed(int s)
 {
     RandomPool.Declare("envset", s);//ちゃんとinitEnvでseedの設定してるよ
 }
Beispiel #10
0
        static void AutoExperiment()
        {
            //ディレクトリを作成
            L.gDirectory(DateTime.Now.ToString("yyyyMMdd_HHmmss"));
            L.gDefine("stepbelief,roundacc,aveacc,time,env");

            //集団規模のリスト

            //int[] sizeList = { 100, 250, 500, 750, 1000, 1500, 2000, 2500 };
            int[] sizeList = { 100, 1000 };

            //h_trgの種類
            double[] h_trgList = { 0.9, 0.94, 0.98, 1.0 };

            //expected d <d>
            double[] expdList = { 4, 6, 8, 10, 12 };


            //シードの種類の個数
            int envSeedNum = 10;

            var envSeedList = Enumerable.Range(0, envSeedNum);

            NodeCreaterCreater AATCC               = (double h_trg) => (() => new AAT(h_trg));
            NodeCreaterCreater DontReplyCC         = (double h_trg) => (() => new DontReply(h_trg));
            NodeCreaterCreater NoMoreBeliefCC      = (double h_trg) => (() => new NoMoreBelief(h_trg));
            NodeCreaterCreater EatingWordsCC       = (double h_trg) => (() => new EatingWords(h_trg));
            NodeCreaterCreater BelieveOnlySensorCC = (double h_trg) => (() => new BelieveOnlySensor(h_trg));

            Dictionary <string, NodeCreaterCreater> creatorList = new Dictionary <string, NodeCreaterCreater> {
                //{"AAT", AATCC },
                { "NewDontReply", DontReplyCC },
                //{"NoMoreBelief", NoMoreBeliefCC },
                //{"BelieveOnlySensor", BelieveOnlySensorCC},
                //{"EatingWords", EatingWordsCC },
            };


            //**************実験条件を表示***************
            {
                var logAll = L.g("all");
                logAll.WriteLine("////////////////////experimental condition ////////////////////");

                var    dt       = DateTime.Now;
                string routeDir = dt.ToString("yyyy/MM/dd HH:mm:ss\n");
                logAll.WriteLine("Date: " + routeDir);

                logAll.WriteLine("AgentNum");
                foreach (int size in sizeList)
                {
                    logAll.Write(size + ", ");
                }
                logAll.WriteLine("\n");

                logAll.WriteLine("h_trg");
                foreach (double h_trg in h_trgList)
                {
                    logAll.Write(h_trg + ", ");
                }
                logAll.WriteLine("\n");

                logAll.WriteLine("expd");
                foreach (int expd in expdList)
                {
                    logAll.Write(expd + ", ");
                }
                logAll.WriteLine("\n");


                logAll.WriteLine("algorithm");
                foreach (string creatorName in creatorList.Keys)
                {
                    logAll.Write(creatorName + ", ");
                }
                logAll.WriteLine("\n");

                logAll.WriteLine("envSeedNum: " + envSeedNum);
                logAll.WriteLine("\n");
            }


            //じっけんID
            int EXP_ID = 0;

            //時間をはかるよ
            DateTime prevTime  = DateTime.Now;
            DateTime startTime = DateTime.Now;


            //それぞれのアルゴリズムについて
            foreach (var creator in creatorList)
            {
                //それぞれのサイズについて
                foreach (int size in sizeList)
                {
                    //それぞれのh_trgについて
                    foreach (double h_trg in h_trgList)
                    {
                        //それぞれのdについて
                        foreach (int expd in expdList)
                        {
                            //条件を表示
                            {
                                L.g("all").WriteLine("");
                                L.g("all").Write(string.Format("EXP_ID: {0}", EXP_ID++)); //実験IDを
                                L.g("all").Write(" Algo: " + creator.Key);                //アルゴリズムの名前を表示

                                L.g("all").Write(" agentnum: " + size);
                                L.g("all").Write(" h_trg: " + h_trg);
                                L.g("all").Write(" expd: " + expd);
                                L.g("all").Write(" envSdN: " + envSeedNum);

                                L.g("all").WriteLine("");
                            }


                            //シードの平均をとるため
                            double[] aveSeedResult = new double[3];

                            foreach (int envSeed in envSeedList)//環境のシード
                            {
                                L.g("roundacc,time,console,stepbelief").Write("\nenvSeed: " + envSeed + " ");

                                RandomPool.Declare("setenv", envSeed);

                                {                                  //実験一回し
                                    RandomPool.Declare("fact", 0); //固定センサー値までばらつかせたら収集がつかんことを学習した。

                                    //環境を作る
                                    NetworkGenerator generator = new SmallworldRingNetworkGenerator(size, expd, 0.12);

                                    generator.NodeCreate += creator.Value(h_trg);

                                    OSEnvironment env = new OSEnvironment(generator, (int)(size * 0.05));

                                    //ファイルにネットワークの情報を表示
                                    L.g("env").WriteLine("" + env);
                                    L.g("env").Flush();

                                    Experiment exp = new Experiment(env);

                                    //実験を実行
                                    var expResult = exp.Run();

                                    {    //平均をとるために和を計算
                                        aveSeedResult[0] += expResult.Correct;
                                        aveSeedResult[1] += expResult.Incorrect;
                                        aveSeedResult[2] += expResult.Undeter;
                                    }
                                }

                                {     //時間を表示
                                    DateTime nowTime   = DateTime.Now;
                                    TimeSpan tp        = nowTime.Subtract(prevTime);
                                    TimeSpan fromStart = nowTime.Subtract(startTime);
                                    L.g("time,console").Write("<span: " + tp);                         // 処理時間を秒単位で表示
                                    L.g("time,console").WriteLine("  fromStart: " + fromStart + " >"); // 処理時間を秒単位で表示

                                    prevTime = nowTime;
                                }
                            }//forenvseed


                            { //平均をとる
                                aveSeedResult[0] /= envSeedNum;
                                aveSeedResult[1] /= envSeedNum;
                                aveSeedResult[2] /= envSeedNum;
                            }

                            L.g("aveacc,console").WriteLine(
                                string.Format("SeedAverage: correct: {0} incorrect: {1} undeter: {2}",
                                              aveSeedResult[0], aveSeedResult[1], aveSeedResult[2]));

                            //ファイルに書き込み
                            L.Flush();
                        } //for expd
                    }     //for h_trg
                }         //for size
            }             //
        }                 //method AutoExperiment
        public void Run()
        {
            //network
            int        network_start_seed  = 14;
            int        network_finish_seed = 19;
            int        total_rounds        = 300;
            int        round_steps         = 1500;
            int        round_seed          = 0;
            List <int> node_num_list       = new List <int> {
                600, 700, 800, 900, 1000
            };
            bool   fix_sensor_num  = false;
            double sensor_rate     = 0.1;
            int    sensor_num      = 10;
            double rewire_p        = 0.01;
            int    degree          = 6;
            int    attach_edge_num = 2;
            int    rnd_edge_num    = 1;
            double triangle_p      = 0.01;
            double edge_creation_p = 0.01;
            //int grid_m = 20;
            //int grid_n = 20;
            bool seed_enable = true;
            //List<NetworkEnum> network_enum_list = new List<NetworkEnum> { NetworkEnum.WS, NetworkEnum.BA, NetworkEnum.ER, NetworkEnum.Grid2D, NetworkEnum.Hexagonal, NetworkEnum.Triangular };
            List <NetworkEnum> network_enum_list = new List <NetworkEnum> {
                NetworkEnum.Grid2D, NetworkEnum.Hexagonal, NetworkEnum.Triangular
            };
            I_NetworkGenerator network_generator = null;

            //agent
            InfoEnum init_op = InfoEnum.Undeter;
            //int agent_seed = ;
            double g_sigma           = 0.9;
            double r_sigma           = 0.1;
            double sensor_acc        = 0.55;
            double op_intro_rate     = 0.1;
            int    op_intro_duration = 1;
            var    t_awa_rate        = 0.9;

            //algo
            List <AlgoEnum> algo_enum_list = new List <AlgoEnum> {
                AlgoEnum.OriginalAAT, AlgoEnum.AATD_NoTargetH
            };

            //List<AlgoEnum> algo_enum_list = new List<AlgoEnum> { AlgoEnum.AATD_NoTargetH, AlgoEnum.AATD };

            for (int network_seed = network_start_seed; network_seed <= network_finish_seed; network_seed++)
            {
                foreach (var node_num in node_num_list)
                {
                    foreach (var network_enum in network_enum_list)
                    {
                        int grid_m, grid_n;
                        grid_m = grid_n = 0;
                        //grid_m = grid_n = (int)Math.Floor(Math.Sqrt(Convert.ToDouble(node_num)));


                        switch (network_enum)
                        {
                        case NetworkEnum.WS:
                            seed_enable       = true;
                            network_generator = new WS_NetworkGenerator(node_num, degree, rewire_p);
                            break;

                        case NetworkEnum.BA:
                            seed_enable       = true;
                            network_generator = new BA_NetworkGenerator(node_num, attach_edge_num);
                            break;

                        case NetworkEnum.ER:
                            seed_enable       = true;
                            network_generator = new ER_NetworkGenerator(node_num, edge_creation_p);
                            break;

                        case NetworkEnum.Grid2D:
                            grid_m            = grid_n = (int)Math.Floor(Math.Sqrt(Convert.ToDouble(node_num)));
                            seed_enable       = false;
                            network_generator = new Grid2D_NetworkGenerator(grid_m, grid_n);
                            break;

                        case NetworkEnum.Hexagonal:
                            if (node_num == 100)
                            {
                                grid_m = grid_n = 6;
                            }
                            else if (node_num == 200)
                            {
                                grid_m = grid_n = 9;
                            }
                            else if (node_num == 300)
                            {
                                grid_m = 12;
                                grid_n = 11;
                            }
                            else if (node_num == 400)
                            {
                                grid_m = 13;
                                grid_n = 13;
                            }
                            else if (node_num == 500)
                            {
                                grid_m = grid_n = 15;
                            }
                            else if (node_num == 600)
                            {
                                grid_m = 18;
                                grid_n = 15;
                            }
                            else if (node_num == 700)
                            {
                                grid_m = 19;
                                grid_n = 17;
                            }
                            else if (node_num == 800)
                            {
                                grid_m = 20;
                                grid_n = 18;
                            }
                            else if (node_num == 900)
                            {
                                grid_m = 21;
                                grid_n = 20;
                            }
                            else if (node_num == 1000)
                            {
                                grid_m = 22;
                                grid_n = 21;
                            }
                            seed_enable       = false;
                            network_generator = new Hexagonal_NetworkGenerator(grid_m, grid_n);
                            break;

                        case NetworkEnum.Triangular:
                            if (node_num == 100)
                            {
                                grid_m = 12;
                                grid_n = 13;
                            }
                            else if (node_num == 200)
                            {
                                grid_m = 18;
                                grid_n = 19;
                            }
                            else if (node_num == 300)
                            {
                                grid_m = 24;
                                grid_n = 22;
                            }
                            else if (node_num == 400)
                            {
                                grid_m = 27;
                                grid_n = 27;
                            }
                            else if (node_num == 500)
                            {
                                grid_m = grid_n = 30;
                            }
                            else if (node_num == 600)
                            {
                                grid_m = 32;
                                grid_n = 34;
                            }
                            else if (node_num == 700)
                            {
                                grid_m = 36;
                                grid_n = 36;
                            }
                            else if (node_num == 800)
                            {
                                grid_m = 39;
                                grid_n = 38;
                            }
                            else if (node_num == 900)
                            {
                                grid_m = 42;
                                grid_n = 40;
                            }
                            else if (node_num == 1000)
                            {
                                grid_m = 42;
                                grid_n = 45;
                            }
                            seed_enable       = false;
                            network_generator = new Triangular_NetworkGenerator(grid_m, grid_n);
                            break;

                        default:
                            break;
                        }
                        var      network = network_generator.Generate(network_seed, seed_enable);
                        I_Layout layout  = new Square_LayoutGenerator(network).Generate();

                        int        agent_seed = network_seed;
                        I_AgentSet agent_set  = new BasicAgentSetFactory(network, init_op, g_sigma, r_sigma).Generate(agent_seed, AgentInitMode.Normal);
                        if (!fix_sensor_num)
                        {
                            agent_set.SetSensors((int)(node_num * sensor_rate), sensor_acc);
                        }
                        else
                        {
                            agent_set.SetSensors(sensor_num, sensor_acc);
                        }

                        I_Algo algo = null;

                        foreach (var algo_enum in algo_enum_list)
                        {
                            switch (algo_enum)
                            {
                            case AlgoEnum.OriginalAAT:
                                var gcw = new GeneratingCanWeights();
                                var ear = new EstimatingAwaRates();
                                var sws = new SelectingWeiStrategies(t_awa_rate);
                                var pos = new PlayOneStep(new SendOpinion(op_intro_rate, op_intro_duration), new ReceiveOpinion());
                                algo = new AAT_Algo(AlgoEnum.OriginalAAT, gcw, ear, sws, pos);
                                break;

                            case AlgoEnum.HCII_AATD:
                                var hcii_aatd_gcw = new GeneratingCanWeights();
                                var hcii_aatd_ear = new HCII_AATD_EstimatingAwaRates();
                                var hcii_sws      = new SelectingWeiStrategies(t_awa_rate);
                                var hcii_aatd_pos = new PlayOneStep(new SendOpinion(op_intro_rate, op_intro_duration), new ReceiveOpinion());
                                algo = new AAT_Algo(AlgoEnum.HCII_AATD, hcii_aatd_gcw, hcii_aatd_ear, hcii_sws, hcii_aatd_pos);
                                break;

                            case AlgoEnum.AATD:
                                var aatd_gcw = new GeneratingCanWeights();
                                var aatd_ear = new AATD_EstimatingAwaRates();
                                var aatd_sws = new AATD_SelectingWeiStrategies(t_awa_rate, 2, agent_set.AgentList.Count);
                                var aatd_pos = new PlayOneStep(new SendOpinion(op_intro_rate, op_intro_duration), new ReceiveOpinion());
                                algo = new AAT_Algo(AlgoEnum.AATD, aatd_gcw, aatd_ear, aatd_sws, aatd_pos);
                                break;

                            case AlgoEnum.AATD_NoTargetH:
                                var aatd_noth_gcw = new GeneratingCanWeights();
                                var aatd_noth_ear = new AATD_EstimatingAwaRates();
                                var aatd_noth_sws = new AATD_SelectingWeiStrategies(1.0, 2, agent_set.AgentList.Count);
                                var aatd_noth_pos = new PlayOneStep(new SendOpinion(op_intro_rate, op_intro_duration), new ReceiveOpinion());
                                algo = new AAT_Algo(AlgoEnum.AATD, aatd_noth_gcw, aatd_noth_ear, aatd_noth_sws, aatd_noth_pos);
                                break;
                            }

                            I_OSM osm = new BaseOSM();
                            osm.MyNetwork  = network;
                            osm.MyAgentSet = agent_set;
                            osm.MyAlgo     = algo;
                            osm.Initialize();

                            this.MakeFile(network_enum, node_num, network_seed, algo_enum);

                            RandomPool.Declare(SeedEnum.RoundSeed, round_seed);
                            RandomPool.Declare(SeedEnum.PlayStepSeed, round_seed);

                            //Console.WriteLine(this.PrintObject());
                            osm.MyAlgo.MyOSMLog.StartRecordRounds(this.OutputRoundFilePath);
                            for (int current_round = 1; current_round <= total_rounds; current_round++)
                            {
                                osm.MyAlgo.RunOneRound(osm.MyNetwork, osm.MyAgentSet, current_round, round_steps);
                            }
                            osm.MyAlgo.MyOSMLog.StopRecordRounds();
                        }
                    }
                }
            }
        }
Beispiel #12
0
 public void RunRoundWithoutPlaySteps(int current_round, int runround_seed)
 {
     RandomPool.Declare(SeedEnum.RoundSeed, runround_seed);
     this.MyAlgo.RunOneRoundWithoutPlaySteps(this.MyNetwork, this.MyAgentSet, current_round);
 }