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); }
private Runner GetRandomRunner(Runner[] fromRunners) => fromRunners[SyncRandom.NextInt(0, fromRunners.Length)].Clone();