python中遗传算法优化过程的实例
创始人
2024-11-19 07:41:22
0次

问题描述

一个名为Robby的机器人生活在一个充满垃圾的二维网格世界中,周围有4堵墙(如下图所示)。这个项目的目标是发展一个最佳的控制策略,使他能够有效地捡垃圾,而不是撞墙。

问题图片所示:

python中遗传算法优化过程的实例

涉及方法

任何GA的优化步骤如下:

l 生成问题初始随机解的“种群”

l 个体的“拟合度”是根据它解决问题的程度来评估的

l 最合适的解决方案进行“繁殖”并将“遗传”物质传递给下一代的后代

l 重复第2步和第3步,直到我们得到一组优化的解决方案、

应用的遗传算法代码展示:

在下面的代码中,我们生成一个初始的机器人种群,让自然选择来运行它的过程。我应该提到的是,当然有更快的方法来实现这个算法(例如利用并行化)。

# 初始种群
pop = [Robot() for x in range(pop_size)]
results = []
 
# 执行进化
for i in tqdm(range(num_gen)):
    scores = np.zeros(pop_size)
 
    # 遍历所有机器人
    for idx, rob in enumerate(pop):
        # 运行垃圾收集模拟并计算拟合度
        score = rob.simulate(iter_per_sim, moves_per_iter)
        scores[idx] = score
 
    results.append([scores.mean(),scores.max()]) # 保存每一代的平均值和最大值
 
    best_robot = pop[scores.argmax()] # 保存最好的机器人
 
    # 限制那些能够交配的机器人的数量
    inds = np.argpartition(scores, -num_breeders)[-num_breeders:] # 基于拟合度得到顶级机器人的索引
    subpop = []
    for idx in inds:
        subpop.append(pop[idx])
    scores = scores[inds]
 
    # 平方并标准化
    norm_scores = (scores - scores.min()) ** 2
    norm_scores = norm_scores / norm_scores.sum()
 
    # 创造下一代机器人
    new_pop = []
    for child in range(pop_size):
        # 选择拟合度优秀的父母
        p1, p2 = np.random.choice(subpop, p=norm_scores, size=2, replace=False)
        new_pop.append(Robot(p1.dna, p2.dna))
 
pop = new_pop

效果展示:

python中遗传算法优化过程的实例

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...