Exemple #1
0
        public void Generate(ExtendRandom agent_network_rand, List <Agent> agents, bool bad_sensor_mode, SensorArrangementEnum sensor_arrange, List <List <int> > communityList = null)
        {
            foreach (var agent in agents) //全てのエージェントを初期化
            {
                agent.SetSensor(false);
            }
            List <int> sensor_list = new List <int>();

            int bad_sensor = -1;

            if (communityList.Count != 0 && sensor_arrange == SensorArrangementEnum.Each) //ネットワークがコミュニティ構造を持つとき
            {
                int rest = 0;
                if (this.SensorSize > communityList.Count) //コミュニティの数よりセンサの数の方が多いとき
                {
                    for (var i = 0; i < this.SensorSize; i++)
                    {
                        //sensor_list = agents.Select(agent => agent.AgentID).OrderBy(id => agent_network_rand.Next()).Take(this.SensorSize).ToList();
                        var sensors = agents.Where(agent => communityList[i % communityList.Count].Contains(agent.AgentID));                    //コミュニティのメンバー.センサ候補
                        var sensor  = sensors.Select(agent => agent.AgentID).OrderBy(id => agent_network_rand.Next()).Take(1).ToList().First(); //一人センサを選ぶ
                        sensor_list.Add(sensor);
                    }
                    rest = this.SensorSize % communityList.Count;
                }
                else //コミュニティの数がセンサの数以下の時
                {
                    for (var i = 0; i < this.SensorSize; i++)
                    {
                        //sensor_list = agents.Select(agent => agent.AgentID).OrderBy(id => agent_network_rand.Next()).Take(this.SensorSize).ToList();
                        var sensors = agents.Where(agent => communityList[i].Contains(agent.AgentID));                                          //コミュニティのメンバー.センサ候補
                        var sensor  = sensors.Select(agent => agent.AgentID).OrderBy(id => agent_network_rand.Next()).Take(1).ToList().First(); //一人センサを選ぶ
                        sensor_list.Add(sensor);
                    }
                }

                if (bad_sensor_mode)
                {
                    if (rest != 0)
                    {
                        while (true)
                        {
                            int  candidate = agent_network_rand.Next(0, sensor_list.Count);
                            bool flag      = false;
                            for (var j = 0; j < rest; j++)
                            {
                                if (candidate % communityList.Count == j)
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                bad_sensor = candidate;
                                break;
                            }
                        }
                    }
                    else
                    {
                        bad_sensor = agent_network_rand.Next(0, sensor_list.Count);
                    }
                    agents.Where(agent => sensor_list[bad_sensor] == agent.AgentID).ToList().ForEach(agent => agent.SetBadSensor(true));
                    this.BadCommunityIndex = bad_sensor;
                    agents.Where(agent => communityList[bad_sensor].Contains(agent.AgentID)).ToList().ForEach(agent => agent.SetBadCommunity(true));
                }
            }
            else //ネットワークがコミュニティ構造を持たないとき
            {
                sensor_list = agents.Select(agent => agent.AgentID).OrderBy(id => agent_network_rand.Next()).Take(this.SensorSize).ToList();
                if (bad_sensor_mode)
                {
                    bad_sensor = agent_network_rand.Next(0, sensor_list.Count);
                    agents.Where(agent => sensor_list[bad_sensor] == (agent.AgentID)).ToList().ForEach(agent => agent.SetBadSensor(true));
                    this.BadCommunityIndex = bad_sensor;
                }
            }

            var malicious_sensor_list = sensor_list.OrderBy(id => agent_network_rand.Next()).Take(this.MaliciousSensorSize).ToList();

            agents.Where(agent => sensor_list.Contains(agent.AgentID)).ToList().ForEach(agent => agent.SetSensor(true, false));          //センサエージェントに選ばれたエージェントをセンサとして認定
            agents.Where(agent => malicious_sensor_list.Contains(agent.AgentID)).ToList().ForEach(agent => agent.SetSensor(true, true)); //誤情報センサに選ばれたエージェントを認定
        }
Exemple #2
0
 public AgentNetwork SetSensorArrange(SensorArrangementEnum arrange)
 {
     this.SensorArragne = arrange;
     return(this);
 }
Exemple #3
0
        public OSMSetting(ExperimentType experiment_type)
        {
            common_weight         = 0.5;
            common_curiocity      = 0.5;
            dist_weight           = 0.5;
            malicious_dist_weight = 0; //0.8
            //int malicious_sensor_size = (int)(0.04 * agent_size);
            sample_size   = 1;
            change_round  = 0;
            dim           = 2;
            correct_dim   = 0;
            malicious_dim = 1;
            switch (experiment_type)
            {
            case ExperimentType.OSM_LFR_Bad_Each_Exponential:
                agent_size    = 100;
                algo          = AlgoEnum.OSMonly;
                targeth       = 0.9;
                sensor_weight = 0.8;     //0.8

                malicious_sensor_size = 0;
                op_form_threshold     = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.OSM_LFR_Bad_Each_Shitei_SameOpinionBayse:
                agent_size    = 100;
                algo          = AlgoEnum.OSMonly;
                targeth       = 0.9;
                sensor_weight = 0.8;     //0.8

                malicious_sensor_size = 0;
                op_form_threshold     = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Shitei;
                belief_update            = BeliefUpdateFunctionEnum.SameOpinionAdjustBayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.OSM_LFR_Normal_Each_Exponential:
                agent_size        = 100;
                algo              = AlgoEnum.OSMonly;
                targeth           = 0.9;
                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Bad_Each_Shitei:
                agent_size    = 100;
                algo          = AlgoEnum.AAT;
                targeth       = 0.9;
                sensor_weight = 0.55;     //0.8

                op_form_threshold = 0.9;
                sample_size       = 1;
                change_round      = 0;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Shitei;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Bad_Each_Exponential:
                agent_size = 100;

                algo              = AlgoEnum.AAT;
                targeth           = 0.9;
                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Bad_Each_Exponential_SameOpinionBayse:
                agent_size = 100;

                algo              = AlgoEnum.AAT;
                targeth           = 0.7;
                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.SameOpinionAdjustBayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Bad_Each_Shitei_SameOpinionBayse:
                agent_size = 100;

                algo              = AlgoEnum.AAT;
                targeth           = 0.8;
                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;

                bad_sensor_mode          = true;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.SameOpinionAdjustBayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Normal_Each_Shitei:
                agent_size        = 100;
                algo              = AlgoEnum.AAT;
                targeth           = 0.9;
                sensor_weight     = 0.55; //0.8
                op_form_threshold = 0.8;

                bad_sensor_mode          = false;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Shitei;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_LFR_Normal_Each_Exponential:
                agent_size = 100;
                algo       = AlgoEnum.AAT;
                targeth    = 0.9;

                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;

                bad_sensor_mode          = false;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Each;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.LFR;
                break;

            case ExperimentType.AAT_SW_Normal_Random_Exponential:
                agent_size = 100;

                algo    = AlgoEnum.AAT;
                targeth = 0.9;

                sensor_weight     = 0.8; //0.8
                op_form_threshold = 0.9;


                bad_sensor_mode          = false;
                opinion_share_num        = 1;
                sensor_arrange           = SensorArrangementEnum.Random;
                env_distribution         = EnvDistributionEnum.Exponential;
                belief_update            = BeliefUpdateFunctionEnum.Bayse;
                add_share_only_community = false;

                select_graph = GraphEnum.Grid2D;
                break;
            }
            sensor_size = (int)(0.05 * agent_size);
        }