public void Init(PartitionSettings settings) { _settings = settings; _timer = new Stopwatch(); _timer.Start(); _partitionFixedCentersComputer.Init(_settings); var zeroTaus = GetZeroIterationCentersPositions(settings); SetCentersPositions(zeroTaus); var muGrids = GetMuGrids(settings); PlacingAlgorithm = new FuzzyPartitionPlacingCentersAlgorithm(_settings, zeroTaus, muGrids); _timer.Stop(); }
public void Grid3x3PlacingPartitionTest() { var f = "Logs.txt"; if (File.Exists(f)) { File.Delete(f); } Trace.Listeners.Add(new TextWriterTraceListener(f)); var settings = new PartitionSettings { IsCenterPlacingTask = false, SpaceSettings = new SpaceSettings { MinCorner = VectorUtils.CreateVector(0, 0), MaxCorner = VectorUtils.CreateVector(10, 10), GridSize = new List <int> { 8, 8 }, DensityType = DensityType.Everywhere1, MetricsType = MetricsType.Euclidean, CustomDensityFunction = null, CustomDistanceFunction = null }, CentersSettings = new CentersSettings { CentersCount = 2, CenterDatas = new List <CenterData> { new CenterData { A = 0, W = 1, Position = VectorUtils.CreateVector(2, 5), IsFixed = true }, new CenterData { A = 0, W = 1, Position = VectorUtils.CreateVector(8, 5), IsFixed = true }, } }, FuzzyPartitionFixedCentersSettings = new FuzzyPartitionFixedCentersSettings { GradientEpsilon = 0.01, GradientStep = 0.1, MaxIterationsCount = 400 }, FuzzyPartitionPlacingCentersSettings = new FuzzyPartitionPlacingCentersSettings { CentersDeltaEpsilon = 0.1, GaussLegendreIntegralOrder = 32 }, RAlgorithmSettings = new RAlgorithmSettings { SpaceStretchFactor = 2, H0 = 1, MaxIterationsCount = 30 } }; var zeroTaus = new List <Vector <double> > { //VectorUtils.CreateVector(2, 5), //VectorUtils.CreateVector(8, 5) VectorUtils.CreateVector(1, 1), VectorUtils.CreateVector(10, 10) }; var calculator = new FuzzyPartitionFixedCentersAlgorithm(settings); var partition = calculator.BuildPartition(); var muValueGetters = partition.Select(v => new GridValueInterpolator(settings.SpaceSettings, new MatrixGridValueGetter(v))).ToList(); var placingAlgorithm = new FuzzyPartitionPlacingCentersAlgorithm(settings, zeroTaus, muValueGetters); while (true) { placingAlgorithm.DoIteration(muValueGetters); var centers = placingAlgorithm.GetCenters(); var targetFunctionalCalculator = new TargetFunctionalCalculator(settings); var targetFunctionalValue = targetFunctionalCalculator.CalculateFunctionalValue(muValueGetters); Trace.WriteLine($"Target functional value = {targetFunctionalValue}\n"); for (int i = 0; i < settings.CentersSettings.CentersCount; i++) { settings.CentersSettings.CenterDatas[i].Position = centers[i].Clone(); Trace.WriteLine($"Center #{i + 1}: {centers[i][0]:0.00} {centers[i][1]:0.00}"); } calculator = new FuzzyPartitionFixedCentersAlgorithm(settings); partition = calculator.BuildPartition(); if (placingAlgorithm.IsStopConditionSatisfied()) { break; } } var list = placingAlgorithm.GetCenters(); for (var index = 0; index < list.Count; index++) { var center = list[index]; Trace.WriteLine($"Center #{index + 1}: {center[0]:0.00} {center[1]:0.00}"); } Trace.Flush(); var vec = VectorUtils.CreateVector(44, 4, 4, 4, 4); var x = 4; }