public Turara_DistGenerator(int dim, double dist_weight, int main_index) { var turara = MyMath.MakeTurara(dim, dist_weight); var dist = Vector <double> .Build.Dense(dim, turara.other); dist[main_index] = turara.max; this.MyCustomDistribution = new CustomDistribution(dist, dist_weight); }
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 Exponential_DistGenerator(int dim, double dist_weight, int main_index) //意見数, { var range = Enumerable.Range(0, dim); //0から意見数-1(意見数分).要素も0,1,2,.. var dist_enumerable = range.Select((item, index) => Math.Pow(1 - dist_weight, index)); //1-dist_weightのindex乗 var sum = dist_enumerable.Sum(); var dist_list = dist_enumerable.Select(item => Math.Round(item / sum, 5)); //各要素をsumで割り算して小数第5位で丸める var dist = Vector <double> .Build.Dense(dist_list.ToArray()); //double型のリストにコピー var max_index = dist.MaximumIndex(); //最大値のindexを返す(同値の場合は最小のindex) var max = dist[max_index]; //最大値取得 dist[max_index] = dist[main_index]; //max_indexとmain_indexを交換 dist[main_index] = max; this.MyCustomDistribution = new CustomDistribution(dist, dist_weight); //意見を確立によって決定.distとdist_weightをセットしてCustomDistributionをセット }
public Shitei_DistGenerator(int dim, double dist_weight, int main_index) //意見数, { var dist_list = new List <double>() { 0.8, 0.2 }; var dist = Vector <double> .Build.Dense(dist_list.ToArray()); //double型のリストにコピー var max_index = dist.MaximumIndex(); //最大値のindexを返す(同値の場合は最小のindex) var max = dist[max_index]; //最大値取得 dist[max_index] = dist[main_index]; //max_indexとmain_indexを交換 dist[main_index] = max; this.MyCustomDistribution = new CustomDistribution(dist, dist_weight); //意見を確立によって決定.distとdist_weightをセットしてCustomDistributionをセット }
public static IDistribution GetDistribution(Enums.Distribuciones dist, Tuple <object, object, object> parameters) { IDistribution result = null; switch (dist) { case Enums.Distribuciones.Uniforme: result = new ContinuousUniformDistribution(); result.Initialize(parameters); break; case Enums.Distribuciones.Normal: result = new NormalDistribution(); result.Initialize(parameters); break; case Enums.Distribuciones.Beta: result = new BetaDistribution(); result.Initialize(parameters); break; case Enums.Distribuciones.BetaPERT: result = new BetaPertDistribution(); result.Initialize(parameters); break; case Enums.Distribuciones.Binomial_Discreta: result = new BinomialDistribution(); result.Initialize(parameters); break; case Enums.Distribuciones.Custom_Discreta: result = new CustomDistribution(); result.Initialize(parameters); break; default: break; } return(result); }
private static CustomDistribution GetCustomDistribution(string distrName, string formulaPPN, int index) { var startIndex = index; index += distrName.Length + 1; while (index != formulaPPN.Length && IsDigit(formulaPPN[index])) { index++; } var customDistrFileName = formulaPPN.Substring(startIndex, index - startIndex); var folderPath = Path.Combine(Directory.GetCurrentDirectory(), CUSTOM_DISTR_FOLDER_NAME); var fileAndExtention = Directory.GetFiles(folderPath) .Select(x => (Path.GetFileNameWithoutExtension(x), Path.GetExtension(x))) .FirstOrDefault(x => x.Item1 == customDistrFileName); var filePath = $"{fileAndExtention.Item1}{fileAndExtention.Item2}"; var data = File.ReadAllLines(Path.Combine(folderPath, filePath)).Select(x => double.Parse(x)).ToArray(); var customDistribution = new CustomDistribution(data); return(customDistribution); }
public CommonCuriocity_Experiment SetCustomDistribution(CustomDistribution custom_dist) { this.MyCustomDistribution = custom_dist; return(this); }
public Tuple <List <List <double> >, List <double>, List <Constraint>, List <double>, List <double>, OptDirectionEnum> GenerateProblem(int xCount, int alternativesCount, int constraintsCount, string optDirectionString, CustomDistribution distribution) { //define optimization direction OptDirectionEnum optDirection; switch (optDirectionString) { case "min": { optDirection = OptDirectionEnum.min; break; } case "max": { optDirection = OptDirectionEnum.max; break; } default: { optDirection = GenerateOptDirection(); break; } } //define ws List <double> ws = new List <double>(); for (int i = 0; i < alternativesCount; i++) { ws.Add(distribution.Generate()); } //define ls List <double> ls = new List <double>(); for (int i = 0; i < alternativesCount; i++) { ls.Add(distribution.Generate()); } //define numerators List <List <double> > numerators = new List <List <double> >(); for (int i = 0; i < alternativesCount; i++) { List <double> c = new List <double>(); for (int j = 0; j < xCount; j++) { c.Add(distribution.Generate()); } numerators.Add(c); } //define denominator List <double> denominator = new List <double>(); for (int i = 0; i < xCount; i++) { denominator.Add(distribution.Generate()); } //define constraints List <Constraint> constraints = new List <Constraint>(); for (int i = 0; i < constraintsCount; i++) { List <double> constrCoefs = new List <double>(); for (int j = 0; j < xCount; j++) { constrCoefs.Add(distribution.Generate()); } double freeValue = distribution.Generate(); SymbolEnum symbol = GenerateSymbolEnum(); constraints.Add(new Constraint(constrCoefs, symbol, freeValue)); } return(new Tuple <List <List <double> >, List <double>, List <Constraint>, List <double>, List <double>, OptDirectionEnum>(numerators, denominator, constraints, ls, ws, optDirection)); }
public void GenerateIndividualProblem(int xCount, int alternativesCount, int constraintsCount, string optDirectionString, CustomDistribution distribution) { bool flag = false; while (!flag) { try { var problem = _generateService.GenerateProblem(xCount, alternativesCount, constraintsCount, optDirectionString, distribution); var result = _solveHelper.SolveProblem(problem.Item1, problem.Item2, problem.Item3, problem.Item4, problem.Item5, problem.Item6); fileInput = WriteInputToFile(problem.Item1, problem.Item2, problem.Item3, problem.Item4, problem.Item5, problem.Item6.ToString()); fileOutput = WriteOutputToFile(result.Item1, result.Item2, result.Item3, result.Item4); flag = true; } catch (Y0IsNullException) { flag = false; } catch (NoOptimumException) { flag = false; } } }
public OpinionEnvironment SetMaliciousCustomDistribution(CustomDistribution custom_malicious_dist) { this.MyMaliciousCustomDistribution = custom_malicious_dist; return(this); }
public OpinionEnvironment SetCustomDistribution(CustomDistribution custom_dist) { this.MyCustomDistribution = custom_dist; return(this); }
static void Main(string[] args) { var path = @"C:\RandomData\data.txt"; var textData = File.ReadAllLines(path); var distrData = textData.Select(t => double.Parse(t)).ToArray(); var customDistribution = new CustomDistribution(distrData) + new NormalDistribution(0, 1); Console.WriteLine("\nПользовательское распределение"); Console.WriteLine(customDistribution.SummaryInfo); var data = customDistribution.GetPDFDataForPlot().ToArray(); var series51 = MakeSeries(data); var chart51 = MakeChart(series51, "x", "f(x)", "График f(x) пользовательского распределения", SeriesChartType.Column, 1, -10, 10); ///// //var sum = new NormalDistribution(2, 1) + new NormalDistribution(0, 1); //Console.WriteLine("\nПользовательское распределение"); //Console.WriteLine(sum.SummaryInfo); //var sumData = sum.GetPDFDataForPlot().ToArray(); //var series52 = MakeSeries(sumData); //var chart52 = MakeChart(series52, "x", "f(x)", "График суммы двух нормальных", // SeriesChartType.Column, 1, -10, 10); //////////////////////////////////////////////////// var x = 0.17; var gamma = Gamma.Function(x); //var x = new double[] //{ // -1, 0, 1, 2, 3, 4 //}; //var y = new double[x.Length]; //for (var i = 0; i < x.Length; i++) //{ // y[i] = Math.Pow(x[i], 2); //} //var L0 = new UniformDistribution(9, 10); //var L1 = new UniformDistribution(11, 12); //var dt = new NormalDistribution(1, 2); //var productOfNormalVars = (L1 / L0 - 1) / dt; ////////////////////////////////////////////////////// //var customDistribution = new CauchyDistribution(0, 0.5); //Console.WriteLine("\nПользовательское распределение"); //Console.WriteLine(customDistribution.SummaryInfo); //var data = customDistribution.GetPDFDataForPlot(-5, 5).ToArray(); //var series51 = MakeSeries(data); //var chart51 = MakeChart(series51, "x", "f(x)", "График f(x) пользовательского распределения", // SeriesChartType.Column, 0.5, -5, 5); ////////////////////////////////////////////////////// /// //var normalVar1 = new ExponentialDistribution(1.5); ////var normalVar1 = new UniformDistribution(0, 1) + new UniformDistribution(0, 1); //var series61 = MakeSeries(normalVar1.GetPDFDataForPlot().ToArray()); //var chart61 = MakeChart(series61, "x", "f(x)", "График f(x) нормального распределения", // SeriesChartType.Column, 1, -3, 5); //var series62 = MakeSeries(normalVar1.GetCDFDataForPlot().ToArray()); //var chart62 = MakeChart(series62, "x", "F(x)", "График F(x) нормального распределения", // SeriesChartType.Column, 1, -3, 5); //Console.WriteLine("\nНормальное распределение"); //Console.WriteLine(normalVar1.SummaryInfo); //////////////////////////////////////////////////// //var customDistribution = new CauchyDistribution(0, 0.5); //var dataCount = 1000000; //var dataSampling = new List<double>(); //for (var i = 0; i < dataCount; i++) //{ // dataSampling.Add(customDistribution.GetNewRandomValue()); //} //dataSampling.Sort(); //var (pdfValuesExpected, pdfValuesActual) = CalculateExpectedAndActualPDFValues(customDistribution, dataSampling.ToArray()); //var chiSquareTest = new Test(pdfValuesExpected.Select(p => p.Y).ToArray(), pdfValuesActual.Select(p => p.Y).ToArray(), pdfValuesExpected.Count() - 1); //var series1 = MakeSeries(pdfValuesExpected); //var chart1 = MakeChart(series1, "x", "f(x)", "pdfValuesExpected", // SeriesChartType.Column, 1, -1, 30); //var series2 = MakeSeries(pdfValuesActual); //var chart2 = MakeChart(series2, "x", "f(x)", "pdfValuesActual", // SeriesChartType.Column, 1, -1, 30); //////////////////////////////////////////////////// var forms = MakeFormsFromCharts(new List <Chart> { chart51 }); Application.EnableVisualStyles(); Application.Run(new MultiFormContext(forms.ToArray())); Console.ReadKey(); }
public Normal_Experiment SetCustomDistribution(CustomDistribution custom_dist) { this.MyCustomDistribution = custom_dist; return(this); }