Untitled
unknown
plain_text
a year ago
3.7 kB
4
Indexable
import random import string MyString = "Dan_Ling*0918273645" population = 1000 # population size pc = 0.7 pm = 0.1 B = 8 # number of bits length = len(MyString) def generate_random_string(): parts = MyString.split('_') first_name = parts[0] last_name, student_id = parts[1].split('*') first_name_length = len(first_name) last_name_length = len(last_name) student_id_length = len(student_id) generated_first_name = ''.join(random.choice(string.ascii_letters) for _ in range(first_name_length)) generated_last_name = ''.join(random.choice(string.ascii_letters) for _ in range(last_name_length)) generated_student_id = ''.join(random.choice(string.digits) for _ in range(student_id_length)) generated_string = f"{generated_first_name}_{generated_last_name}*{generated_student_id}" return generated_string def crossover(parent1, parent2): crossover_point = random.randint(0, length - 1) child1 = parent1[:crossover_point] + parent2[crossover_point:] child2 = parent2[:crossover_point] + parent1[crossover_point:] return child1, child2 def mutation(child1, child2): mutationPoint = random.randint(0, len(child1) - 1) mutated_child1, mutated_child2 = list(child1), list(child2) mutated_child1[mutationPoint] = "1" if mutated_child1[mutationPoint] == "0" else "0" mutated_child2[mutationPoint] = "1" if mutated_child2[mutationPoint] == "0" else "0" mutated_child1 = ''.join(mutated_child1) mutated_child2 = ''.join(mutated_child2) return mutated_child1, mutated_child2 def fitness(input_string, target_string): fit_score = sum(1 for i in range(length) if input_string[i] == target_string[i]) fitness = fit_score / length return fitness # Generate initial population individuals = [generate_random_string() for _ in range(population)] # Evolution loop over generations for generation in range(100): print(f"Generation {generation + 1} bit strings:") for ind in individuals: bit_string = ''.join(format(ord(char), '08b') for char in ind) print(f"Random Generated String: {ind}, Bit String: {bit_string}") fitness_scores = [fitness(individual, MyString) for individual in individuals] # Check if any individual matches the target string for i, individual in enumerate(individuals): if individual == MyString: print(f"Perfect match found in generation {generation + 1}!") print(f"Individual: {individual}, Fitness: {fitness_scores[i]}") exit() # Terminate the program # Sort individuals based on fitness scores sorted_individuals = [individual for _, individual in sorted(zip(fitness_scores, individuals), reverse=True)] # Keep the top 100 fittest individuals individuals = sorted_individuals[:population] # Perform crossover and mutation new_individuals = [] for _ in range(population // 2): parent1 = random.choice(individuals) parent2 = random.choice(individuals) child1, child2 = crossover(parent1, parent2) mutated_child1, mutated_child2 = mutation(child1, child2) new_individuals.append(mutated_child1) new_individuals.append(mutated_child2) # Append mutated children to the population individuals.extend(new_individuals) # Keep only the top 100 fittest individuals after appending mutated children fitness_scores = [fitness(individual, MyString) for individual in individuals] sorted_individuals = [individual for _, individual in sorted(zip(fitness_scores, individuals), reverse=True)] individuals = sorted_individuals[:population]
Editor is loading...
Leave a Comment