遗传算法求解最值 用于理解遗传算法的工作原理

import numpy as np

# 目标函数
def fitness(x):
    return x**2 - 4*x + 4

# 初始种群大小
pop_size = 100

# 种群染色体长度(即解的精度)
chromosome_length = 10

# 变异概率
mutation_rate = 0.01

# 最大迭代次数
max_iter = 1000

# 创建初始种群
pop = np.random.randint(0, 2, (pop_size, chromosome_length))

for generation in range(max_iter):
    # 评估当前种群适应度
    fitness_values = np.array([fitness(np.binary_repr(x, width=chromosome_length)[::-1]).sum() for x in pop])
    
    # 选择最适应的染色体进行繁殖
    parents_indices = np.random.choice(np.arange(pop_size), size=pop_size, replace=True, p=fitness_values/fitness_values.sum())
    parents = pop[parents_indices]
    
    # 通过交叉和变异产生新一代
    offspring = np.empty((pop_size, chromosome_length))
    for i in range(pop_size):
        # 随机选择两个父母进行交叉
        parent1 = parents[np.random.randint(0, pop_size)]
        parent2 = parents[np.random.randint(0, pop_size)]
        crossover_point = np.random.randint(1, chromosome_length-1)
        offspring[i, :crossover_point] = parent1[offspring[i, :crossover_point].astype(int)]
        offspring[i, crossover_point:] = parent2[offspring[i, crossover_point:].astype(int)]
        
        # 对新个体进行变异
        for j in range(chromosome_length):
            if np.random.rand() < mutation_rate:
                offspring[i, j] = 1 if offspring[i, j] == 0 else 0
    pop = offspring
    
# 输出最优解的染色体和适应度值
best_fitness_index = np.argmax(fitness_values)
best_solution = np.binary_repr(pop[best_fitness_index, :], width=chromosome_length)[::-1].astype(int)
print(f"Best solution: {best_solution}, Fitness: {fitness(best_solution)}")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值