private float GetEyeValue(RaycastHit2D[] hits) { float distance = 0; foreach (RaycastHit2D hit in hits) { if (hit.collider != null) { if (hit.collider.gameObject.tag == "OffTrackCollider") { distance = StaticMath.GetDistBetweenPoints(hit.point.x, hit.point.y, transform.position.x, transform.position.y); return(distance); } } } return(distance); }
public static Matrix Crossover(Matrix m1, Matrix m2) { Matrix result = new Matrix(m1.rows, m1.columns); for (int i = 0; i < m1.rows; i++) { for (int j = 0; j < m1.columns; j++) { if (StaticMath.GetRandomInteger(0, 2) == 1) { result.data[i, j] = m1.data[i, j]; } else { result.data[i, j] = m2.data[i, j]; } } } return(result); }
public static Matrix Mutate(Matrix m, float percent) { Matrix result = new Matrix(m.rows, m.columns); for (int i = 0; i < m.rows; i++) { for (int j = 0; j < m.columns; j++) { if (StaticMath.GetRandomFloat(0, 100) < percent) { result.data[i, j] = StaticMath.GetRandomFloat(-1.0f, 1.0f); } else { result.data[i, j] = m.data[i, j]; } } } return(result); }
public NeuralNetwork(int inputs, int hiddenLayers, int hiddenNodesPerLayer, int outputs) { if (inputs == 0 || hiddenLayers == 0 || hiddenNodesPerLayer == 0 || outputs == 0) { throw new System.ArgumentException("Arguments can't be 0!"); } this.numberOfInputs = inputs; this.numberOfHiddenLayers = hiddenLayers; this.numberOfHiddenNodesInLayer = hiddenNodesPerLayer; this.numberOfOutputs = outputs; layers = new Matrix[hiddenLayers + 1]; biases = new Matrix[hiddenLayers + 1]; Matrix layer; Matrix bias; for (int i = 0; i < this.numberOfHiddenLayers + 1; i++) { if (i == 0) { layer = new Matrix(hiddenNodesPerLayer, inputs); bias = new Matrix(hiddenNodesPerLayer, 1); } else if (i == this.numberOfHiddenLayers) { layer = new Matrix(outputs, hiddenNodesPerLayer); bias = new Matrix(outputs, 1); } else { layer = new Matrix(hiddenNodesPerLayer, hiddenNodesPerLayer); bias = new Matrix(hiddenNodesPerLayer, 1); } StaticMath.Randomize(layer); StaticMath.Randomize(bias); layers[i] = layer; biases[i] = bias; } }