Exemplo n.º 1
0
        void TargethExp()
        {
            var dt      = DateTime.Now;
            var dt_name = dt.ToString("yyyyMMddHHmm");
            var seeds   = new List <int>()
            {
                3
            };                          //0,1,2
            double sensor_weight = 0.8; //0.8
            int    steps         = 2000;

            dt      = DateTime.Now;
            dt_name = dt.ToString("yyyyMMddHHmm");
            //Parallel.For(0, seeds, seed =>

            osm_setting = new OSMSetting(ExperimentType.AAT_LFR_Normal_Each_Exponential);

            Parallel.ForEach(seeds, seed =>
            {
                /* リストで定義されているクラスの引数には任意個数セットできる.出力は全体の直積*/
                new TargetH_Experiment()
                .SetGraphs(new List <GraphEnum>()
                {
                    GraphEnum.Grid2D, GraphEnum.BA, GraphEnum.WS
                })                                                                                      //グラフをセット
                .SetAlgos(new List <AlgoEnum>()
                {
                    AlgoEnum.AAT
                })                                                          //意見共有アルゴリズムをセット
                .SetNetworkSize(new List <int>()
                {
                    100, 300, 500, 1000
                })                                                                         //ネットワークサイズ(ノード数)をセット
                .SetDims(new List <int>()
                {
                    2
                })                                                           //意見の種類
                .SetSensorWeight(sensor_weight)                              //環境とセンサの間のリンクの重みをセット.これはリストじゃあない
                .SetSensorSizeRate(new List <double>()
                {
                    0.05
                })                                                           //環境情報を認識するエージェントの割合を設定
                .SetMaliciousSensorSizeRate(new List <double>()
                {
                    0.00
                })                                                                                                                                           //誤った環境情報を認識するエージェントの割合を設定
                                                                                                                                                             //.SetSensorFixSize(10)
                .SetBeliefUpdater(new BeliefUpdater(BeliefUpdateFunctionEnum.SameOpinionAdjustBayse).SetSensorWeightMode(SensorWeightEnum.DependSensorRate)) //信念値更新式
                .SetSubjectName("test")                                                                                                                      //実験名?
                .SetEnvDistWeights(new List <double>()
                {
                    0.5
                })                                                           //環境からセンサエージェントへの意見の種類に関する確率分布
                .SetMaliciousEnvDistWeights(new List <double>()
                {
                    0.0
                })                                                          //誤った環境からセンサエージェントへの重みをセット
                .SetCommonCuriocity(0.1)                                    //
                                                                            //.SetTargetHs(new List<double>() {0.5, 0.525, 0.55, 0.575, 0.6, 0.625, 0.65, 0.675, 0.7, 0.725, 0.75, 0.775, 0.8, 0.825, 0.85, 0.875, 0.9, 0.925, 0.95, 0.975,1 })             //目標意見形成率
                .SetTargetHs(new List <double>()
                {
                    0.9
                })                                                          //.SetTargetHs(Enumerable.Range(20, 21).Select(x => x * 0.025).ToList())
                .SetLogFolder(dt_name, "gdwt_size_grid_0.95")               //ログフォルダ名
                .SetRounds(new List <int>()
                {
                    500
                })                                                          //ラウンド数 (繰り返し数)をセット
                .SetSteps(steps)                                            //ステップ数(1ラウンドあたりの更新数)をセット
                .SetOpinionThreshold(0.9)                                   //意見形成の閾値.0.9
                                                                            //.SetOpinionThreshold(0.8)
                .SetDynamics(new List <bool>()
                {
                    false
                })                                                          //ダイナミクス?
                .SetEnvDistModes(new List <EnvDistributionEnum> {
                    EnvDistributionEnum.Exponential
                })
                .SetInfoWeightRates(new List <double>()
                {
                    1.0
                })                                                    //昔の名残
                .SetCommonWeights(new List <double>()
                {
                    0.5
                })                                                  //OSM_Onlyにしか使わない.事前に重みが分かってるとき用ってことか
                                                                    //.SetCommonWeights(Enumerable.Range(0, 21).Select(x => x * 0.05).ToList())

                .SetBadSensorMode(new List <bool>()
                {
                    false
                })                                                  // BadSensorモードの有無
                .SetOpinionShareNum(new List <int>()
                {
                    1
                })                                                 //意見発信回数
                .SetSensorArrangement(new List <SensorArrangementEnum>()
                {
                    SensorArrangementEnum.Random
                })                                                                                              //センサの配置方法
                .SetAdditionalShareCommunityOnly(new List <bool>()
                {
                    false
                })                                                                 //Badコミュニティのみの追加意見発信か否か

                .SetOsmSetting(osm_setting)
                .Run(seed);
            });

            Environment.Exit(0);
        }
Exemplo n.º 2
0
 public void SetOsmSetting(OSMSetting osm_setting)
 {
     this.osm_setting = osm_setting;
 }
Exemplo n.º 3
0
        void Test()
        {
            this.osm_setting = new OSMSetting(ExperimentType.AAT_SW_Normal_Random_Exponential);
            int      agent_size            = osm_setting.agent_size;
            int      dim                   = osm_setting.dim;
            int      correct_dim           = osm_setting.correct_dim;
            int      malicious_dim         = osm_setting.malicious_dim;
            AlgoEnum algo                  = osm_setting.algo;
            double   targeth               = osm_setting.targeth;
            double   common_weight         = osm_setting.common_weight;
            double   common_curiocity      = osm_setting.common_curiocity;
            double   sensor_weight         = osm_setting.sensor_weight;
            double   dist_weight           = osm_setting.dist_weight;
            double   malicious_dist_weight = osm_setting.malicious_dist_weight;
            int      sensor_size           = osm_setting.sensor_size;
            //int malicious_sensor_size = (int)(0.04 * agent_size);
            int malicious_sensor_size = osm_setting.malicious_sensor_size;
            var op_form_threshold     = osm_setting.op_form_threshold;
            int sample_size           = osm_setting.sample_size;
            int change_round          = osm_setting.change_round;

            bool bad_sensor_mode             = osm_setting.bad_sensor_mode;
            int  opinion_share_num           = osm_setting.opinion_share_num;
            bool is_add_share_only_community = osm_setting.add_share_only_community;

            EnvDistributionEnum      env_distribution = osm_setting.env_distribution;
            BeliefUpdateFunctionEnum belief_update    = osm_setting.belief_update;

            var belief_updater = new BeliefUpdater(belief_update).SetSensorWeightMode(SensorWeightEnum.DependSensorRate);

            GraphGeneratorBase graph_generator;

            switch (osm_setting.select_graph)
            {
            case GraphEnum.WS:
                graph_generator = new WS_GraphGenerator().SetNodeSize(agent_size).SetNearestNeighbors(6).SetRewireP(0.01);
                break;

            //case GraphEnum.PowerLawCluster:
            //graph_generator = new PC_GraphGenerator().SetNodeSize(500).SetRandomEdges(3).SetAddTriangleP(0.1);
            // break;
            case GraphEnum.BA:
                graph_generator = new BA_GraphGenerator().SetNodeSize(agent_size).SetAttachEdges(2);
                break;

            case GraphEnum.Grid2D:
                graph_generator = new Grid2D_GraphGenerator().SetNodeSize(agent_size);
                break;

            //case GraphEnum.ER:
            //graph_generator = new ER_GraphGenerator().SetNodeSize(agent_size).SetEdgeCreateP(0.01);
            //break;
            case GraphEnum.LFR:
                graph_generator = new LFR_GraphGenerator().SetNodeSize(agent_size);
                break;

            default:
                graph_generator = new LFR_GraphGenerator().SetNodeSize(agent_size);
                break;
            }
            graph_generator.SetOsmSetting(osm_setting);
            var pb     = new ExtendProgressBar(100);
            var graph  = graph_generator.Generate(0, pb);
            var layout = new KamadaKawai_LayoutGenerator(graph).Generate(pb);
            //var layout = new Circular_LayoutGenerator(graph).Generate();

            //LFRの時のみ
            List <List <int> > communityList = new List <List <int> >();

            if (osm_setting.select_graph == GraphEnum.LFR)
            {
                communityList = graph_generator.GetCommunity();
            }
            var init_belief_gene = new InitBeliefGenerator()
                                   .SetInitBeliefMode(mode: InitBeliefMode.NormalNarrow);
            //.SetInitBeliefMode(mode: InitBeliefMode.NormalWide);

            var subject_test = new OpinionSubject("test", dim);

            var sample_agent_test = new SampleAgent()
                                    .SetInitBeliefGene(init_belief_gene)
                                    .SetThreshold(op_form_threshold)
                                    .SetSubject(subject_test)
                                    .SetInitOpinion(Vector <double> .Build.Dense(dim, 0.0));

            var sensor_gene = new SensorGenerator()
                              //                .SetSensorSize((int)5);
                              .SetSensorSize(sensor_size, malicious_sensor_size);

            int agent_gene_seed = 11;//4
            var agent_gene_rand = new ExtendRandom(agent_gene_seed);


            var agent_network = new AgentNetwork()
                                .SetRand(agent_gene_rand)
                                .GenerateNetworkFrame(graph)
                                //.ApplySampleAgent(sample_agent_1, mode: SampleAgentSetMode.RandomSetRate, random_set_rate: 0.5)
                                //.ApplySampleAgent(sample_agent_2, mode: SampleAgentSetMode.RemainSet)
                                .ApplySampleAgent(sample_agent_test, mode: SampleAgentSetMode.RemainSet)
                                .SetBadSensorMode(osm_setting.bad_sensor_mode)
                                .SetSensorArrange(osm_setting.sensor_arrange)
                                .SetCommnityList(communityList)
                                .GenerateSensor(sensor_gene)
                                .SetLayout(layout);
            var bad_community_index = agent_network.GetBadCommunityIndex();

            int update_step_seed = 1;
            var update_step_rand = new ExtendRandom(update_step_seed);

            OSMBase osm = new OSM_Only();

            switch (algo)
            {
            case AlgoEnum.AAT:
                var osm_aat = new AAT_OSM();
                osm_aat.SetTargetH(targeth);
                osm = osm_aat;
                break;

            default:
                break;
            }
            osm.SetRand(update_step_rand);
            osm.SetAgentNetwork(agent_network, opinion_share_num);
            var subject_mgr_dic = new Dictionary <int, SubjectManager>();

            subject_mgr_dic.Add(0, new SubjectManagerGenerator()
                                .Generate(subject_test, dist_weight, correct_dim, sensor_weight, env_distribution, malicious_dim, malicious_dist_weight));
            //for (int i = 0; i < 1; i++)
            //{
            //  subject_mgr_dic.Add(i * change_round, new SubjectManagerGenerator().Generate(subject_test, dist_weight, i % dim, sensor_rate, EnvDistributionEnum.Turara));
            //}
            osm.SetSubjectManagerDic(subject_mgr_dic);
            osm.SetInitWeightsMode(mode: CalcWeightMode.FavorMyOpinion);
            osm.SetOpinionIntroInterval(osm_setting.op_intro_interval);
            osm.SetOpinionIntroRate(osm_setting.op_intro_rate);
            //osm.SetSensorCommonWeight(0.70);
            osm.SetBeliefUpdater(belief_updater);
            osm.SetAddShareCommunityOnly(is_add_share_only_community);

            osm.SetStopRound(osm_setting.stop_rounds);

            this.MyOSM = osm;
            this.MyAnimationForm.RegistOSM(osm, osm_setting.opinion_share_num, communityList, bad_community_index);
        }
Exemplo n.º 4
0
 public TargetH_Experiment SetOsmSetting(OSMSetting osm_setting)
 {
     this.osm_setting = osm_setting;
     return(this);
 }