Exemplo n.º 1
0
        public void Mutate(float mutationRate)
        {
            for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
                {
                    var rand = SyncRandom.NextFloat();

                    if (rand < mutationRate)
                    {
                        // Debug.WriteLine(string.Format("mutated {0}:{1}", rowIndex, columnIndex));
                        matrix[rowIndex, columnIndex] += SyncRandom.NextGaussian() / 5;

                        if (matrix[rowIndex, columnIndex] > 1)
                        {
                            matrix[rowIndex, columnIndex] = 1;
                        }
                        else if (matrix[rowIndex, columnIndex] < -1)
                        {
                            matrix[rowIndex, columnIndex] = -1;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
 public void Randomize()
 {
     for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
     {
         for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
         {
             matrix[rowIndex, columnIndex] = SyncRandom.NextFloat(-1, 1);
         }
     }
 }
Exemplo n.º 3
0
        public Matrix Crossover(Matrix partner)
        {
            var child = new Matrix(rowCount, columnCount);

            var randomRow    = SyncRandom.NextInt(0, rowCount);
            var randomColumn = SyncRandom.NextInt(0, columnCount);

            for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
                {
                    child.matrix[rowIndex, columnIndex] = (rowIndex < randomRow) || (rowIndex == randomRow && columnIndex <= randomColumn) ?
                                                          matrix[rowIndex, columnIndex] :
                                                          partner.matrix[rowIndex, columnIndex];
                }
            }

            return(child);
        }
Exemplo n.º 4
0
 private Runner GetRandomRunner(Runner[] fromRunners) => fromRunners[SyncRandom.NextInt(0, fromRunners.Length)].Clone();