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); }
public void SetOsmSetting(OSMSetting osm_setting) { this.osm_setting = osm_setting; }
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); }
public TargetH_Experiment SetOsmSetting(OSMSetting osm_setting) { this.osm_setting = osm_setting; return(this); }