下面是一个简单的Python遗传算法代码示例:

import random

# 遗传算法参数
POPULATION_SIZE = 100  # 种群数量
P_CROSSOVER = 0.9  # 交叉概率
P_MUTATION = 0.1  # 变异概率
MAX_GENERATIONS = 50  # 最大迭代次数

# 问题参数
TARGET = "Hello, World!"  # 目标字符串
GENE_SIZE = len(TARGET)  # 基因长度

# 初始化种群
def init_population():
    population = []
    for _ in range(POPULATION_SIZE):
        individual = ''.join(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.!') for _ in range(GENE_SIZE))
        population.append(individual)
    return population

# 计算适应度(目标字符串与个体之间的差异程度)
def fitness(individual):
    score = 0
    for i in range(GENE_SIZE):
        if individual[i] == TARGET[i]:
            score += 1
    return score

# 选择操作(轮盘赌算法)
def selection(population):
    total_fitness = sum(fitness(individual) for individual in population)
    probabilities = [fitness(individual) / total_fitness for individual in population]
    selected = random.choices(population, probabilities, k=2)
    return selected[0], selected[1]

# 交叉操作(单点交叉)
def crossover(parent1, parent2):
    crossover_point = random.randint(1, GENE_SIZE - 1)
    child1 = parent1[:crossover_point] + parent2[crossover_point:]
    child2 = parent2[:crossover_point] + parent1[crossover_point:]
    return child1, child2

# 变异操作(随机选择一个位置进行变异)
def mutation(individual):
    mutated_index = random.randint(0, GENE_SIZE - 1)
    mutated_char = random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.!')
    individual = individual[:mutated_index] + mutated_char + individual[mutated_index+1:]
    return individual

# 主函数
def main():
    population = init_population()
    for generation in range(MAX_GENERATIONS):
        print("Generation:", generation)
        for individual in population:
            print(individual)
            if individual == TARGET:
                print("Target found!")
                return
        new_population = []
        while len(new_population) < POPULATION_SIZE:
            parent1, parent2 = selection(population)
            if random.random() < P_CROSSOVER:
                child1, child2 = crossover(parent1, parent2)
                parent1, parent2 = child1, child2
            if random.random() < P_MUTATION:
                parent1 = mutation(parent1)
                parent2 = mutation(parent2)
            new_population.append(parent1)
            new_population.append(parent2)
        population = new_population

if __name__ == '__main__':
    main()

这个代码实现了一个简单的遗传算法来逼近目标字符串"Hello, World!"。代码中使用了轮盘赌算法进行选择操作,单点交叉进行交叉操作,随机选择一个位置进行变异操作。每一代都会输出当前种群中的个体,并在找到目标字符串时停止迭代。

python遗传算法代码

原文地址: http://www.cveoy.top/t/topic/iMDY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录