public FullSolution Run()
        {
            Solver solver = new Solver();
            Random rand   = new Random();

            if (A is null)
            {
                if (_generator is null)
                {
                    throw new System.InvalidOperationException("Generating values parameters in GeneratorTaskCondition must be assigned to Problem");
                }
                (A, B) = _generator.GenerateAB(N, rand);
                L      = _generator.GenerateL(R, rand);
                Alpha  = _generator.GenerateAlpha(R);
                Cs     = new double[R][];
                for (var i = 0; i < R; i++)
                {
                    Cs[i] = _generator.GenerateMatrix(N, rand);
                }
            }

            (double[][] xs, double[] fsForXs) = solver.GetSolutions(Cs, A, B);
            (double[] solution, _)            = solver.SolveSeveral(Cs, A, B, L, Alpha, fsForXs);
            double[] newAlpha = new double[R];
            Alpha.CopyTo(newAlpha, 0);
            double[] optimalX      = solver.UpdateX(Cs, A, B, L, ref newAlpha, fsForXs, solution);
            double[] fsForX        = solver.CalculateFs(Cs, optimalX);
            double[] deltas        = solver.CalculateDeltas(fsForX, fsForXs);
            double[] ys            = solver.CalculateYs(deltas, L);
            double   functionValue = solver.CalculateOptimalFunc(ys, newAlpha);

            double[] distances = solver.CalculateDistances(xs, optimalX);

            Solution solutionWithoutChange = new Solution(optimalX, functionValue, Alpha, newAlpha, Cs, fsForX, xs, fsForXs, deltas, ys, distances, B.Length);

            double[][] newCs = new double[R][];
            PercentFinder.CopyMultidimensional(Cs, ref newCs);

            ParametersForDefined parameters = new ParametersForDefined(optimalX, newCs, A, B, L, Alpha, _cChangeParameters);

            ParametersForDefined = parameters;

            double persentOfChange = PercentFinder.FindPercentOfChange(parameters, solver, rand);

            //double persentOfChange = PercentFinder.SearchMeanPercent(PercentFinder.FindPercentOfChange, parameters, 0.01, solver, rand);
            double[] newX        = parameters.NewX;
            double[] newNewAlpha = new double[R];
            newAlpha.CopyTo(newNewAlpha, 0);
            (double[][] newXs, double[] newFsForXs) = solver.GetSolutions(newCs, A, B);
            newX = solver.UpdateX(newCs, A, B, L, ref newNewAlpha, newFsForXs, newX);
            double[] newfsForX        = solver.CalculateFs(newCs, newX);
            double[] newDeltas        = solver.CalculateDeltas(newfsForX, newFsForXs);
            double[] newYs            = solver.CalculateYs(newDeltas, L);
            double   newFunctionValue = solver.CalculateOptimalFunc(newYs, newNewAlpha);

            double[] newDistances       = solver.CalculateDistances(newXs, newX);
            Solution solutionWithChange = new Solution(newX, newFunctionValue, newAlpha, newNewAlpha, newCs, newfsForX, newXs, newFsForXs, newDeltas, newYs, newDistances, B.Length);

            return(new FullSolution(A, B, L, solutionWithoutChange, persentOfChange, solutionWithChange));
        }
Esempio n. 2
0
        public override SearchParameters Copy()
        {
            var newCs = new double[_csBase.Length][];

            PercentFinder.CopyMultidimensional(_csBase, ref newCs);
            var newParams = new ParametersForDefined(OldX, newCs, A, B, L, Alpha, CChangeParameters);

            return(newParams);
        }
        private void Run_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ExceptionLabel.Foreground = Brushes.DarkRed;
                if (AccuracyComboBox.SelectedItem == null)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelAccuracyNOTChosen);
                }

                var random               = new Random();
                var solver               = new ClassLibrary.Logic.Solver();
                var accuracy             = double.Parse(AccuracyComboBox.Text);
                var parametersForDefined = FileProcessing.ReadSolutionForPersistenceTest(_filename);

                if (parametersForDefined == null)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelIncorrectFileFormat);
                }

                (double, double)cParameters  = PercentFinder.GetCsRange(parametersForDefined);
                (double, double)abParameters = PercentFinder.GetABRange(parametersForDefined);
                (double, double)lParameters  = PercentFinder.GetLRange(parametersForDefined);

                DistributionParametersService distributionParameters = new DistributionParametersService();
                var distributionParametersIds = distributionParameters.GetAppropriateIds(
                    cParameters, abParameters, lParameters);

                if (distributionParametersIds.Count < 5)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelNOTEnoughData);
                }

                PercentageService percentageService = new PercentageService();
                var percentages = percentageService.GetAppropriate(parametersForDefined.A.Length, distributionParametersIds, parametersForDefined.Alpha.Length);

                if (percentages.Count < 5)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelNOTEnoughDataForParameters);
                }

                var valueFromDB = percentages.Average();

                //var percent = PercentFinder.FindPercentOfChange(parametersForDefined, solver, random);
                parametersForDefined.Clear();
                var percent = PercentFinder.SearchMeanPercent(PercentFinder.FindPercentOfChange, parametersForDefined, accuracy, solver, random);

                ExceptionLabel.Content = "";
                var window = new Result(valueFromDB, percent, percentages);
                window.Show();
            }
            catch (Exception ex)
            {
                ExceptionLabel.Content = ex.Message;
            }
        }
Esempio n. 4
0
 public ParametersForDefined(double[] oldX, double[][] cs, double[] a, double[] b, double[] l, double[] alpha, CChangeParameters parameters) : base(parameters)
 {
     A       = a;
     B       = b;
     L       = l;
     Alpha   = alpha;
     OldX    = oldX;
     _csBase = new double[cs.Length][];
     _cs     = new double[cs.Length][];
     PercentFinder.CopyMultidimensional(cs, ref _csBase);
     PercentFinder.CopyMultidimensional(cs, ref _cs);
 }
        private void FindPercentButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var accuracy = double.Parse(AccuracyComboBox.Text);
                var random   = new Random();
                var solver   = new ClassLibrary.Logic.Solver();
                //var parametersForDefined = FileProcessing.ReadSolutionForPersistenceTest(_filename);

                (double, double)cParameters  = PercentFinder.GetCsRange(_data.ParametersForDefined);
                (double, double)abParameters = PercentFinder.GetABRange(_data.ParametersForDefined);
                (double, double)lParameters  = PercentFinder.GetLRange(_data.ParametersForDefined);

                DistributionParametersService distributionParameters = new DistributionParametersService();
                var distributionParametersIds = distributionParameters.GetAppropriateIds(
                    cParameters, abParameters, lParameters);
                if (distributionParametersIds.Count < 5)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelNOTEnoughData);
                }

                PercentageService percentageService = new PercentageService();
                var percentages = percentageService.GetAppropriate(_data.ParametersForDefined.A.Length, distributionParametersIds, _data.R);

                if (percentages.Count < 5)
                {
                    throw new Exception(Properties.Resources.ExceptionLabelNOTEnoughDataForParameters);
                }

                var valueFromDB = percentages.Average();

                //var percent = PercentFinder.FindPercentOfChange(parametersForDefined, solver, random);
                _data.ParametersForDefined.Clear();
                var percent = PercentFinder.SearchMeanPercent(PercentFinder.FindPercentOfChange, _data.ParametersForDefined, accuracy, solver, random);

                var window = new Result(valueFromDB, percent, percentages);
                window.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Esempio n. 6
0
 public override void Clear()
 {
     PercentFinder.CopyMultidimensional(_csBase, ref _cs);
 }