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)); }
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; } }
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); } }
public override void Clear() { PercentFinder.CopyMultidimensional(_csBase, ref _cs); }