public void Run(int start_seed, int final_seed) { string save_folder = this.LogFolder; var graphs = this.MyGraphs; var algos = this.MyAlgos; int op_dim_size = this.DimSize; double sensor_rate = this.SensorRate; int max = 0; for (int size = this.StartSize; size <= FinalSize; size += DurationSize) { foreach (var select_graph in graphs) { for (int seed = start_seed; seed <= final_seed; seed++) { foreach (var algo in algos) { foreach (var weight in this.CommonCuriocities) { max++; } } } } } var pb = new ExtendProgressBar(max); for (int size = this.StartSize; size <= FinalSize; size += DurationSize) { GraphGeneratorBase graph_generator = new Null_GraphGenerator(); foreach (var select_graph in graphs) { for (int seed = start_seed; seed <= final_seed; seed++) { switch (select_graph) { case GraphEnum.WS: graph_generator = new WS_GraphGenerator().SetNodeSize(size).SetNearestNeighbors(6).SetRewireP(0.01); break; case GraphEnum.BA: graph_generator = new BA_GraphGenerator().SetNodeSize(size).SetAttachEdges(2); break; case GraphEnum.Hexagonal: graph_generator = new Hexagonal_GraphGenerator().SetNodeSize(size); break; case GraphEnum.Grid2D: graph_generator = new Grid2D_GraphGenerator().SetNodeSize(size); break; case GraphEnum.Triangular: graph_generator = new Triangular_GraphGenerator().SetNodeSize(size); break; default: new Exception(); return; } var graph = new RawGraph(); var layout = new Layout(); lock (lock_object) { graph = graph_generator.Generate(seed, pb); layout = new Circular_LayoutGenerator(graph).Generate(pb); } var init_belief_gene = new InitBeliefGenerator() .SetInitBeliefMode(mode: InitBeliefMode.NormalNarrow); var subject_test = new OpinionSubject("test", op_dim_size); var osm_env = new OpinionEnvironment() .SetSubject(subject_test) .SetCorrectDim(0) .SetSensorWeight(sensor_rate); var subject_manager = new SubjectManager() .AddSubject(subject_test) .SetEnvironment(osm_env); var op_form_threshold = 0.9; var sample_agent_test = new SampleAgent() .SetInitBeliefGene(init_belief_gene) .SetThreshold(op_form_threshold) .SetSubject(subject_test) .SetInitOpinion(Vector <double> .Build.Dense(op_dim_size, 0.0)); var sensor_gene = new SensorGenerator(); if (this.SensorSizeFixMode) { sensor_gene.SetSensorSize(this.SensorSize); } else { sensor_gene.SetSensorSize((int)(this.SensorSizeRate * graph.Nodes.Count)); } int agent_gene_seed = seed; var agent_gene_rand = new ExtendRandom(agent_gene_seed); var agent_network = new AgentNetwork() .SetRand(agent_gene_rand) .GenerateNetworkFrame(graph) .ApplySampleAgent(sample_agent_test, mode: SampleAgentSetMode.RemainSet) .GenerateSensor(sensor_gene) .SetLayout(layout); int update_step_seed = seed; foreach (var algo in algos) { OSMBase osm = new OSM_Only(); foreach (var cc in this.CommonCuriocities) { switch (algo) { case AlgoEnum.IWTori: var osm_iwtori = new IWTori_OSM(); osm_iwtori.SetCommonCuriocity(cc); osm_iwtori.SetTargetH(this.TargetH); osm = osm_iwtori; break; case AlgoEnum.IWTorionly: var osm_iwtorionly = new IWTorionly_OSM(); osm_iwtorionly.SetCommonWeight(this.CommonWeight); osm_iwtorionly.SetCommonCuriocity(cc); osm = osm_iwtorionly; break; default: break; } var update_step_rand_tmp = new ExtendRandom(update_step_seed); osm.SetRand(update_step_rand_tmp); osm.SetAgentNetwork(agent_network); osm.SetSubjectManager(subject_manager); osm.SetInitWeightsMode(mode: CalcWeightMode.FavorMyOpinion); osm.SetOpinionIntroInterval(10); osm.SetOpinionIntroRate(0.1); osm.SimpleRecordFlag = true; osm.SetBeliefUpdater(this.MyBeliefUpdater); pb.Tag = $"{select_graph.ToString()} {size.ToString()} {algo.ToString()} {seed}"; osm.UpdateRounds(this.Rounds, this.Steps, pb); string sensor_size_mode = ""; if (this.SensorSizeFixMode) { sensor_size_mode = "fix" + this.SensorSize.ToString(); } else { sensor_size_mode = "rate" + Math.Round(this.SensorSizeRate, 3).ToString(); } string sensor_weight_mode = $"{this.MyBeliefUpdater.SensorWeightMode}"; var output_pass = Properties.Settings.Default.OutputLogPath + $"/{save_folder}/" + select_graph.ToString() + $"_{size.ToString()}" + $"_{sensor_size_mode}" + $"_{op_dim_size.ToString()}" + $"_{sensor_rate.ToString()}" + $"_{algo.ToString()}" + $"_{sensor_weight_mode}" + $"_{this.Rounds}" + $"_{this.Steps}" + $"_{cc}"; Output.OutputRounds(output_pass, osm.MyRecordRounds, seed.ToString()); pb.Next(); } } } } } }