// GDnD wiki example // Demonstrates: Minimal DNA container for a beginner Unity genetic algorithm // Related pages: [[genetic-algorithms]], [[overview-unity-nature-of-code-examples]] using UnityEngine; public class DNA { private const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "; public char[] Genes { get; } public float Fitness { get; private set; } public DNA(int length) { Genes = new char[length]; Randomise(); } public string Text => new string(Genes); public void Randomise() { for (int i = 0; i < Genes.Length; i++) Genes[i] = Alphabet[Random.Range(0, Alphabet.Length)]; } public void Evaluate(string target) { int matches = 0; for (int i = 0; i < Genes.Length; i++) if (Genes[i] == target[i]) matches++; Fitness = (float)matches / target.Length; } public DNA Crossover(DNA other) { DNA child = new DNA(Genes.Length); int midpoint = Random.Range(0, Genes.Length); for (int i = 0; i < Genes.Length; i++) child.Genes[i] = i < midpoint ? Genes[i] : other.Genes[i]; return child; } public void Mutate(float rate) { for (int i = 0; i < Genes.Length; i++) if (Random.value < rate) Genes[i] = Alphabet[Random.Range(0, Alphabet.Length)]; } }