Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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をセット
        }
Exemple #4
0
        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をセット
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 public CommonCuriocity_Experiment SetCustomDistribution(CustomDistribution custom_dist)
 {
     this.MyCustomDistribution = custom_dist;
     return(this);
 }
Exemple #8
0
        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));
        }
Exemple #9
0
        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;
                }
            }
        }
Exemple #10
0
 public OpinionEnvironment SetMaliciousCustomDistribution(CustomDistribution custom_malicious_dist)
 {
     this.MyMaliciousCustomDistribution = custom_malicious_dist;
     return(this);
 }
Exemple #11
0
 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();
        }
Exemple #13
0
 public Normal_Experiment SetCustomDistribution(CustomDistribution custom_dist)
 {
     this.MyCustomDistribution = custom_dist;
     return(this);
 }