示例#1
0
        public void NextEpoch(List <Point> points)
        {
            SimilarityCalculator.DistanceCalculationAlgorithm algorithm = SimilarityCalculator.EuclideanDistance;

            foreach (Point point in points)
            {
                Point  winnerNeuronCoordinate = new Point(0, 0);
                double minimumSimilarity      = int.MaxValue;
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        double similarity = point.SimilarityTo(neurons[i, j].coordinate, algorithm);
                        if (similarity < minimumSimilarity)
                        {
                            minimumSimilarity      = similarity;
                            winnerNeuronCoordinate = new Point(i, j);
                        }
                    }
                }

                Neuron winnerNeuron = neurons[winnerNeuronCoordinate.X, winnerNeuronCoordinate.Y];
                int    newX         = (int)(winnerNeuron.coordinate.X + rataInvatare[epoch] * (point.X - winnerNeuron.coordinate.X));
                int    newY         = (int)(winnerNeuron.coordinate.Y + rataInvatare[epoch] * (point.Y - winnerNeuron.coordinate.Y));
                winnerNeuron.coordinate = new Point(newX, newY);
                SetNeuron(winnerNeuronCoordinate.X, winnerNeuronCoordinate.Y, winnerNeuron);
            }

            epoch++;
        }
        private void stepToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (Centroid centroid in centroids)
            {
                centroid.points.Clear();
            }

            SimilarityCalculator.DistanceCalculationAlgorithm algorithm = SimilarityCalculator.EuclideanDistance;
            for (int i = 0; i < points.Count; i++)
            {
                double minimumSimilarity = Int32.MaxValue;
                int    centroidIndex     = -1;
                for (int j = 0; j < centroids.Count; j++)
                {
                    double similarity = points[i].SimilarityTo(centroids[j].Coordinate, algorithm);
                    if (similarity < minimumSimilarity)
                    {
                        minimumSimilarity = similarity;
                        centroidIndex     = j;
                    }
                }

                centroids[centroidIndex].points.Add(points[i]);
            }

            chart.Series.Clear();

            foreach (Centroid centroid in centroids)
            {
                centroid.RecalculateCoordinate();
                Series series = CreateSeries(new List <Point> {
                    centroid.Coordinate
                });
                series.MarkerSize = 30;
                series.Color      = centroid.color;
                chart.Series.Add(series);

                series       = CreateSeries(centroid.points);
                series.Color = Color.FromArgb(127, centroid.color);
                chart.Series.Add(series);
            }
        }
示例#3
0
 public static double SimilarityTo(this Point point1, Point point2, SimilarityCalculator.DistanceCalculationAlgorithm algorithm)
 {
     return(algorithm(point1, point2));
 }