1. 从感知到数据驱动

性能问题,往往是从“感觉”开始的。比如——滑动列表时明显掉帧、点击按钮后界面迟迟不响应、应用启动时间漫长、或突然出现 OOM(内存溢出)从而导致崩溃。这些“感知问题”是用户最先接触到的体验信号,也是性能优化的出发点。
但“感觉”并不等于“原因”。一个卡顿,可能是因为主线程被阻塞,也可能是图片解码过慢,甚至只是动画过渡时 CPU 和 GPU 同时被抢占。

阅读全文 »

1. 为什么要声明式导航

在 Flutter 的早期开发中,我们几乎都是通过 Navigator.push() 来完成页面跳转的。
这种方式直观、易上手,但当应用体量一旦变大、业务流程变复杂,命令式导航(imperative navigation)就会开始暴露出一系列问题。

阅读全文 »

1. 从“能跑”到“可扩展、可维护”

平时开发中,很多开发者虽然能把视图(Widgets)按页面或组件拆成不同的文件,但业务逻辑和状态处理往往直接写在 Widget 内部,依赖 setState 或零散的单例/全局变量来管理。这种“分文件但逻辑内聚”的灵活方式虽然能在小项目里能快速迭代、方便验证想法,但不讲究长期维护,就像临时搭建的一间小屋。

阅读全文 »

1. 为什么要自定义 RenderObject

在 Flutter 中,我们平时开发中最常打交道的是 Widget。它们像是 UI 的“配置表”,描述界面要长什么样。但 Widget 并不真正负责绘制,它只是告诉框架“我要一个红色的方块”或者“我要一个可滚动的列表”。真正负责把这些需求落到屏幕上的,是底层的 RenderObject

阅读全文 »

1. 概述

1.1 为什么要理解 Flutter 渲染原理

可能很多人刚接触 Flutter 时,往往只关心“怎么写 Widget”。但是当项目复杂度增加,就会遇到各种疑惑:为什么页面会掉帧?为什么某个布局报错“RenderBox was not laid out”?为什么同样的动画,有的流畅,有的卡顿?这些问题的根源,几乎都藏在 Flutter 的渲染机制里。

阅读全文 »

1. 项目背景与目标

1.1 为什么选择 A3C 来玩超级马里奥?

超级马里奥是一个经典的横版过关游戏,玩法是简单,但是环境比较复杂:玩家要面对敌人、陷阱、跳跃平台,还要在有限时间内快速决策。
所以在强化学习中,它被认为是一个很好的 实验case

  • 状态空间是高维的(游戏画面本身就是像素矩阵)
  • 行动结果对未来奖励有长远影响(跳跃错过管道可能直接失败)
  • 游戏场景变化多端,能充分考察智能体的泛化能力
阅读全文 »

1. AC 算法

1.1 策略梯度

在强化学习中,如果我们想让智能体学会这样一个 策略(在不同状态下选什么动作):

  • 一个动作能带来高奖励,就要让它以后更可能被选上
  • 一个动作只能带来低回报,就要减少使用它的频率

而策略梯度就是一个这样的工具,“根据奖励信号,调整策略参数,让好动作更可能被选中,坏动作少被选上。”

阅读全文 »

1. 任务与背景介绍

在 Gym/Gymnasium 的 MountainCar-v0 环境中,有这样一个场景:一辆小车被困在两个山坡之间,目标是到达右侧山坡顶端的红旗位置。

乍一看,这似乎只需要踩油门往右冲就行,但现实并非如此,小车的发动机动力不足,单次加速无法直接登顶,它会在半途滑落回谷底。正确的策略是先向左加速爬上左坡,然后顺势向右冲下去,再反复摆动、积累动能,最终才能冲上右侧山顶。

阅读全文 »

1.PPO算法与动作空间类型概览

1.PPO(Proximal Policy Optimization)简介

PPO(近端策略优化)是OpenAI于2017年提出的强化学习算法,通过创新的”剪切目标函数”设计,在保证训练稳定性的同时实现高效策略优化。其核心思想是通过约束策略更新幅度,防止策略突变导致的性能崩溃,解决了传统策略梯度方法(如TRPO)的工程实现复杂性问题

阅读全文 »

1.PPO 算法概述

1.PPO 的提出背景

我们还是以智能体如何控制飞船落地的小游戏为例,智能体的目标是通过一系列操作(如向左移动或向右移动)实现平稳着陆。在训练初期,智能体并不知道应该如何操作,它需要通过反复的试探操作,从环境中不断获得反馈并调整策略,最终掌握一套“高奖励”操作方式。

阅读全文 »
0%