public SubjectManager Generate(OpinionSubject opinion_subject, double dist_weight, int correct_dim, double sensor_weight, EnvDistributionEnum env_dis_mode, int malicious_dim = 0, double malicious_dist_weight = 0.0) { CustomDistribution env_dist = null; CustomDistribution env_malicious_dist = null; switch (env_dis_mode) { case EnvDistributionEnum.Turara: env_dist = new Turara_DistGenerator(opinion_subject.SubjectDimSize, dist_weight, correct_dim).Generate(); //maxとotherを計算して返す env_malicious_dist = new Turara_DistGenerator(opinion_subject.SubjectDimSize, malicious_dist_weight, malicious_dim).Generate(); //同上 break; case EnvDistributionEnum.Exponential: env_dist = new Exponential_DistGenerator(opinion_subject.SubjectDimSize, dist_weight, correct_dim).Generate(); env_malicious_dist = new Exponential_DistGenerator(opinion_subject.SubjectDimSize, malicious_dist_weight, malicious_dim).Generate(); break; case EnvDistributionEnum.Shitei: env_dist = new Shitei_DistGenerator(opinion_subject.SubjectDimSize, dist_weight, correct_dim).Generate(); env_malicious_dist = new Shitei_DistGenerator(opinion_subject.SubjectDimSize, malicious_dist_weight, malicious_dim).Generate(); break; } Debug.Assert(env_dist != null); //計算できてなかったらエラー Debug.Assert(env_malicious_dist != null); var subject_tv = new OpinionSubject("good_tv", 3); var subject_test = new OpinionSubject("test", opinion_subject.SubjectDimSize); var subject_company = new OpinionSubject("good_company", 2); double[] conv_array = { 1, 0, 0, 1, 1, 0 }; var conv_matrix = Matrix <double> .Build.DenseOfColumnMajor(2, 3, conv_array); //2*3の形にリシェイプ var osm_env = new OpinionEnvironment() .SetSubject(subject_test) .SetCorrectDim(correct_dim) //正しい次元 .SetMaliciousDim(malicious_dim) //間違った次元 .SetSensorWeight(sensor_weight) //センサウェイト .SetCustomDistribution(env_dist) .SetMaliciousCustomDistribution(env_malicious_dist); var subject_manager = new SubjectManager() //サブジェクトマネージャー生成 .AddSubject(subject_test) .RegistConversionMatrix(subject_tv, subject_company, conv_matrix) //オピニオンにサブジェクトマネージャーを登録.サブジェクトマネージャーに意見交換クラスとしてこれらの情報を登録 .SetEnvironment(osm_env); //環境をセット return(subject_manager); }
public SubjectManager SetEnvironment(OpinionEnvironment env) { this.OSM_Env = env; return(this); }