/// <summary> /// Construct with the provided distance metric and k-means settings. /// </summary> /// <param name="distanceMetric">Distance metric.</param> /// <param name="maxKMeansIters">Maximum number of k-means iterations.</param> /// <param name="regularizationConstant">Regularization constant.</param> public RegularizedGeneticKMeansSpeciationStrategy( IDistanceMetric <T> distanceMetric, int maxKMeansIters, double regularizationConstant) { _distanceMetric = distanceMetric; _maxKMeansIters = maxKMeansIters; _regularizationConstant = regularizationConstant; _kmeansInit = new GeneticKMeansSpeciationInit <T>(distanceMetric); }
/// <summary> /// Construct a new instance. /// </summary> /// <param name="distanceMetric">Distance metric.</param> /// <param name="maxKMeansIters">Maximum number of k-means iterations.</param> /// <param name="degreeOfParallelism">The number of CPU threads to distribute work to.</param> public GeneticKMeansSpeciationStrategy( IDistanceMetric <T> distanceMetric, int maxKMeansIters, int degreeOfParallelism) { _distanceMetric = distanceMetric; _maxKMeansIters = maxKMeansIters; // Reject degreeOfParallelism values less than 2. -1 should have been resolved to an actual number by the time // this constructor is invoked, and 1 is nonsensical for a parallel strategy. if (degreeOfParallelism < 2) { throw new ArgumentException("Must be 2 or above.", nameof(degreeOfParallelism)); } _parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = degreeOfParallelism }; _kmeansInit = new GeneticKMeansSpeciationInit <T>(distanceMetric, _parallelOptions); }
/// <summary> /// Construct a new instance. /// </summary> /// <param name="distanceMetric">Distance metric.</param> /// <param name="maxKMeansIters">Maximum number of k-means iterations.</param> public GeneticKMeansSpeciationStrategy(IDistanceMetric <T> distanceMetric, int maxKMeansIters) { _distanceMetric = distanceMetric ?? throw new ArgumentNullException(nameof(distanceMetric)); _maxKMeansIters = maxKMeansIters; _kmeansInit = new GeneticKMeansSpeciationInit <T>(distanceMetric); }